اردوينو – الدرس الثالث عشر – عرض درجة الحرارة والاضاءة على الشاشة (الجزء الثاني)

مبتدئ

image_pdf

مقدمة

في هذا الدرس ستتعلم كيفية عرض درجة الحرارة والاضاءة في الغرفة على الشاشة الكرستالية LCD.

ستقوم بقياس درجة سطوع اضاءة الغرفة عبر مستشعر الاضاءة ‘photocell’ الذي قمت بإستخدامه في الدرس العاشر.

لقياس درجة الحرارة ستستخدم مستشعر الحرارة . هذه الاداة تمتلك ثلاث رؤوس، واحدة للحصول على طاقة 5V وواحدة للمخرج الأرضي GND وواحدة لأجل التوصيل إلى مدخل تناظري analog input بالاردوينو.

عرض درجة الحرارة والاضاءة

المواد والأدوات

lcd

LCD Display (16×2 characters)

arduino-lesson-12-lcd

1× مقاوم متغير 10kΩ variable resistor (pot)

arduino-lesson-10-sensing-light

1× (1 kΩ Resistor)

عرض درجة الحرارة والاضاءة

 1× المستشعر الضوئي (Photocell)

عرض درجة الحرارة والاضاءة

مستشعر الحرارة (TMP36 temperature sensor)

Half-size Breadboard

1× لوحة التجارب (Half-size Breadboard)

Arduino Uno R3

 1× اردوينو اونو

Jumper wire pack

حزمة أسلاك توصيل (ذكر-ذكر)

Arduino cable

1× سلك اردوينو

توصيل الدائرة

حتى تتمكن من عرض درجة الحرارة والاضاءة عليك الرجوع لتصميم الدائرة في الدرس الثاني عشر:

عرض درجة الحرارة والاضاءة

قمنا بتغيير بعض التوصيلات في التصميم كما تلاحظ، تحديداً التوصيلات التي حول المقاوم المتغير ‘pot’ .

مستشعر الضوء ‘photocell’ والمقاومه  1kΩ و مستشعر الحرارة TMP36  هي الاضافات التي قمنا باضافتها للوح التجارب. الجزء المقوس لمستشعر الحرارة TMP36 يكون بإتجاه الشاشة.

الكود البرمجي

الكود البرمجي لهذا الدرس يعتمد على الكود البرمجي للدرس الثاني عشر، وقمنا باضافة بعض الاسطر لنتمكن من عرض درجة الحرارة والاضاءة على شاشة LCD

#include <LiquidCrystal.h> 
 
int tempPin = 0;
int lightPin = 1;
 
//                BS  E  D4 D5  D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
 
void setup()
{
  lcd.begin(16, 2);
}
 
void loop()
{
  // Display Temperature in C
  int tempReading = analogRead(tempPin);
  float tempVolts = tempReading * 5.0 / 1024.0;
  float tempC = (tempVolts - 0.5) * 100.0;
  float tempF = tempC * 9.0 / 5.0 + 32.0;
  //         ----------------
  lcd.print("Temp         F  ");
  lcd.setCursor(6, 0);
  lcd.print(tempF);
 
  // Display Light on second row
  int lightReading = analogRead(lightPin);
  lcd.setCursor(0, 1);
  //         ----------------
  lcd.print("Light           ");  
  lcd.setCursor(6, 1);
  lcd.print(lightReading);
  delay(500);
}

في السطر التالي قمنا بوضع تعليق ‘comment’ لمعرفة التوصيلات ما بين منافذ الاردوينو ورؤوس شاشة الـLCD

//                BS  E  D4 D5  D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

هذا يسهل عملية التعديل واستخدام منافذ اخرى من اختيارك اذا رغبت لاحقاً.

في دالة setup هنالك امرين علينا القيام بها ، الأول علينا تحويل القيمة التناظرية analog لمستشعر الحرارة إلى مقياس حرارة صحيح ، والثاني هو اظهارها على شاشة الـLCD

أولا لنلقي نظرة على طريقة تحويل واحتساب درجة الحرارة:

  int tempReading = analogRead(tempPin);
  float tempVolts = tempReading * 5.0 / 1024.0;
  float tempC = (tempVolts - 0.5) * 100.0;
  float tempF = tempC * 9.0 / 5.0 + 32.0;

قمنا بالسطر الأول بقراءة القيمة التناظرية من مستشعر الحرارة وتخزين القيمة في tempReading
السطر الثاني قمنا بضرب قيمة tempReading في 5 ثم القسمة على 1024 وتخزين الناتج في tempVolts وهي قيمة الجهد ( مابين 0 و 5 )
السطر الثالث  قمنا بطرح 0.5 من قيمة tempVolts  (الجهد) ثم ضربها في 100 وتخزين القيمة في tempC وذلك لتحويل الجهد إلى درجة الحرارة C
السطر الرابع قمنا بضرب قيمة tempC (درجة حرارة C) في 9 ثم قسمتها على 5 ثم جمعها+32 وتخزين القيمة في tempF وذلك لتحويل درجة الحرارة C إلى درجة حرارة F

عرض القراءات على شاشة LCD قد تكون صعبة وذلك لاستمرار تغير قيم القراءات وعدد خانات القراءة مما يجعل خانات القراءة القديمة تذهب يسار الشاشة.

لحل هذه المشكلة ، كل ماعليك فعله هو طباعة السطر كاملاً في كل مره  ، داخل دالة  loop.

  //         ----------------
  lcd.print("Temp         F  ");
  lcd.setCursor(6, 0);
  lcd.print(tempF);

سطر التعليق ‘comment’ وضع لاجلك حتى تعرف عدد الخانات 16 التي يمكن اظهارها في شاشة LCD في حال رغبت في بتغيير الجمل التي ترغب وضعها اسفلها.

لملء الفراغات ، قم بتحديد موضع المؤشر حيث بداية الخانة التي ترغب بإظهارها على الشاشة.

قمنا بعمل نفس الطريقة مع مستشعر الاضاءة ‘photocell’ ، لايوجد مقياس لدرجة سطوع الضوء لذلك قمنا بإظهار القراءة التناظرية analogRead التي حصلنا عليها من المستشعر مباشرة على الشاشة.

بعد رفع الكود على الاردوينو ستتمكن من عرض عرض درجة الحرارة والاضاءة.

أنشطة أخرى

حاول ان تظهر درجة الحرارة المئوية C بدلاً من الفهرنهايت F

X
تم إضافة المنتج إلى السلة بنجاح