شاید بارها با خودتان فکر کرده باشید که چطور میتوان دمای یک محیط را اندازهگیری کرد یا چگونه میتوان کنترل محیط را انجام داد و یا به زبانسادهتر چطور میتوان یک دماسنج درست کرد؟
در این مقاله میخواهیم ابتدا به معرفی یکی از سنسورهای معروف برای ساخت دما و رطوبت و نمایشگر OLED بپردازیم و در نهایت پروژه نمایش دما و رطوبت را روی نمایشگر OLED انجام دهیم.
سنسور دما و رطوبت DHT11 و DHT22
سنسورهای DHT از دو بخش دما و رطوبت تشکل شده اند، در واقع هر سنسور خود دارای دو سنسور مجزا می باشد که استفاده از آنها را مقرون به صرفه کرده است. سنسور رطوبت مورد استفاده در این خانواده از نوع خارنی میباشد و سنسور دمای آن از نوع مقاومتی است که خروجی این دو سنسور توسط یک مبدل آنالوگ به دیجیتال، به سیگنال دیجیتال تبدیل میشود.
همانطور که گفته شد خروجی این سنسور دیجیتال میباشد که شما را قادر می سازد بدون داشتن دغدغه کالیبراسیون و نویزهای محیطی از آن در انواع میکروکنترلرها استفاده کنید.
سنسورهای DHT در دو مدل DHT11 و DHT22 موجود است، که می توانید تفاوت آنها را در زیر مشاهده کنید. البته قابل ذکر است که این تفاوتها در آرایش پایهها نیست و فقط تفاوت تکنیکالی است که بسته به نیاز میتوان سنسور مورد نظر را با هم خانواده خود عوض کنید.
DHT11
DHT22
همانطور که مشاهده میکنید سنسور DHT22 هم دقیقتر و هم سریعتر میباشد، با توجه به تعداد پایه یکسان و همانندی که این دو سنسور با هم دارند، به راحتی و بدون هیچ نگرانی در صورت نیاز میتوان سنسورها را جایگزین هم کرد.
برای اطلاعات بیشتر در این زمینه توصیه میکنیم مقاله سنسور دما و رطوبت DHT را مطالعه کنید.
خب پس از اینکه یک آشنایی ابتدایی با سنسور پیدا کردیم نوبت به راهاندازی آن میرسد. برای راهاندازی به شماتیکی که در ادامه قرار میدهیم دقت کنید و اتصالات را طبق شماتیک پیادهسازی کنید.
OLED چیست؟
نمایشگرهای OLED نوع پیشرفتهتر و بهتری از نمایشگرهای LED است. در واقع نمایشگرهایی با کانتراست و رزولوشن بالا هستند، از این رو قابلیت خوانایی زیادی را برای کاربر فراهم میکنند. این نوع ماژولها فاقد Backlight هستند و نور پسزمینه را خودشان ایجاد میکنند، از این رو نسبت به LCD ها باریکتر، شفافتر و شکیلتر هستند.
برای اطلاع بیشتر از نحوه راهاندازی آن توصیه میکنیم مقاله راه اندازی OLED با آردوینو را مطالعه کنید.
شماتیک دما و رطوبت سنج سنسور DHT11
کدنویسی دما و رطوبتسنج سنسور DHT11
خب پس از اینکه موفق به اتصال قطعات به یکدیگر شدیم حال نوبت به نوشتن کد سختافزار موردنظر است که در ادامه به توضیح کد میپردازیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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); } |
تابع نمایش متن Sisoog
1 2 3 4 5 6 7 8 9 10 | 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); } |
امیدوارم که این آموزش هم برای شما مخاطبین سیسوگی مفید واقع شده باشد.