ميزان حرارة لاسلكي باستخدام رابط RF 433 ميجا هرتز باستخدام Arduino

جرب أداة القضاء على المشاكل





في هذا المنشور ، سنقوم ببناء مقياس حرارة لاسلكي قائم على Arduino يمكنه مراقبة درجة حرارة الغرفة ودرجة الحرارة المحيطة الخارجية. يتم إرسال البيانات واستقبالها عبر وصلة RF 433 ميغاهيرتز.

باستخدام وحدة RF 433MHz ومستشعر DHT11

يستخدم المشروع المقترح Arduino كعقل وقلب 433 ميجا هرتز وحدة الإرسال / الاستقبال .



ينقسم المشروع إلى دائرتين منفصلتين ، الأولى مع مستقبل 433 ميجا هرتز وشاشة LCD ومستشعر DHT11 والتي سيتم وضعها داخل الغرفة وأيضًا يقيس درجة حرارة الغرفة .

دائرة أخرى بها جهاز إرسال 433 ميجا هرتز ، مستشعر DHT11 لقياس درجة الحرارة المحيطة الخارجية. كل من الدائرة لديها اردوينو واحد لكل منهما.



ستعرض الدائرة الموضوعة داخل الغرفة قراءات درجة الحرارة الداخلية والخارجية على شاشة LCD.

الآن دعونا نلقي نظرة على وحدة الإرسال / الاستقبال 433 ميغاهرتز.

433 ميجا هرتز وحدة الإرسال / الاستقبال.

يتم عرض وحدات الإرسال والاستقبال أعلاه ، فهي قادرة على الاتصال البسيط (اتجاه واحد). يحتوي جهاز الاستقبال على 4 دبابيس Vcc و GND و DATA. هناك نوعان من دبابيس البيانات ، وهما متماثلان ويمكننا إخراج البيانات من أي من دبابيس.

جهاز الإرسال أبسط بكثير فهو يحتوي فقط على دبوس إدخال Vcc و GND و DATA. يتعين علينا توصيل هوائي بكلتا الوحدتين الموصوفين في نهاية المقالة ، بدون اتصال هوائي بينهما لن يتم إنشاءه بأكثر من بضع بوصات.

الآن دعونا نرى كيف تتواصل هذه الوحدات.

نفترض الآن أننا نطبق نبضة ساعة تبلغ 100 هرتز على دبوس إدخال بيانات جهاز الإرسال. سيتلقى جهاز الاستقبال نسخة طبق الأصل من الإشارة عند دبوس بيانات جهاز الاستقبال.

هذا بسيط ، أليس كذلك؟ نعم ... لكن هذه الوحدة تعمل على AM وهي عرضة للضوضاء. من ملاحظة المؤلف ، إذا ترك دبوس بيانات جهاز الإرسال بدون أي إشارة لأكثر من 250 مللي ثانية ، فإن دبوس خرج بيانات جهاز الاستقبال ينتج إشارات عشوائية.

لذلك ، فهي مناسبة فقط لعمليات نقل البيانات غير الحرجة. لكن هذا المشروع يعمل بشكل جيد مع هذه الوحدة.

الآن دعنا ننتقل إلى المخططات.

المتلقي:


اردوينو إلى اتصال شاشة LCD. مقياس الجهد 10 كيلو

الدائرة أعلاه هي وصلة اردوينو إلى شاشة LCD. يتم توفير مقياس جهد 10K لضبط تباين شاشة LCD.

ميزان حرارة لاسلكي باستخدام وصلة RF 433 ميجا هرتز واردوينو

ما سبق هو دائرة الاستقبال. يجب توصيل شاشة LCD بـ arduino.

يرجى تنزيل ملفات المكتبة التالية قبل تجميع الكود

رئيس الراديو: github.com/PaulStoffregen/RadioHead

مكتبة مستشعرات DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

برنامج المتلقي:

//--------Program Developed by R.Girish-----//
#include
#include
#include
#include
#define DHTxxPIN A0
LiquidCrystal lcd(12,11,5,4,3,2)
RH_ASK driver(2000, 7, 9, 10)
int ack = 0
dht DHT
void setup()
{
Serial.begin(9600)
lcd.begin(16,2)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print('NO DATA')
delay(1000)
break
}
if(ack == 0)
{
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print(DHT.temperature)
lcd.print(' C')
delay(2000)
}
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]
uint8_t buflen = sizeof(buf)
if (driver.recv(buf, &buflen))
{
int i
String str = ''
for(i = 0 i {
str += (char)buf[i]
}
lcd.setCursor(0,1)
lcd.print('OUTSIDE:')
lcd.print(str)
Serial.println(str)
delay(2000)
}
}
//--------Program Developed by R.Girish-----//

المرسل:

الارسال ميزان الحرارة اللاسلكي

ما ورد أعلاه هو التخطيطي لجهاز الإرسال ، وهو بسيط إلى حد ما مثل جهاز الاستقبال. نحن هنا نستخدم لوحة اردوينو أخرى. سوف يستشعر مستشعر DHT11 درجة الحرارة المحيطة الخارجية ويرسل مرة أخرى إلى وحدة الاستقبال.

يجب ألا تزيد المسافة بين المرسل والمستقبل عن 10 أمتار. إذا كانت هناك أي عوائق بينهما ، فقد يقل نطاق الإرسال.

برنامج المرسل:

//------Program Developed by R.Girish----//
#include
#include
#define DHTxxPIN A0
#include
int ack = 0
RH_ASK driver(2000, 9, 2, 10)
dht DHT
void setup()
{
Serial.begin(9600)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
const char *temp = 'NO DATA'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
break
}
if(ack == 0)
{
if(DHT.temperature == 15)
{
const char *temp = '15.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 16)
{
const char *temp = '16.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 17)
{
const char *temp = '17.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 18)
{
const char *temp = '18.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 19)
{
const char *temp = '19.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 20)
{
const char *temp = '20.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 21)
{
const char *temp = '21.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 22)
{
const char *temp = '22.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 23)
{
const char *temp = '23.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 24)
{
const char *temp = '24.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 25)
{
const char *temp = '25.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 26)
{
const char *temp = '26.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 27)
{
const char *temp = '27.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 28)
{
const char *temp = '28.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 29)
{
const char *temp = '29.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 30)
{
const char *temp = '30.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 31)
{
const char *temp = '31.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 32)
{
const char *temp = '32.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 33)
{
const char *temp = '33.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 34)
{
const char *temp = '34.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 35)
{
const char *temp = '35.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 36)
{
const char *temp = '36.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 37)
{
const char *temp = '37.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 38)
{
const char *temp = '38.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 39)
{
const char *temp = '39.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 40)
{
const char *temp = '40.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 41)
{
const char *temp = '41.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 42)
{
const char *temp = '42.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 43)
{
const char *temp = '43.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 44)
{
const char *temp = '44.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
if(DHT.temperature == 45)
{
const char *temp = '45.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 46)
{
const char *temp = '46.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 47)
{
const char *temp = '47.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 48)
{
const char *temp = '48.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 49)
{
const char *temp = '49.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 50)
{
const char *temp = '50.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
}
}
//------Program Developed by R.Girish----//

بناء الهوائي:

إذا كنت تقوم ببناء مشاريع باستخدام هذا وحدات 433 ميجا هرتز ، اتبع التفاصيل الإنشائية التالية بدقة للحصول على نطاق جيد.

433 ميجا هرتز هوائي RF

استخدم سلكًا أحادي النواة يجب أن يكون قويًا بدرجة كافية لدعم هذا الهيكل. يمكنك أيضًا استخدام الأسلاك النحاسية المعزولة مع إزالة العزل في الأسفل لربط اللحام. قم بعمل اثنين من هؤلاء ، واحد لجهاز الإرسال والآخر لجهاز الاستقبال.

نموذج مقياس الحرارة اللاسلكي للمؤلف باستخدام Arduino و 433 MHz RF Link:

النموذج الأولي لميزان الحرارة اللاسلكي باستخدام وصلة RF 433 ميجا هرتز واردوينو


السابق: مجسات مقاومة التآكل لجهاز التحكم في مستوى الماء التالي: L293 Quad-Half-H Driver IC Pinout ، ورقة البيانات ، دائرة التطبيق