الجمعة، 27 يونيو، 2014

Themistor المقاومة المتغيرة حرارياً

المقاومة الحراريه
Themistor 



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



تتنوع حساسات الحرارة المختلفة تبعاً لعدة امور مثل :


  1. مدى قراءة درجة الحرارة .
  2. الحساسية Sensitivity .
  3. المخرج " رقمي او تماثلي ".
  4. تطبيقاته 

و قد استعرضنا في المدونة مقالين يتحدثان عن الحساس LM35 و الحساس DHT11 .

في هذه التدوينة سنستعرض حساس الحرارة و المسمى المقاومة المتغيرة حرارياً Thermistor ,

ما هو ال thermistor ؟ 




هي عبارة عن مقاومة  متغيرة  تعطي خرجاً يتوافق مع التغير في درجة حرارة المحيط الخارجي , و في حالتنا هنا تعطينا مقاومة متغيرة بالنسبة للتغير لدرجة الحرارة .

هناك عدة أنواع من هذه المقاومات اعتماداً على :

العلاقة بين تغير المقاومة لتغير الحرارة .

نوع التعليب "سنسور مضاد للماء او لا " .

دقة القراءة .

في تجربتنا هذه سنقوم بتجربة المقاومة المتغيرة حرارياً ,thermistor 10k و ال 10k تعني انه يعطي خرجاً مقداره 10كيلو اوم عند 25 درجة مئوية .

هذا الجدول ادناه يوضح العلاقة بين المقاومة و بين درجة الحرارة .



سنقوم بقراءة درجة الحرارة من خلاله , و سنحتاج في هذه التجربة إلى :

1) بطاقة  أردوينو .
2) مقاومة حرارية متغيرة Thermsitor 10k.
3) مقاومة 10k .
4)اسلاك توصيل Jumper .
5) لوحة تثبيت BreadBoard .





سنقوم بتوصيل الدارة كما في المخطط التالي  :

التوصيل مأخوذ من موقع أدافروت التعليمي 



و هنا قمنا بعملية التوصيل خطوة بخطوة حتى تكون واضحة للجميع  .

القطع المستخدمة في التجربة 



توصيل مقاومة 10 كيلو أوم 



طرفي المقاومة الحرارية "تذكر لا يهم الأتجاه هنا "



توصيل طرفي المقاومة الحرارية , الطرف الأول مع المقاومة 10كيلو اوم 





توصيل طرف المقاومة إلى طرف التغذية 5V في الأردوينو

توصيل طرف المقاومة الحرارية الثاني إلى الأرضي GND في الأردوينو



توصيل المدخل A0 في الأردوينو إلى النقطة ما بين المقاومة 10كيلو اوم و المقاومة الحرارية 




الدارة جاهزة للاستعمال و البرمجة .

البرنامج : 


هناك معادلة ثابتة لل Thermistor   تعطينا العلاقة بين درجة الحرارة و التغيير في المقاومة و هي :


سنقوم بتبسيط هذه المعادلة لنحصل على : 
هذه المعادلة سنعوضها للحصول على درجة الحرارة من هذا الحساس .

البرنامج :
//Orginal Code Found on http://wiki.ladyada.net/tutorials/learn/sensors/thermistor.html
// Modified By Mohannad Rawashdeh
//http://www.genotronex.com
// which analog pin to connect
#define THERMISTORPIN A0         
// resistance at 25 degrees C
#define THERMISTORNOMINAL 10000      
// temp. for nominal resistance (almost always 25 C)
#define TEMPERATURENOMINAL 25   
// how many samples to take and average, more takes longer
// but is more 'smooth'
#define NUMSAMPLES 5
// The beta coefficient of the thermistor (usually 3000-4000)
#define BCOEFFICIENT 3950
// the value of the 'other' resistor
#define SERIESRESISTOR 10000    
 
int samples[NUMSAMPLES];
 
void setup(void) {
  Serial.begin(9600);
}
 
void loop(void) {
  uint8_t i;
  float average;
 
  // take N samples in a row, with a slight delay
  for (i=0; i< NUMSAMPLES; i++) {
   samples[i] = analogRead(THERMISTORPIN);
   delay(10);
  }
  // average all the samples out
  average = 0;
  for (i=0; i< NUMSAMPLES; i++) {
     average += samples[i];
  }
  average /= NUMSAMPLES;
  Serial.print("Average analog reading "); 
  Serial.println(average);
  // convert the value to resistance
  average = 1023 / average - 1;
  average = SERIESRESISTOR / average;
  Serial.print("Thermistor resistance "); 
  Serial.println(average);
  float steinhart;
  steinhart = average / THERMISTORNOMINAL;     // (R/Ro)
  steinhart = log(steinhart);                  // ln(R/Ro)
  steinhart /= BCOEFFICIENT;                   // 1/B * ln(R/Ro)
  steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  steinhart = 1.0 / steinhart;                 // Invert
  steinhart -= 273.15;                         // convert to C
  Serial.print("Temperature "); 
  Serial.print(steinhart);
  Serial.println(" *C");
  delay(1000);
}

6 التعليقات :

  1. عندي ملاحظة على الثيرمستور :

    اذا لاحظت انه العلاقة بين درجة الحرارة و المقاومة غير خطية هي تقريبا علاقة Exp
    لذلك يتوجب للحصول على دقة عالية عمل معايرة عن طريق قنطرة وتستون

    للمزيد من المعلومات :
    ارجع الى كتاب Principles Of Measurements Systems

    بالتوفيق و شغل جميل
    دمت بود

    ردحذف
    الردود
    1. نعم صحيح العلاقة غير خطية , و لذلك وضحنا العلاقة قبل أن نكتب البرنامج و أن انتبت للمقال كاملاً ستجدنا عوضنا المعادلة اللوغاريتمية و التي اعطتنا دقة عالية جداً , و اغنتنى عن استعمال قنطرات للمعايرة لاننا استخدمنا معادلة صحيحة في تعويضنا .

      يمكنك تجربة الكود بنفسك و اعطاءنا نتائجك , شكراً لمرورك .

      حذف
  2. سلام اخي انا اريد ان اضع شرط عند وصول درجة حرارة معيتة شغل led وهاهو البرنامج ممكن اين اضع الشرط
    #include "DHT.h"

    #define DHTPIN 2 // what pin we're connected to

    // Uncomment whatever type you're using!
    #define DHTTYPE DHT11 // DHT 11
    //#define DHTTYPE DHT22 // DHT 22 (AM2302)
    //#define DHTTYPE DHT21 // DHT 21 (AM2301)

    // Connect pin 1 (on the left) of the sensor to +5V
    // Connect pin 2 of the sensor to whatever your DHTPIN is
    // Connect pin 4 (on the right) of the sensor to GROUND
    // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

    DHT dht(DHTPIN, DHTTYPE);

    void setup() {
    Serial.begin(9600);
    Serial.println("DHTxx test!");

    dht.begin();
    }

    void loop() {
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    int h = dht.readHumidity();
    int t = dht.readTemperature();

    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
    } else {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
    }
    }

    ردحذف

  3. #include "DHT.h"

    #define DHTPIN 2 // what pin we're connected to

    // Uncomment whatever type you're using!
    #define DHTTYPE DHT11 // DHT 11
    //#define DHTTYPE DHT22 // DHT 22 (AM2302)
    //#define DHTTYPE DHT21 // DHT 21 (AM2301)

    // Connect pin 1 (on the left) of the sensor to +5V
    // Connect pin 2 of the sensor to whatever your DHTPIN is
    // Connect pin 4 (on the right) of the sensor to GROUND
    // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

    DHT dht(DHTPIN, DHTTYPE);

    void setup() {
    Serial.begin(9600);
    Serial.println("DHTxx test!");

    dht.begin();
    }

    void loop() {
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    int h = dht.readHumidity();
    int t = dht.readTemperature();

    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
    } else {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
    }
    }

    ردحذف
  4. ممكن البرنامج لدلك

    ردحذف
  5. ممكن تعريف مقاومه الغير خطيه

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.