![]() |
ربما جاءت فكرة في صنع آلة أو روبوت يعتمد على درجة الحرارة ليتفاعل مع محيطه، أو صنع جهاز يعمل بالحرارة وتريد أن تتحكم فيه حسب مستويات درجة الحرارة مثلا.... الجواب تجده في هذا المقال الذي يهدف لمساعدتك على تخطي تعقيدات هذه المسألة بكل سهولة.....
|
![]() |
تقاس درجة الحرارة بالوحدات التالية :
l الكلفن K: وهو المقياس المعتمد من قبل المنظومة العالميةوهو مقياس كثير الاستعمال في الميادين العلمية.
l السيلزيوس C: (درجة حرارة مئوية) وهو المقياس المعتمد في حياتنا اليومية في غالبية دول العالم.
l الفهرنهيت F : وهو المقياس المعتمد في الولايات المتحدة الأمريكية.
والمعادلات التالية تربط هذه الوحدات بعضها ببعض:
[°C] = ([°F] − 32) × 5⁄9
[°C] = [K] − 273.15
توجد واحدات أخرى لا داعي لذكرها هنا.
| ![]() |
دعنا نفترض أنك تريد أن تصنع مروحة هواء لانعاشك في حر الصيف. عندما يدور محرك المروحة سترتفع درجة حرارته وبعض الأجزاء الإليكترونية الأخرى بطبيعة الحال. وتريد من مروحتك أن تكون ذكية شيئا ما عن طريق جعلها تتوقف عن العمل عندما تصل درجة الحرارة إلى نسبة معينة. في هذه الحالة ستحتاج لمستشعر درجة الحرارة وميكروكنترولور يعمل على إدارة هذه المسألة.
| ![]() |
![]() | ![]() |
المكيف الهوائي
|
مسخن الماء
تصل درجة حرارة الماء إلى 95 أو 100 درجة. وبالتالي يمكنك أن تفرغ الماء فس كأس الشاي أو القهوة دون الحاجة لغلي الماء
|
![]() | ![]() |
مسخن هوائي
أو قل أنه مجمر كهربائي.
|
الفرن الكهرومغناطيسي
|
![]() |
فرن كهربائي
وهو ما تجده في محلات صنع الأخباز والحلويات مثلا...
|
هل تجد عندك أفكارا جديدة لاستخدام هذا النوع من المستشعرات؟ فقط فكر وأبدع لنا.... فنحن نحتاج أمثالك في أمتنا.... ربما شيئا كهذا الكأس مثلا أو ما شابه....
تعلم معنا اليوم كيف تركب هذه المستشعرات وكيف تبرمجها وبالتالي لن تجد صعوبة في التعامل معها... هل كنت تعرف من قبل كيف تتعامل مع هذه الأشياء؟؟؟
| ![]() |
![]() |
![]() |
يمكنك أن تركبه في روبوتك أو في أي جهاز تفكر فيه عن طريق استعمال بطاقة Arduino البرمجية كالتالي:
|
![]() |
//TMP36 متغير يمثل مربط المستشعر
int sensorPin =0;
void setup()
{
Serial.begin(9600); //سرعة التحويل لتهيئة البطاقة
}
void loop()
{
//قراءة قيمة الصادرة من المستشعر
int reading = analogRead(sensorPin);
//تحويل القيمة المقروءة إلى الجهد الكهربائي
// يمكنك أن تستبدل 5.0 إلى 3.3 في حالة استعمال 3.3 فولط
float voltage = reading * 5.0;
voltage /= 1024.0;
// كتابة قيمة الجهد الكهربائي على الشاشة
Serial.print(voltage); Serial.println(" volts");
// التحويل إلى درجة الحرارة
float temperatureC =(voltage - 0.5)*100;
//سيليسيوز
Serial.print(temperatureC); Serial.println(" degrees C");
// فهرنت
float temperatureF =(temperatureC * 9.0 / 5.0)+ 32.0;
Serial.print(temperatureF); Serial.println(" degrees F");
delay(1000); //انتظار لمدة ثانية واحدة
}
|
![]() |
يمكنك أن تركبه في روبوتك أو أي جهاز تفكر فيه عن طريق استعمال بطاقة Arduino البرمجية كالتالي:
|
/* شيفرة لامتحان المستشعر من الموقع
http://www.ladyada.net/make/logshield/lighttemp.html
*/
#define aref_voltage 3.3 // ARef نصل 3.3 فولط بـ
int tempPin =1; //TMP36 متغير يمثل مربط المستشعر
int tempReading;
void setup(void)
{
Serial.begin(9600);
analogReference(EXTERNAL); // Aref استعمال
}
void loop(void)
{
tempReading = analogRead(tempPin);
Serial.print("Temp reading = ");
Serial.print(tempReading);
// تحويل القيمة المقوءة إلى الجهد الكهربائي
float voltage = tempReading * aref_voltage;
voltage /= 1024.0;
Serial.print(" - ");
Serial.print(voltage); Serial.println(" volts");
// التحويل إلى درجة الحرارة
float temperatureC =(voltage - 0.5)*100;
//سيليسيوز
Serial.print(temperatureC); Serial.println(" degrees C");
// فهرنت
float temperatureF =(temperatureC * 9.0 / 5.0)+ 32.0;
Serial.print(temperatureF); Serial.println(" degrees F");
delay(1000);
}
|
![]() |
السلك اﻷسود هو الذي يعنينا هنا، أما المقاومة التي تراها جانبه إنما هي للتقارن حجمه بها.
كما أنه يمكنك استعمالها معه لقراءة درجة الحرارة كما سترى أسفله.
|
سنحتاج إلى مقاومة حرارية ومقاومة عادية أيا كانت قيمتها وبعض الأسلاك الكهربائية بالإضافة إلى بطاقة Arduino.
ما عليك الآن إلا أن تصل المقاومة العادية بالمربط 5V لبطاقة Arduino. ثم صل الطرف الآخر للمقاومة بإحدى طرفي المقامومة الحرارية(المستشعر). سيبقة طرف واحد فقط للمقاومة الحرارية، قم بإيصاله بمربط الأرضية (ground) للبطاقة. قم بإضافة سلك كهربائي بين المقاومتين وصله بالمربط التناظري 0 (Analog 0) للبطاقة.
|
![]() |
لقياس درجة الحرارة سنحتاج لمعرفة قيمة المقاومة أولا.
يجب أن تعلم أن الميكروكنترولور لا يستطيع أن يتعرف على قيمة المقاومة. ولكن، يمكنه أن يحدد قيمة الجهد الكهربائي.وبالتالي لتمعرفة الجهد الكهربائي سنحتاج لإضافة مقاومة عادية أخرى. قم بكل بساطة بربط المقاومة والمستشعر على التوالي كما هو مبين في الدارة الكهربائية أعلاه. والآن يمكنك فقط أن تقيس الجهد الكهربائي في الوسط، حيث أنه كلما تتغير المقاومة فإن الجهد الكهربائي سيتغير أيضا طبقا للعلاقة الرياضية التي تربط شدة التيار الكهربائي بالمقاومة .
لنقل أن المقاومة التي تريد أن تضيفها هي 10000 أوم. أما المقاومة الحرارية فدعنا نسميها R. ولنرمز للقيمة المقروءة من المربط التناظري بـADC. يمكنك استعمال العلاقة التالية لحساب المقاومة R:
R = 10000 /(1023/ADC - 1)
لا أريد أن أبين لك كيف تم الحصول عليها حتى لا تمل. لكن إذا ألححت فيمكنك ترك سؤال في نهاية هذا المقال حتى يتسنى لنا الرد عليك إن شاء الله!
|
#define Rn 10000 // قيمة المقاومة المضافة
#define THERMISTORPIN A0 // رمز المربط التناظري للبطاقة
void setup(void)
{
Serial.begin(9600);
}
void loop(void)
{
float R;
reading = analogRead(THERMISTORPIN); // قراءة قيمة المستشعر
Serial.print("Analog reading ");
Serial.println(reading);
// تحويل القيمة إلى المقاومة
R= Rn /(1023/ R -1);
Serial.print("Thermistor resistance ");
Serial.println(R);
delay(1000);
}
|
![]() |
تزودنا البطاقة البرمجة Arduino بـ 5 فولط غالبا. وبالتالي فلحبذا لو نستعمل 3.3 فولط لقراءة قيمة المستشعر. قد تتساءل لماذا؟ في الحقيقة 5فولط تسبب "ضجيجا” أكبر في البطاقة. وبالتالي سيؤثر هذا في فعالية المستشعر. لتفادي هذا المشكل نستعمل المربط ذي 3.3 فولط والذي سنصله بـ AREF للبطاقة Arduino. هذه هي الخدعة الأولى لتحسين قراءة قيمة المقاومة.
أما الخدعة الثانية، فهي أن نقرءها عدة مرات ثم نحسب متوسط هذه القيم. نحتاج حوالي 5 قيم وهي كافية في هذه الحالة. سترى أننا أضفنا سلكا كهربائيا في الدارة يصل المربط ذي 3.3 فولط بالمربط AREF.
|
#define THERMISTORPIN A0 // رمز المربط التناظري للبطاقة
#define Rn 10000 // قيمة المقاومة المضافة
#define N 5 // عدد القيم التي سنحسب من خلالها القيمة المتوسطة للمقاومة
int samples[N];
void setup(void)
{
Serial.begin(9600);
analogReference(EXTERNAL); // Aref استعمال
}
void loop(void)
{
uint8_t i;
float R;
// لنأخذ عددا محددا من قيم المستشعر مع انتظار طفيف بينها
for(i=0; i< N; i++)
{
samples[i]= analogRead(THERMISTORPIN);
delay(10);
}
// القيمة المتوسطة لكل القيم السابقة
R=0;
for(i=0; i< N; i++) R+= samples[i];
R/= N;
Serial.print("Average analog reading ");
Serial.println(R);
// تحويل القيمة إلى المقاومة
R= Rn / (1023/ R -1);
Serial.print("Thermistor resistance ");
Serial.println(R);
delay(1000);
}
|
![]() |
- R هي قيمة المقاومة الحرارية (المستشعر).
- R0 هي قيمة المقاومة المضافة.
- T0 هي درجة حرارة الغرفة (حوالي 25 درجة).
- B هي معامل المقاومة الحرارية (في هذه الحالة هي 3950. يجب أن تجد هذه القيمة مصحوبة مع المستشعر عند شراءه. يرمز لها بـ B25/50.)
- T هي درجة الحرارة التي نبحث عنها.
#define N 5 // عدد القيم التي سنحسب من خلالها القيمة المتوسطة للمقاومة
#define Rn 10000 // قيمة المقاومة المضافة
#define THERMISTORPIN A0 // رمز المربط التناظري للبطاقة
#define R0 10000 // المقاومة عند 25 درجة حرارة سليسيوز
#define T0 25 // درجة الحرارة الطبيعية
#define B 3950 // ( 3000-4000) معامل المقاومة الحرارية غالبا بين
int samples[N];
void setup(void)
{
Serial.begin(9600);
analogReference(EXTERNAL);
}
void loop(void)
{
uint8_t i;
float R;
// لنأخذ عددا محددا من قيم المستشعر مع انتظار طفيف بينها
for(i=0; i< N; i++)
{
samples[i]= analogRead(THERMISTORPIN);
delay(10);
}
// القيمة المتوسطة لكل القيم السابقة
R=0;
for(i=0; i< N; i++) R += samples[i];
R/= N;
Serial.print("Average analog reading ");
Serial.println(R);
// تحويل القيمة إلى المقاومة
R= Rn /(1023/ R –1);
Serial.print("Thermistor resistance ");
Serial.println(average);
// تحويل المقاومة إلى درجة الحرارة
float T;
T =1.0 / (log( R / R0) / B + 1.0 /(T0 + 273.15));
T -= 273.15; // تحويل إلى درجة الحرارة سيليسيوز
Serial.print("Temperature ");
Serial.print(T);
Serial.println(" *C");
delay(1000);
}
|
![]() |
![]() |
لهذا المستشعر سلكين أصفر (موجب +) وأحمر (سالب -). قم بإيصال السلك الأصفر بمربط الواجهةMAX6675 الذي يحمل إشارة +. والسلك المتبقس بالمربط الآخر.
|
![]() |
لتصل الواجهة MAX6675 بالبطاقة Arduino، قم فقط بإيصال جميع مرابط الواجهة بمرابط البطاقةArduino من المربط 2 إلى المربط 6 (مرابط رقمية digital).
|
![]() |
// مثال لاستعمال هذا المستشعر
// www.ladyada.net/learn/sensors/thermocouple
#include "max6675.h" // استعمال المكتبة المخصصة للواجهة
int thermoDO =4;
int thermoCS =5;
int thermoCLK =6;
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
int vccPin =3;
int gndPin =2;
void setup()
{
Serial.begin(9600);
pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
Serial.println("MAX6675 test");
delay(500);
}
void loop()
{
Serial.print("C = "); // درجة الحرارة بالسيليسيوز
Serial.println(thermocouple.readCelsius());
Serial.print("F = ");// درجة الحرارة بالفرنهيت
Serial.println(thermocouple.readFarenheit());
delay(1000);
}
|