به نام خدا
پروژه ی ساخت دماسنج بی سیم با استفاده از رابط رادیویی ۴۳۳ مگا هرتزی و آردوینو
در این پروژه قصد داریم تا یک دما سنج بی سیم با استفاده از آردوینو بسازیم که هم دمای درون اطاق و هم دمای بیرون از اطاق را اندازه گیری کند. سپس داده های گفته شده در کانالی ۴۳۳ مگا هرتزی ارسال و دریافت می شود.
استفاده از ماژول ۴۳۳ مگا هرتزی RF و سنسور DHT11
این پروژه به دوبخش تقسیم شده است. یکی مداری با دریافت کننده ی ۴۳۳ مگا هرتزی ، ال سی دی جهت نمایش و یکی از سنسور های DTH11 که درون اطاق جهت اندازه گیری دمای اطاق می باشد. قسمت بعدی این مدار یک فرستنده ی ۴۳۳ مگا هرتزی و یک سنسور دیگر DHT11 دارد که در خارج از اطاق قرار می گیرد تا دمای بیرونی را محاسبه کند.
در تصویر بالا ماژول های گیرنده و گیرنده نمایشه داده شده است. گیرنده ۴ پین دارد که به ترتیب Vcc و GNDو پین های داده می باشد. فرستنده ساده تر است و سه پین Vcc و GND و داده را دارد. برای ارتباط بین این دو ماژول باید از یک آنتن استفاده شود که در انتهای بحث به ساخت آن اشاره شده است.
شماتیک مدار گیرنده:
در تصویر بالا شماتیک اتصالات مدار آردوینو و ال سی دی را مشاهده می کنید. از پتانسیومتر ۱۰ کیلویی برای تنظیم کنتراست ال سی دی استفاده شده است.
برای کامپایل کردن داده ها باید کتابخانه های زیر را دانلود کنید.
Radio Head :
دانلود فایل
DHT sensor library :
دانلود فایلدانلود کد برنامه برای گیرنده :
دانلود فایل#include <LiquidCrystal.h> #include <RH_ASK.h> #include <SPI.h> #include <dht.h> #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 < buflen; i++) { str += (char)buf[i]; } lcd.setCursor(0,1); lcd.print("OUTSIDE:"); lcd.print(str); Serial.println(str); delay(2000); } }
فرستنده:
تصویر بالا شماتیک اتصالات فرستنده است که نسبت به گیرنده ساده تر است. در این قسمت از یک آردوینو دیگر استفاده شده است و سنسور DTH11 وظیفه ی اندازه گیری دمای خارج را دارد.
برنامه برای گیرنده:
دانلود فایل#include <RH_ASK.h> #include <dht.h> #define DHTxxPIN A0 #include <SPI.h> 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); } }
ساختمان آنتن:
همانند شکل با استفاده از یک سیم باید ساختار بالا بسازیم تا از آن به عنوان آنتن استفاده شود.
دیدگاهها (0)