دمج الوحدات · الدرس 3.1

مقياس الحرارة (Thermometer)

العودة إلى الدروس

عرض الحرارة ومبدأ المقاومة الحرارية (Thermistor)

ستستخدم LCD لعرض درجة الحرارة.

المكونات المطلوبة

المقاومة الحرارية (Thermistor)

تتغير مقاومتها مع الحرارة. تتغير مقاومة جميع المقاومات قليلًا بالحرارة، لكن التغير عادة صغير وصعب القياس؛ أما المقاومة الحرارية (Thermistor) فتصمم لتغير كبير، قد يبلغ 100Ω أو أكثر لكل درجة.

يوجد نوع NTC بمعامل حراري سالب، ونوع PTC بمعامل موجب. يستخدم NTC غالبًا لقياس الحرارة. يستخدم PTC أيضًا مصهرًا قابلًا لإعادة الضبط: زيادة التيار تسخنه فتزيد مقاومته ويحد التيار، مما يحمي الدائرة.

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

المخطط الكهربائي لمقياس الحرارة (Thermometer) وشاشة العرض (LCD1602 Module)
المخطط الكهربائي لمقياس الحرارة (Thermometer) وشاشة العرض (LCD1602 Module)
توصيل الشاشة والمقاومة الحرارية (Thermistor)
توصيل الشاشة والمقاومة الحرارية (Thermistor)

تحركت بعض أسلاك التوصيل قرب المقاومة المتغيرة (Potentiometer) قليلًا في هذا التخطيط. مقاومة 10kΩ والمقاومة الحرارية (Thermistor) إضافتان جديدتان إلى دائرة الشاشة.

البرنامج والحساب والعرض

قبل رفع البرنامج، تأكد من توفر مكتبة LiquidCrystal في بيئة Arduino IDE. إذا لم تكن مثبتة أو ظهرت رسالة تشير إلى مكتبة مفقودة، فاتبع خطوات التثبيت في قسم «ما هي المكتبات؟» وطرق تثبيتها في الدرس 1.5 «وميض LED وإضافة المكتبات».

افتح ملف البرنامج Thermometer.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتشغيله عليها.

إذا تعذر نقل البرنامج إلى اللوحة، فراجع قسم «رفع البرنامج ومعالجة خطأ الاتصال» في الدرس 1.5 «وميض LED وإضافة المكتبات» للتحقق من اتصال USB واختيار نوع اللوحة والمنفذ التسلسلي في بيئة Arduino IDE.

بعد التشغيل ضع إصبعك على حساس الحرارة؛ تدفئته ترفع القراءة.

يحدد LiquidCrystal lcd(7, 8, 9, 10, 11, 12) منافذ الشاشة، والتعليق فوقه يذكرك بوظائفها لتسهيل تغييرها.

في loop() نحول القراءة التناظرية إلى حرارة، ثم نعرضها. تقرأ analogRead(tempPin) القيمة. يحسب log(10000.0 * ((1024.0 / tempReading - 1))) مقدارًا تستخدمه معادلة ذات معاملات 0.001129148 و 0.000234125 و 0.0000000876741 لاستخراج tempK. ثم tempC = tempK - 273.15، و tempF = tempC * 9.0 / 5.0 + 32.0.

قد يختلف عدد الخانات بين القراءات، مثل الانتقال من 101.50 إلى 99.00، فتظل خانة قديمة ظاهرة. لتجنب ذلك اكتب السطر كاملًا في كل دورة، مع مسافات في موضع القراءة. يذكّر التعليق بأعمدة الشاشة الستة عشر. ثم ضع المؤشر حيث تريد القيمة واطبعها لملء الفراغ.

لإظهار الدرجة المئوية تحت العنوان Temp C، اطبع tempC. أما tempF فيحمل الدرجة بالفهرنهايت ويُعرض تحت العنوان Temp F.

الكود

Thermometer/Thermometer.ino

//www.elegoo.com
//2016.12.9

#include <LiquidCrystal.h>
int tempPin = 0;
//                BS  E  D4 D5  D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup()
{
  /*lcd.begin(cols, rows)
    lcd: a variable of type LiquidCrystal
    cols: the number of columns that the display has
    rows: the number of rows that the display has 
  */
  lcd.begin(16, 2);
}
void loop()
{
  int tempReading = analogRead(tempPin);
  // This is OK
  double tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
  tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK )) * tempK );       //  Temp Kelvin
  float tempC = tempK - 273.15;            // Convert Kelvin to Celcius
  float tempF = (tempC * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit
  /*  replaced
    float tempVolts = tempReading * 5.0 / 1024.0;
    float tempC = (tempVolts - 0.5) * 10.0;
    float tempF = tempC * 9.0 / 5.0 + 32.0;
  */
  // Display Temperature in C
  lcd.setCursor(0, 0);
  lcd.print("Temp         C  ");
  // Display Temperature in F
  //lcd.print("Temp         F  ");
  lcd.setCursor(6, 0);
  // Display Temperature in C
  lcd.print(tempC);
  // Display Temperature in F
  //lcd.print(tempF);
  delay(500);
}

ملفات الدرس والمكتبات

المكتبات المرفقة

ملفات الدرس

100%

عرض الصورة

استخدم + و− للتكبير والتصغير، أو اضغط Esc للإغلاق.