أنت هنا:إصنعها»الحساسات»برمجة الحساسات»برمجة حساس درجة الحرارة

برمجة حساس درجة الحرارة

كتبه برمجة الحساسات 21375 5
آخر تعديل في الأحد, 06 كانون1/ديسمبر 2020 20:31
برمجة حساس درجة الحرارة
قيم الموضوع
(6 أصوات)

ربما جاءت فكرة في صنع آلة أو روبوت يعتمد على درجة الحرارة ليتفاعل مع محيطه، أو صنع جهاز يعمل بالحرارة وتريد أن تتحكم فيه حسب مستويات درجة الحرارة مثلا.... الجواب تجده في هذا المقال الذي يهدف لمساعدتك على تخطي تعقيدات هذه المسألة بكل سهولة.....

 


المحتوى 

image002

1.        تقديم

2.        مختلف استعمالاتها

3.        مستشعر درجة الحرارة (من 40- إلى 150 درجة)

4.        المقاومة الحرارية  (من 55- إلى 105 درجة)

5.        سلك مستشعر لدرجة الحرارة  (من 100- إلى 500 درجة) 

 


تقديم

 

تقاس درجة الحرارة بالوحدات التالية :

 

l         الكلفن K: وهو المقياس المعتمد من قبل المنظومة العالميةوهو مقياس كثير الاستعمال في الميادين العلمية.

l         السيلزيوس C: (درجة حرارة مئوية) وهو المقياس المعتمد في حياتنا اليومية في غالبية دول العالم.

l         الفهرنهيت  F : وهو المقياس المعتمد في الولايات المتحدة الأمريكية.

 

والمعادلات التالية تربط هذه الوحدات بعضها ببعض:

 

[°C] = ([°F] − 32) × 59

 

[°C] = [K] − 273.15

 

توجد واحدات أخرى لا داعي لذكرها هنا.

 

image003

 


مختلف استعمالاتها

 

دعنا نفترض أنك تريد أن تصنع مروحة هواء لانعاشك في حر الصيف. عندما يدور محرك المروحة سترتفع درجة حرارته وبعض الأجزاء الإليكترونية الأخرى بطبيعة الحال. وتريد من مروحتك أن تكون ذكية شيئا ما عن طريق جعلها تتوقف عن العمل عندما تصل درجة الحرارة إلى نسبة معينة. في هذه الحالة ستحتاج لمستشعر درجة الحرارة وميكروكنترولور يعمل على إدارة هذه المسألة. 

 

image004

  

أما الأسلاك المستشعرة لدرجة الحرارة thermocouple فهي تستعمل بكثرة في أنظمة التدفئة والتهوية وتكييف الهواء كـ:

 

image005

image006

المكيف الهوائي

 

مسخن الماء

 

تصل درجة حرارة الماء إلى 95 أو 100 درجة. وبالتالي يمكنك أن تفرغ الماء فس كأس الشاي أو القهوة دون الحاجة لغلي الماء

 

image007

image008

مسخن هوائي

 

أو قل أنه مجمر كهربائي.

الفرن الكهرومغناطيسي

 

image009

 

 

 

 

 

 

 

فرن كهربائي

 

وهو ما تجده في محلات صنع الأخباز والحلويات مثلا...

 

 

 

 

 

هل تجد عندك أفكارا جديدة لاستخدام هذا النوع من المستشعرات؟ فقط فكر وأبدع لنا.... فنحن نحتاج أمثالك في أمتنا.... ربما شيئا كهذا الكأس مثلا أو ما شابه....

 

تعلم معنا اليوم كيف تركب هذه المستشعرات وكيف تبرمجها وبالتالي لن تجد صعوبة في التعامل معها... هل كنت تعرف من قبل كيف تتعامل مع هذه الأشياء؟؟؟

 

image010

 


مستشعر درجة الحرارة (من 40- إلى 150 درجة)

image011

تعريف

باختصار شديد، إنما هو مركب اليكتروني يقيس لك درجة الحرارة....

 

مميزاته 

l         مجال درجة الحرارة: من 40- إلى 150 سيليسيوز.

l         الجهد الكهربائي الموَلد: 0.1 فولط (أي 40- درجة سيليسيوز) إلى 0.2 فواط  (أي 150 درجة سيليسيوز).

l         يحتاج إلى: من 2.7 إلى 5.5 فولط فقط ليعمل على ما يرام.

 

قراءة درجة الحرارة

image012

يمكنك أن تركبه في روبوتك أو في أي جهاز تفكر فيه عن طريق استعمال بطاقة Arduino البرمجية كالتالي:

image013

 

//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);      //انتظار لمدة ثانية واحدة

}

 

قراءة درجة الحرارة بدقة عالية

 

 image014

يمكنك أن تركبه في روبوتك أو أي جهاز تفكر فيه عن طريق استعمال بطاقة 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);

}

 


المقاومة الحرارية (من 55- إلى 105 درجة)

 

image015

السلك اسود هو الذي يعنينا هنا، أما المقاومة التي تراها جانبه إنما هي للتقارن حجمه بها

كما أنه يمكنك استعمالها معه لقراءة درجة الحرارة كما سترى أسفله.


 

تعريف

تدعى المقاومة الحرارية بالإنجليزية (Thermistor). وهي عبارة عن مقاومة كهربائية عادية تتغير مقاومتها حسب درجة الحرارة المطبقة عليها. وبالتالي، فهي تعتبر أيضا مستشعرا لدرجة الحرارة. وانتهينا!

 

في الحقيقة

في الحقيقة، كل مقاومة كهربائية هي مقاومة حرارية أو قل مستشعرا لدرجة الحرارة. إلا أن مقاومتها تتغير بقسمة صغيرة جدا جدا وبالتالي سيصعب عليك يا حبيبي قياس درجة الحرارة. أما مثال يومنا هذا، أعني المقاومة الحرارية Thermistor، فهي صنعت خصيصا لتتغير بسرعة بسبب درجة الحرارة.

 

مميزاتها

أرخص

تريد أن تضعها في الماء؟ ضعها ولا تخف عليها...

لا يهم أي جهد كهربائي استعملت معها

من الصعب أن تخربها وتتخلص منها...وبالتالي فهي ممن يمكن الاعتماد عليه

دقة عالية لقياس درجة الحرارة (°0.25±)

 

الطريقة اولى لقراءة درجة الحرارة

سنحتاج إلى مقاومة حرارية ومقاومة عادية أيا كانت قيمتها وبعض الأسلاك الكهربائية بالإضافة إلى بطاقة Arduino.

ما عليك الآن إلا أن تصل المقاومة العادية بالمربط 5V لبطاقة Arduino. ثم صل الطرف الآخر للمقاومة بإحدى طرفي المقامومة الحرارية (المستشعر). سيبقة طرف واحد فقط للمقاومة الحرارية، قم بإيصاله بمربط الأرضية (ground) للبطاقة. قم بإضافة سلك كهربائي بين المقاومتين وصله بالمربط التناظري 0  (Analog 0) للبطاقة.

image016

لقياس درجة الحرارة سنحتاج لمعرفة قيمة المقاومة أولا.

يجب أن تعلم أن الميكروكنترولور لا يستطيع أن يتعرف على قيمة المقاومة. ولكن، يمكنه أن يحدد قيمة الجهد الكهربائي.وبالتالي لتمعرفة الجهد الكهربائي سنحتاج لإضافة مقاومة عادية أخرى. قم بكل بساطة بربط المقاومة والمستشعر على التوالي كما هو مبين في الدارة الكهربائية أعلاه. والآن يمكنك فقط أن تقيس الجهد الكهربائي في الوسط، حيث أنه كلما تتغير المقاومة فإن الجهد الكهربائي سيتغير أيضا طبقا للعلاقة الرياضية التي تربط شدة التيار الكهربائي بالمقاومة .

 

لنقل أن المقاومة التي تريد أن تضيفها هي 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/-1);

  Serial.print("Thermistor resistance ");

  Serial.println(R);

  delay(1000);

}

  

الطريقة الثانية لقراءة درجة الحرارة 

image017

تزودنا البطاقة البرمجة 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/-1);

  Serial.print("Thermistor resistance ");

  Serial.println(R);

  delay(1000);

}

 

التحويل إلى درجة الحرارة 

كما رأيت سابقا أننا كنا نريد أن نقرأ قيمة المقاومة فقط. لكننا نريد أن نحول هذه القيمة إلى درجة الحرارة. وبالتالي سنضيف بعض الأسطر في الشيفرة لتقوم بهذه المهمة. 

توجد علاقة رياضية فيزيائية تدعى بمعادلة ستينهارت-هارت (Steinhart-Hart). تساعدنا هذه العلاقة بتحويل تقريبي لقيمة المقاومة إلى درجة الحرارة بالكلفين (kelvin):

 image018

بحيث:

  • R هي قيمة المقاومة الحرارية (المستشعر).
  • R0 هي قيمة المقاومة المضافة.
  • T0 هي درجة حرارة الغرفة (حوالي 25 درجة).
  • B هي معامل المقاومة الحرارية (في هذه الحالة هي 3950.  يجب أن تجد هذه القيمة مصحوبة مع المستشعر عند شراءه. يرمز لها بـ B25/50.)
  • T هي درجة الحرارة التي نبحث عنها.
  •  

لتحويل درجة الحرارة من الكلفين ألى السيليسيوز نستعمل العلاقة التالية: (1C = 273.15 Kelvin)

 

#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);

}

 


سلك مستشعر لدرجة الحرارة (من 100- إلى 500 درجة) 

 

 image019

تعريف 

يطلق عليه Thermocouple بالإنجليزية.

هذا المستشعر عبارة عن سلكين معدنيين. وهو حساس لدرجة الحرارة ولا يوجد أي مركب اليكتروني داخله. يمكن أن يتولد جهد كهربائي خفيف عندما يتعرض هذا المستشعر لدرجة الحرارة، ويعزى هذا بسبب اختلاف معدن السلكين.

 

مميزاته 

بسبب اختلاف معدني السلكين، يمكنك أن تجد العديد من أنواع هذا المستشعر. هذا الاختلاف يسبب تغير مجال الجهد الكهربائي الذي يمكن توليده من المستشعر. فمثلا النوع K يمكن أن يقيس من 200- إلى 1350 درجة حرارة سيليسيوز، كما يوجد بعض الأنواع الذي يتجاوز 2300 درجة حرارة سيليسيوز! 

 

المشكل في استعمال هذا المستشعر هو التغير الطفيف جدا للجهد الكهربائي المولد من طرف المستشعر، حوالي 50uV فقط (أي ما يعادل 1 مقسوم على 1000000 فولط). وبالتالي سيكون من الصعب تحديد درجة الحرارة من خلال هذا المقدار من الجهد الكهربائي باستعمال المستشعر مباشرة. لتفادي هذا المشكل يمكنك استعمال واجهة اليكترونية تكون الواسط بين المستشعر والميكروكنترولور. يمكن أن تصل المستشعر بهذه الواجهة (اسمها MAX6675 في مثال يومنا هذا) ثم تصلها هي بالبطاقة Arduino.

 

مميزات المستشعر الذي سنتكلم عنه اليوم هي كالتالي:

l         النوع: K

l         الطول: متر واحد (لكن يمكنك تقليصه حسب الطول الذي تريده)

l         مجال درجة الحرارة: من 100- إلى 500 سيليسيوز.

l         الجهد الكهربائي الموَلد: 6- إلى 20 ميليفولط.

l         الدقة: 2± درجة سيليسيوز.

l         الواجهة: رقمية (MAX6675) أو تناظرية (AD595)

 

كيف تركب؟

image020

لهذا المستشعر سلكين أصفر (موجب +) وأحمر (سالب -). قم بإيصال السلك الأصفر بمربط الواجهة MAX6675 الذي يحمل إشارة +. والسلك المتبقس بالمربط الآخر.

image021

لتصل الواجهة MAX6675 بالبطاقة Arduino، قم فقط بإيصال جميع مرابط الواجهة بمرابط البطاقة Arduino من المربط 2 إلى المربط 6 (مرابط رقمية digital).

 

image022

برمجة 

أولا وقبل كل شيء قم بتحميل مكتبة شيفرات الواجهة MAX6675  من هنا: http://github.com/adafruit/MAX6675-library 

ثم قم بتثبيتها في حاسوبك كما هو مبين في هذا المقال: http://www.ladyada.net/library/arduino/libraries.html 

قم بإعادة تشغيل برنامج Arduino IDE ثم افتح الشيفرة التالية عن طريق هذا المسار:

 

File→Examples→MAX6675→serialthermocouple  

 

 // مثال لاستعمال هذا المستشعر 

// 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); 

 

قم بتنفيذه وتحويله إلى بطاقة Arduino. بعدها تحقق من عمل ما أنجزت يداك. 


ترجمة وتحرير: محمد السهلي 

{jumi [*3]}


المراجع

 

http://ar.wikipedia.org/wiki/درجة الحرارة

http://en.wikipedia.org/wiki/Temperature

http://www.infoplease.com/cig/weather/take-temperature.html

http://www.ladyada.net/learn/sensors/thermocouple.html

http://www.ladyada.net/learn/sensors/tmp36.html

http://www.ladyada.net/learn/sensors/thermistor.html

http://zool33.uni-graz.at/artlife/thermobots

http://www.fischertechnik.de/en/desktopdefault.aspx/tabid-1/61_read-5/usetemplate/

http://www.designboom.com/weblog/cat/16/view/4948/g-dog-by-g-robots.html

http://www.likecool.com/Mug_with_a_temperature_sensor--Office--Gear.html 

التعليقات  

بن عكوش
0 # بن عكوش 2013-05-31 02:10
اخي لدي سؤال المرجو الرد عليه عبر البريد الالكتروني في اسرع وقت ممكن
هل بطاقة اردينو يمكن توصيلها بجهاز رقمي اخر متل ساعة وما الى غير دالك غير الكمبيوتر
رد | رد مع اقتباس | اقتباس | تقرير إلى المدير
سيمو
-1 # سيمو 2015-06-25 01:57
نعم يمكن ذلك
رد | رد مع اقتباس | اقتباس | تقرير إلى المدير
إدارة إصنعها
-1 # إدارة إصنعها 2013-09-07 18:03
يتبين من سؤالك أنك ما زلت مبتدءا في هذا الميدان، ولذلك ننصحك بأن تتعلم البرمجة بأردينو أولا وهو ما ستجده عند النقر على القائمة "برمجها" أعلاه. ستجد ركنا خاصا للبرمجة بأردينو، إقرأه أولا وستفهم رويدا رويدا إذا استعملت هذه اللوحة الإلكترونية في مشاريعك.
رد | رد مع اقتباس | اقتباس | تقرير إلى المدير
mohamad aj
0 # mohamad aj 2014-04-06 20:29
حملت مكتبة شيفرات الواجهة MAX6675 ، وعندما استخدمت إحداها في برنامج arduino1.0.3
وقمت بالترجمة ... أعطاني البرنامج :
error: 'MAX6675' does not name a type
ماالسبب ؟؟؟ وأين الخطأ عندي ؟
رد | رد مع اقتباس | اقتباس | تقرير إلى المدير
mohamad aj
0 # mohamad aj 2014-04-06 21:08
حملت مكتبة شيفرات الواجهة MAX6675 ، وعندما استخدمت إحداها في برنامج arduino1.0.3
وقمت بالترجمة ... أعطاني البرنامج :
error: 'MAX6675' does not name a type
ماالسبب ؟؟؟ وأين الخطأ عندي ؟
رد | رد مع اقتباس | اقتباس | تقرير إلى المدير

أضف تعليقا


إصنعها يريد أن يتأكد أنك لست روبوتا، لذلك أحسب ما يلي:

كود امني
تحديث