شاید بارها با خودتان فکرکردهباشید که چطور میتوان دمای یک محیط را اندازهگیری کرد یا چگونه میتوان کنترل محیط را انجام داد و یا به زبانسادهتر چطور میتوان یک دماسنج درست کرد؟ در این مقاله میخواهیم ابتدا به معرفی یکیاز سنسورهای معروف برای ساخت دما و رطوبت و نمایشگر OLED بپردازیم و درنهایت پروژه نمایش دما و رطوبت را روی نمایشگر OLED انجام دهیم.
سنسور دما و رطوبت DHT11 و DHT22
سنسورهای DHT از دو بخش دما و رطوبت تشکیل شدهاند، درواقع هر سنسور خود دارای دو سنسور مجزا می باشد که استفادهاز آنها را مقرونبهصرفه کردهاست. سنسور رطوبت مورداستفاده در این خانواده از نوع خازنی میباشد و سنسور دمای آن از نوع مقاومتی است که خروجی این دو سنسور توسط یک مبدل آنالوگ به دیجیتال، به سیگنال دیجیتال تبدیل میشود. همانطورکه گفتهشد خروجی این سنسور دیجیتال میباشد که شما را قادر میسازد بدون داشتن دغدغه کالیبراسیون و نویزهای محیطی از آن در انواع میکروکنترلرها استفادهکنید. سنسورهای DHT در دو مدل DHT11 و DHT22 موجود است، که میتوانید تفاوت آنها را در زیر مشاهدهکنید. البته قابلذکر است که این تفاوتها در آرایش پایهها نیست و فقط تفاوت تکنیکالی است که بسته به نیاز میتوان سنسور مورد نظر را با هم خانواده خود عوض کنید.
DHT11:
- بسیار ارزان قیمت
- ولتاژ کاری ۳ تا ۵ ولت
- حداکثر جریان مصرفی ۲.۵میلیآمپر(در حین نمونه برداری)
- قابلیت اندازهگیری رطوبت از ۲۰تا ۸۰درصد با دقت ۵درصد
- قابلیت اندازهگیری دما از ۰ تا ۵۰درجه سانتیگراد با خطای ۲درجه
- ریت تبدیل ۱ نمونه در یک ثانیه (1Hz)
- ابعاد ۱۵.۵ در ۱۲در ۵.۵میلی متر
- تعداد پایهها ۴عدد با فاصله ۱۰۰میل
DHT22:
- ارزان قیمت
- ولتاژ کاری ۳ تا ۵ ولت
- حداکثر جریان مصرفی ۲.۵میلیآمپر(درحین نمونهبرداری)
- قابلیت اندازهگیری رطوبت از ۰ تا ۱۰۰درصد با دقت ۲~۵ درصد
- قابلیت اندازهگیری دما از -۴۰ تا ۱۲۵درجه سانتیگراد با خطای ۰.۵ درجه
- ریت تبدیل ۲ نمونه در یک ثانیه (۲Hz)
- ابعاد ۱۵.۵در ۲۵ در ۷.۷ میلی متر
- تعداد پایهها ۴ عدد با فاصله ۱۰۰میل
همانطورکه مشاهده میکنید سنسور DHT22 هم دقیقتر و هم سریعتر میباشد، باتوجهبه تعداد پایه یکسان و همانندی که این دو سنسور باهم دارند، بهراحتی و بدون هیچ نگرانی درصورت نیاز میتوان سنسورها را جایگزین هم کرد. برای اطلاعات بیشتر در این زمینه توصیه میکنیم مقاله سنسور دما و رطوبت DHT را مطالعه کنید. خب پساز اینکه یک آشنایی ابتدایی با سنسور پیدا کردیم نوبت به راهاندازی آن میرسد. برای راهاندازی به شماتیکی که در ادامه قرار میدهیم دقتکنید و اتصالات را طبق شماتیک پیادهسازی کنید.
OLED چیست؟
نمایشگرهای OLED نوع پیشرفتهتر و بهتری از نمایشگرهای LED است. درواقع نمایشگرهایی با کانتراست و رزولوشن بالا هستند، از این رو قابلیت خوانایی زیادی را برای کاربر فراهم میکنند. این نوع ماژولها فاقد Backlight هستند و نور پسزمینه را خودشان ایجاد میکنند، از اینرو نسبت به LCD ها باریکتر، شفافتر و شکیلتر هستند. برای اطلاع بیشتر از نحوه راهاندازی آن توصیه میکنیم مقاله راهاندازی OLED با آردوینو را مطالعهکنید.
شماتیک دما و رطوبتسنج سنسور DHT11
کدنویسی دما و رطوبتسنج سنسور DHT11
خب پساز اینکه موفق به اتصال قطعات به یکدیگر شدیم حال نوبت به نوشتن کد سختافزار موردنظر است که در ادامه به توضیح کد میپردازیم:
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define NUMFLAKES 10 // Number of snowflakes in the animation example #define LOGO_HEIGHT 16 #define LOGO_WIDTH 16 #define DHTPIN 7 #define DHTTYPE DHT11 #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); DHT dht(DHTPIN, DHTTYPE); float Humidity; //Stores humidity value float Temprature; //Stores temperature value void testtext(void); void DHT11_Display(signed int Humidity,signed int Temprature); void setup() { Serial.begin(9600); dht.begin(); // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32 Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } display.display(); delay(2000); // Pause for 2 seconds // Clear the buffer display.clearDisplay(); //display.drawPixel(10, 10, WHITE); display.display(); delay(2000); testtext(); }// end of main void loop() { Humidity = dht.readHumidity(); Temprature= dht.readTemperature(); DHT11_Display((signed int)Humidity,(signed int)Temprature); برای حذف مقدار اعشاری از نوع signed استفاده کردهایم }// end of loop void testtext(void) { display.clearDisplay(); display.setTextSize(2); // Draw 2X-scale text display.setTextColor(WHITE); display.setCursor(6, 0); display.println(F("Sisoog.com")); display.display(); // Show initial text delay(2000); } void DHT11_Display(signed int Humidity,signed int Temprature) { display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.print(F("Humid:")); display.print(Humidity); display.print(" %"); display.print(F("\nTemp:")); display.print(Temprature); display.print(" C"); display.display(); // Show initial text delay(2000); }
خب اگر به کد بالا دقتکنید از دو بخش راهاندازی سنسور DHT11 و بخش راهاندازی OLED تشکیلشدهاست که برای فهم بیشتر کد هر بخش بهصورت یه تابع نوشتهشدهاست و در این پروژه علاوهبر ساخت پروژه درس بزرگتری به ما میدهد که آن “نحوه تلفیق یک سنسور با یک نمایشگر است” بهعبارتکلی میتوان گفت از این به بعد میتوانیم تقریبا هر سنسوری را روی نمایشگر نشاندهیم. خب به بررسی توابع بپردازیم.
تابع نمایش دما و رطوبت روی نمایشگر OLED
void DHT11_Display(signed int Humidity,signed int Temprature) { display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.print(F("Humid:")); display.print(Humidity); display.print(" %"); display.print(F("\nTemp:")); display.print(Temprature); display.print(" C"); display.display(); // Show initial text delay(2000); }
خب همانطوریکه از کد مشخصشده این تابعی که نوشتیم از دستوراتی است که از کتابخانه اضافه شدهاند و فقط کاری که ما در این بخش انجام دادهایم ترکیب این دستورات با یکدیگر است که اگر مقداری به کد دقتکنید متوجه این دستورات و نحوه ترکیب آنها خواهید شد.
امیدوارم که این آموزش هم برای شما مخاطبین مفید واقع شده باشد.
منبع: سیسوگ