حساس الحرارة والرطوبة DHT
حساس الحرارة والرطوبة DHT:
يمكن استخدام الحساس في الكثير من التطبيقات التي تتطلب معرفة درجة الحرارة والرطوبة مثل التحكم بأجهزة التكيف وغيرها. هناك نوعان للحساس DHT11 و DHT22 يلخص الجدول التالي أهم خصائص النوعين :
DHT11 | DHT22 |
---|---|
جهد التشغيل 3-5 فولت | جهد التشغيل 3-5 فولت |
نطاق الحرارة 0-50 درجة مئوية مع نسبة خطأ ± 2 درجة مئوية | نطاق الحرارة 0-50 درجة مئوية مع نسبة خطأ ± 0.5 درجة مئوية |
نطاق الرطوبة 20-80 درجة مع نسبة خطأ ± 5 درجة | نطاق الرطوبة 0-100 درجة مع نسبة خطأ ± 2.5 درجة |
يمكن الملاحظة أن الحساس DHT22 يمتمتع بنطاق أكبر و دقة أعلى لذلك سيتم استخدامه في هذا الدرس

تثبيت المكتبة الخاصة بالحساس DHT
لتسهيل عملية القراءة من الحساس نقوم بتنصيب مكتبة “DHT sensor library ” يمكن تنزيل المكتبة بطريقين :
1- قائمة إدارة المكتبات.
2- تحميل المكتبة من موقع “Github”

التوصيل
يحتوي DHT22 module على ثلاث منافذ حيث يتم استخدام منفذين لنغذية الحساس بالطاقة Vcc و GND. الأنفذ الأوسط يستخدم لنقل البيانات للأردوينو وفي هذا الدرس قمنا بتوصيله بالمنفذ رقم 2 للأردوينو.

التمرين 1 : عرض درجة الحرارة والرطوبة على السيريال مونيتور
يمكنك ملاحظة أننا نحتاج لتعريف المنفذ الموصل بالحساس ونوع الحساس في بداية البرنامج. بعد ذلك يتم انشاء كائن dht وتمرير رقم المنفذ ونوع الحساس. يتم قراءة قيمة درجة الحرارة وحفظها في المتغير t كما يتم قراءة قيمة الرطوبة وحفظها في المتغير . لاحظ أن المتغيرين t و h من النوع float حيث ان درجة الحرارة والرطوبة غالبا لا تكون رقم صحيح بل تحتوي على فواصل عشرية. أخيرا نقوم بعرض هذه القيم على السيريال مونيتور.
#include "DHT.h"
#define DHTPIN 2 // define used pin
#define DHTTYPE DHT22 // define the type of DHT sensor
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin(); }
void loop() {
float t = dht.readTemperature(); // assign Temperature value to t
float h = dht.readHumidity(); // assign Humidity value to h
Serial.print("Temp: ");
Serial.print(t);
Serial.print(" C");
Serial.print("Humid: ");
Serial.print(h);
Serial.println(" %");
delay(2000);
}
التمرين 2 : عرض درجة الحرارة والرطوبة على شاشة lcd
هذا التمرين شبيه بالتمرين السابق إلا ان القراءات يتم عرضها على شاشة LCD بدلا من السيريال مونيتور. أولا نحتاج لتضمين المكتبة Wire.h المخصصة لتقنية التواصل I2C و المكتبة LiquidCrystal_I2C.h المخصصة للشاشة LCD with I2C.
تاتي مكتبة Wire مدمجة لكن تحتاج لتنزيل مكتبة LiquidCrystal_I2C . يمكن تحميل المكتبة من قائمة ادارة المكتبات أو عن طريق موقع اردوينو
لاحظ انشاء الكائن lcd وتمرير طول وعرض الشاشة (2*16). يتم استخدام الأمر ()lcd.setCursor لتحديد وضع المؤشر (نقطة بداية النص المراد طباعته).

#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#include "DHT.h"
#define DHTPIN 2 // define used pin
#define DHTTYPE DHT22 // define the type of DHT sensor
DHT dht(DHTPIN, DHTTYPE); // declaration of dht object
LiquidCrystal_I2C lcd(0x27,16,2); // declaration of lcd object
void setup() {
dht.begin();
lcd.init();
lcd.backlight();}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
lcd.clear(); // clear the lcd
lcd.setCursor(0,0); // set printing start point
lcd.print("Humid: ");
lcd.setCursor(7,0);
lcd.print(h);
lcd.setCursor(0,1);
lcd.print("Temp: ");
lcd.setCursor(7,1);
lcd.print(t);
delay(2000);}