وصف المشروع
تستخدم هذه الدائرة في قياس درجة الحرارة والرطوبة في الغرفة وعرضها على شاشة LCD وتحديثها كل فترة.
الهدف من المشروع
تعلم استخدام حساس الحرارة والرطوبة لقراءة وإرسال البيانات إلى الأردوينو.
المكونات
العدد |
النوع |
|
1 | لوحة أردوينو أونو |
Arduino Uno board |
1 | شاشة 2 × 16 | LCD 2×16 |
1 | حساس الرطوبة والحرارة | Humidity & Temperature sensor |
2 | مقاومة 1 كيلو أوم | Resistor 1 k ohm |
1 | لوحة اختبار | Bread board |
مجموعة | أسلاك توصيل | connecting wires |
توصيل الدائرة
شرح المكونات
-
لوحة Arduino Uno
نستخدمها في التحكم فى الدائرة، استقبال وإرسال الإشارات بتوقيت معين وكيفية معينة نختارها طبقاً لعمل الدائرة وبواسطة الكود الذى سيتم شرحه لاحقاً.
يرجى تثبيت البرنامج الخاص بالأردوينو من هنا والذي سنستخدمه في كتابة الكود وعمل compiling ورفعه إلى لوحة الأردوينو عن طريق كابل USB، ولمعرفة كيفية تثبيت البيئة التطويرية المتكاملة لأردوينو (Arduino IDE) من هنا.
لتحميل ورقة البيانات datasheet الخاصة بلوحة الأردوينو أونو Arduino Uno اضغط هنا، ولتحميل نسخة أخرى اضغط هنا، ويوجد هنا في موقع الصناع العرب مواضيع مفصله عن الأردوينو وكيفية تنصيب البرنامج، وللمزيد يمكنك زيارة الموقع الخاص به من هنا.
-
شاشة LCD 2×16
رمزها : HD44780
هي شاشة LCD صغيرة بها مساحة لعرض صفين كل صف به مساحة لعرض 16 حرف/ رقم لهذا تسمى 2×16 .
أطراف التوصيل وعددها 16:
1) GND وهذا الطرف يوصل بالأرضي لمصدر التغذية (Ground)
2) Vcc لتشغيل الشاشة وهذا الطرف يوصل بالطرف الموجب لمصدر التغذية (5 volt)
3) Vee الخاص بمستوى إضاءة الشاشة Contrast ويوصل بمقاومة 1 كيلو أوم (Resistor 1 k ohm) ثم إلى الطرف الأرضي GND ويمكنك توصيل مقاومة متغيرة للتحكم بدرجة إضاءة الشاشة حسب رغبتك (طرفها الأول بالجهد الموجب والأخير بالأرضي والأوسط يوصل ب Vee)
4) RS وهو اختصار Reset ويوصل هذا الطرف بالأردوينو (طرف رقم D2)
5) R/W وهو اختصار Read/ write ويوصل هذا الطرف بالأرضي دائماً (GND) لأننا سنستعمل خاصية الكتابة فقط وليست القراءة.
6) EN وهو اختصار Enable ويوصل هذا الطرف بالأردوينو (طرف رقم D3)
7-14) DB0:DB7 نستخدم هنا فقط الأربعة أطراف الأخيرة 4 – 5 – 6 – 7 لإرسال البيانات من الأردوينو إلي الشاشة وتوصل بالأردوينو بالترتيب: (D4 وحتى D7)
15) Led+ يستخدم للإضاءة الخلفية للشاشة ويوصل بمقاومة 1 كيلو أوم ثم إلى الجهد الموجب (5 volt) لتقليل شدة إضاءة الشاشة الخلفية.
16) Led- يستخدم للإضاءة الخلفية للشاشة ويوصل بالأرضي (GND)
قم بتوصيل الأطراف كما بالرسم الموضح فى البداية.
لتحميل ورقة البيانات datasheet الخاصة بالشاشة LCD 2×16 اضغط هنا ولتحميل نسخة أخرى اضغط هنا.
-
حساس الحرارة والرطوبة DHT11 humidity and temperature sensor
مدى درجة الحرارة التي يستطيع الحساس قراءتها ما بين 0:50 درجة مئوية، والرطوبة ما بين 20:90 %، وخرج الحساس يكون إشارة رقمية (digital signal) على طرف رقم 2.
أطراف الحساس:
- مدخل التغذية للحساس.
- خرج الحساس.
- نقطة غير متصلة.
- توصل بالأرضي.
وقد يكون الحساس بهذا الشكل (مثبت على شريحة إلكترونية ولها خرج 3 أطراف):
كيف يعمل الحساس؟
أولاً: يرسل الأردوينو إشارة إلى الحساس للبدء (وضع التشغيل)، فيعمل الحساس ويبدأ في قياس درجة الحرارة ونسبة الرطوبة في المكان، ثم يأتي دور الإرسال إلي الأردوينو وتكون على شكل إشارة مكونة من 40 بت (Bit) مجموعة من (صفر) و (واحد) فيبدأ الأردوينو في قراءة قيم الإشارة ومعالجتها.
للمزيد من المعلومات راجع ورقة البيانات الخاصة بالحساس.
لتحميل ورقة البيانات (datasheet) الخاصة بحساس الرطوبة والحرارة DHT11 اضغط هنا.
-
لوحة اختبار الدوائر Bread board
هذه اللوحة مفيدة جداً في التجارب، يمكنك توصيل عناصر دائرتك عليه للتأكد من عملها بالشكل السليم وعمل التعديلات عليها قبل صناعتها على لوحة نحاسية مطبوعة، أو لمجرد التجربة فقط وذلك لسهولة التوصيلات كما سنرى.
تحتوي معظم اللوحات هذه على صفين على الجوانب أحدهما أحمر والآخر أزرق كما بالصورة بالأسفل (A و D)، وكل النقاط فى طول هذا الصف متصلة ببعض.
باقي النقاط فى المنتصف يمين ويسار الفراغ المنتصف (B و C) مقسمة طولياً وليس أفقياً كما بالأحمر والأزرق، والصورة التالية توضح لك النقاط المتصلة ببعضها:
ويتم تركيب العناصر بإدخال الأطراف المعدنية في الفراغات، والعناصر المراد توصيلها معاً يتم إدخال الأطراف في نفس العمود (حيث كل 4 نقاط رأسية متصلة ببعض).
ملحوظة: الصفين الموجب يمين ويسار اللوحة غير متصلين ببعض، والصفين الأرضي أيضاً لذا عليك توصيلهم بهذا الشكل:
وهذه الصورة توضح كيفية تغذية اللوحة بمصدر الجهد والأرضي من الأردوينو:
يمكنك تتبع الصورة في بداية الشرح لإتمام توصيل العناصر ببعضها، وللمزيد عن كيفية استخدام لوح التجارب (Breadboard) اضغط هنا
-
مجموعة أسلاك التوصيل Connecting wires
ينصح بالحصول على مجموعة أسلاك للتوصيل مثل التي بالصورة وتستخدم في توصيل العناصر ببعضها أو التوصيل بأجزاء خارجية مثل لوحة الأردوينو والحساسات وغيرها.
وللمزيد عن استخدام الأسلاك (wires) اضغط هنا
الكود البرمجي وتجربة وتشغيل الدائرة:
#include // تضمين مكتبة الأكواد الخاصة بالشاشة
#include "DHT.h" // تضمين مكتبة الحساس
#define DHTTYPE DHT11 //تعرف نوع الحساس
#define DHTPIN 12 //تعريف رقم طرف توصيل الحساس
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //LCD connection pins
DHT dht(DHTPIN, DHTTYPE);
void setup() //دالة الإعداد وتنفذ مرة واحدة فقط فى بداية البرنامج
{ //كل الأوامر التالية بين القوسين ضمن هذه الدالة
lcd.begin(16, 2); //أمر لبدء تشغيل الشاشة
dht.begin(); //أمر لبدء تشغيل الحساس
lcd.clear(); //أمر مسح الشاشة
lcd.print("Temp & Humidity"); //أمر طباعة رسالة تعريفية للدائرة
lcd.setCursor(0, 1);
lcd.print(" Measurement ");
delay(2000); //أمر إنتظار ثانيتين
lcd.clear();
lcd.print(" ARABS MAKERS ");
delay(2000);
lcd.clear();
lcd.print("Temp: Humidity:");
}
void loop() //دالة التكرار وتنفذ باستمرار طالما يوجد تغذية كهرباء للأردوينو
{
delay(500);
lcd.setCursor(0, 1); //وضع المؤشر فى اول عمود والصف الثانى
float h = dht.readHumidity(); // قراءة نسبة الرطوبة
float f = dht.readTemperature(true); //قراءة قيمة درجة الحرارة بالفهرنهايت من الحساس
float c = (f - 32) / 1.8; //تحويل من فهرنهايت إلى سيليزيوس
if (isnan(h) || isnan(f))
{
lcd.print("ERROR");
return;
}
lcd.print(c); // طباعة درجة الحرارة
lcd.setCursor(7, 1);
lcd.print(h); // طباعة الرطوبة
}
بعد فهمك للكود السابق، نفتح برنامج الأردوينو وتأكد من الاتصال بالانترنت لأنه يجب تحميل مكتبة الأكواد الخاصة بالحساس DHT library كالتالى: من شريط القوائم اختر المسار التالى: Sketch ثم Include library ثم Manage libraries
فى خانة البحث اكتب dht، سوف يظهر لك فى النتائج مكتبتين قم بالضغط عليهما ثم اختر Install كما هو موضح بالصورة التالية:
قم بإنشاء ملف مشروع جديد بالاسم الذي تريده واكتب الكود السابق فيه واحفظه عندك على جهازك، قم بتوصيل لوحة الأردوينو بالكمبيوتر لديك وارفع الكود إلى لوحة الأردوينو (upload).
ملحوظات هامة:
- قد يظهر لك مشكلة أثناء عمل (compiling) من فضلك اقرأ جيداً وصف المشكلة في شريط المعلومات أسفل شاشة برنامج الأردوينو وحاول البحث عن المشكلة وحلها.
- قد تصادفك مشكلة تتعلق بعدم قدرة الأردوينو على العثور على أكواد تتعلق بـ (Adafruit_sensor)، إذن سوف ندخل مرة أخرى إلى Sketch ثم Include library ثم Manage libraries ، ثم ابحث عن (Adafruit_sensor.h) وقم بتحميل المكتبة الخاصة بها كما بالشكل التالى وستحل المشكلة.
دائماً لن تجد المعلومة كاملة وسهلة، أحياناً ستجد نقص في المعلومة أو قد تواجه خطأ لديك لم يواجهه الآخرون قد يكون أنت أول شخص يصادفه هذا النوع من الأخطاء، لذا عليك المحاولة والتجربة ومع كثرة التجارب ستكتسب الخبرة، والبحث على الإنترنت قد يساعدك أو يعطيك الخيط الذي تبدأ به أو يعطيك مثالاً لمشكلتك، لذا تعلم الطريقة في التعامل مع المشاكل ولا تحفظ طرق الحل وأتمنى لك التوفيق.
للأسف أثناء كتابة هذا الشرح لم يكن موقع المحاكاة circuits.io يحتوى على حساس الحرارة والرطوبة لذا لم أتمكن من تقديم محاكاة لهذة الدائرة، لكن إذا قمت بعمل التوصيلات كما بالرسم بالأعلى وكتابة الكود سوف تعمل الدائرة معك.
يمكنكم تحميل رسم وتصميم الدائرة ببرنامج Fritzing من هنا وملف كود الأردوينو من هنا.
ولتحميل برنامج Fritzing المجاني من خلال الموقع الخاص به اضغط هنا.
ولتحميل مكتبة أكواد DHT-sensor-library-master اضغط هنا.
مكتبة أكواد Adafruit_Sensor-master اضغط هنا.
ويمكنك أيضا البحث فى موقع Fritzing وموقع المحاكاة circuits.io عن تصميمات ورسومات لدوائر مختلفة واسعة المجال وتطبيقات متنوعة ورائعة (جربها الآن).
أتمنى أن يكون الدرس مفيداً لكم.
شرح رائع و موضوع متميز , شكرا لكم من القلب
شكراً لك
تحياتي
شكرا جزيلا على الشرح الرائح جربت الكود مع بعض التعديلات الطفيفة و نجح فعلا
لكن لدي سؤال لماذا لا تظهر لدي الارقام بالفاصلة فدرجة الحرارة تتغير دائما بارقام صحيحة ( 15 16 17 ) و لا تظهر الاجزاء من عشرة نهائيا لا في الحرارة و لا في الرطوبة
الاسلام عليكم
بعد تحميل الكود و توصيل الاوردينو على الشاشة و الحساس يعطيني Temp:Humidity:
error
شرح مفيد و موفق جزاك الله خيرا و بالتوفيق تابع
السلام عليكم
التعديلات التي اضفتها هل يمكن الاطلاع عليها ومشاركتها.