 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:333
|
|
18-02-2020, 11:13 AM
المشاركة 1
|
|
قياس الرطوبة Humidity ودرجة الحرارة Temperature باستخدام الاردوينو Arduinoوالحساس DHT
Twitter
FaceBook
Google+
قياس الرطوبة Humidity ودرجة الحرارة Temperature باستخدام الاردوينو Arduinoوالحساس DHT11
الرطوبة ودرجة الحرارة هى بارامترات شائعة لقياس الظروف البيئية. في هذا المشروع القائم على Arduino ، سنقوم بقياس درجة الحرارة والرطوبة المحيطة وعرضها على شاشة LCD مقاس 16 × 2. يتم استخدام مستشعر درجة الحرارة والرطوبة الشائع DHT11 مع Arduino uno لتطوير مقياس حرارة thermometer مئوى Celsius ومقياس رطوبة كنسبة مئوية .
يتكون هذا المشروع من ثلاثة أقسام – القسم الأول يستشعر الرطوبة ودرجة الحرارة باستخدام حساس الرطوبة ودرجة الحرارة DHT11. القسم الثاني يقرأ خرج وحدة الحساس DHT ويستخرج قيم درجة الحرارة والرطوبة إلى رقم مناسب من حيث النسبة المئوية والدرجة المئوية. والجزء الثالث من النظام يعرض الرطوبة ودرجة الحرارة على شاشة LCD .

يعتمد عمل هذا المشروع على الاتصال التسلسلى لسلك مفرد . فى البداية يرسل الاردوينو إشارة بدء إلى الوحدة DHT ثم يعطي DHT إشارة استجابة تحتوي على بيانات درجة الحرارة والرطوبة. يقوم الاردوينو بالتجميع والاستخراج في شكل جزأين ، الأول هو الرطوبة والثاني هو درجة الحرارة ومن ثم إرسالها إلى شاشة LCD 16X2 .
في هذا المشروع ، استخدمنا وحدة module استشعار تسمى DHT11. تتميز هذه الوحدة بتركيبة للرطوبة والحرارة مع خرج إشارة رقمية معايرة ، يعني أن وحدة الاستشعار DHT11 هي وحدة مشتركة لاستشعار الرطوبة ودرجة الحرارة والتي تعطي إشارة خرج رقمية معايرة. المستشعر DHT11 يعطينا قيمة دقيقة للغاية للرطوبة ودرجة الحرارة ويضمن موثوقية عالية والاستقرار على المدى الطويل. يحتوي هذا المستشعر على مكون لقياس الرطوبة من نوع المقاومة ومكون لقياس درجة الحرارة من النوع NTC مع متحكم 8 بت مدمج له استجابة سريعة وفعال من حيث التكلفة ومتوفر في حزمة بأربعة أطراف فى صف واحد .
الوحدة DHT11 تعمل على الاتصال التسلسلى ، أي الاتصال بسلك واحد. ترسل هذه الوحدة البيانات في شكل قطار نبضات بفترة زمنية محددة. قبل إرسال البيانات إلى الاردوينو ، فإنها تحتاج إلى أمر تهيئة مع تأخير زمني .

شيء مهم هو التأكد من قيمة مقاومة السحب لأعلى لأننا إذا وضعنا مستشعر DHT على مسافة أقل من 20 متر ، فمن المستحسن أن تكون قيمة مقاومة السحب لأعلى هى 5k . إذا وضع DHT على مسافة أطول من 20 متر عندئذ استخدم القيمة المناسبة لمقاومة السحب لأعلى .
الدائرة الكهربية :

يتم استخدام شاشة LCD لعرض درجة الحرارة والرطوبة والتي ترتبط مباشرة مع اردوينو في وضع 4 بت. يتم توصيل أطراف الشاشة المسماة RS, EN, D4, D5, D6 , D7 لأطراف الاردوينو الرقمية رقم 2, 3, 4, 5, 6 , 7 . ويتم توصيل وحدة الاستشعار DHT11 بالطرف الرقمي 12 من الاردوينو ومع مقاومة السحب لأعلى 5k .
وصف البرمجة :
1- في البرمجة ، سوف نستخدم مكتبات مسبقة الصنع للمستشعر DHT11 ووحدة العرض LCD.
كود:
#include<dht.h> // Including library for dht
#include<LiquidCrystal.h>
2- ثم نقوم بتعريف أطراف الشاشة LCD وتعريف طرف المستشعر DHT ، وإنشاء كائن من الفئة dht ، وإعلان حرف درجة الحرارة :
كود:
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#define dht_dpin 12
dht DHT;
byte degree[8] =
{
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
3- ويتم تهيئة كل الأشياء فى دالة الإعداد setup .
كود:
void setup()
{
lcd.begin(16, 2);
lcd.createChar(1, degree);
lcd.clear();
lcd.print(" Humidity ");
lcd.setCursor(0,1);
lcd.print(" Measurement ");
delay(2000);
lcd.clear();
}
4- بعد ذلك في الدالة loop وباستخدام الدالة dht ، يقرأ المستشعر DHT بالدالة DHT.read11، ثم باستخدام بعض دوال dht (DHT.humidity , DHT.temperature ) ، نستخلص الرطوبة ودرجة الحرارة ونعرضها على شاشة LCD.
كود:
void loop()
{
DHT.read11(dht_dpin);
lcd.setCursor(0,0);
lcd.print("Humidity: ");
lcd.print((int)DHT.humidity); // printing Humidity on LCD
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Temperature:");
lcd.print((int)DHT.temperature); // Printing temperature on LCD
lcd.write(1); // lcd.print((char)223);
lcd.print("C");
delay(500);
}
البرنامج :
كود:
#include<dht.h> // Including library for dht
#include<LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#define dht_dpin 12
dht DHT;
byte degree[8] =
{
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup()
{
lcd.begin(16, 2);
lcd.createChar(1, degree);
lcd.clear();
lcd.print(" Humidity ");
lcd.setCursor(0,1);
lcd.print(" Measurement ");
delay(2000);
lcd.clear();
}
void loop()
{
DHT.read11(dht_dpin);
lcd.setCursor(0,0);
lcd.print("Humidity: ");
lcd.print((int)DHT.humidity); // printing Humidity on LCD , DHT.humidity returns humidity in percent
lcd.print(" %");
lcd.setCursor(0,1);
lcd.print("Temperature:");
lcd.print((int)DHT.temperature); // Printing temperature on LCD,DHT.temperature returns the temperature in Celsius
lcd.write(1);
lcd.print("C");
delay(500);
}
مثال مع العرض على المنفذ التسلسلى :

كود:
#include "dht.h"
#define dht_dpin 12 // sensor Pin
dht DHT;
void setup(){
Serial.begin(9600);
delay(500);//Delay to let system boot
Serial.println("DHT11 Humidity & temperature Sensor\n\n");
delay(1000);//Wait before accessing Sensor
}//end "setup()"
void loop(){
//Start of Program
DHT.read11(dht_dpin);
Serial.print("Current humidity = ");
Serial.print(DHT.humidity); // DHT.humidity returns humidity in percent
Serial.print("% ");
Serial.print("temperature = ");
Serial.print(DHT.temperature); // DHT.temperature returns the temperature in Celsius
Serial.println("C ");
delay(5000);//Wait 5 seconds before accessing sensor again.
//Fastest should be once every two seconds.
}// end loop()
|