Термистор NTC 3950 (100 кОм) и Arduino | 04s.ru

Термистор NTC 3950 (100 кОм) и Arduino

Стокилоомный термистор NTC 3950 (B57540G0104F000, B57560G1104F, B57560G104F или любой подобный) покажет температуру в градусах Цельсия. Возможно к вам в руки попал стокилоомный термистор, и вы хотите считать с него температуру в Цельсиях с помощью ардуино.

Для этого нужно сделать небольшую схему:

А код скетча примерно такой:

void setup(){
    pinMode(A0, INPUT);
    Serial.begin(9600);
    Serial.println("Start");
}
void loop(){
    int v = analogRead(A0);
    Serial.print(v);
    Serial.print("t");
    Serial.print(analog2tempBed(v));
    Serial.println();
    delay(100);
}
const short temptable_11[][2] PROGMEM = {
    { 832, 65 },
    { 858, 60 },
    { 883, 55 },
    { 904, 50 },
    { 924, 45 },
    { 940, 40 }, 
    { 955, 35 }, 
    { 968, 30 },
    { 977, 25 },
    { 987, 20 },
    { 994, 15 },
    { 999, 10 } 
};
# define BEDTEMPTABLE_LEN (sizeof(temptable_11)/sizeof(*temptable_11))
#define PGM_RD_W(x)   (short)pgm_read_word(&x)
static float analog2tempBed(int raw) {
    float celsius = 0;
    byte i;
 
    for (i = 1; i < BEDTEMPTABLE_LEN; i++)
    {
        if (PGM_RD_W(temptable_11[i][0]) > raw)
        {
            celsius = PGM_RD_W(temptable_11[i - 1][1]) +
                (raw - PGM_RD_W(temptable_11[i - 1][0])) *
                (float)(PGM_RD_W(temptable_11[i][1]) - PGM_RD_W(temptable_11[i - 1][1])) /
                (float)(PGM_RD_W(temptable_11[i][0]) - PGM_RD_W(temptable_11[i - 1][0]));
            break;
        }
    }
 
    // Overflow: Set to last value in the table
    if (i == BEDTEMPTABLE_LEN) celsius = PGM_RD_W(temptable_11[i - 1][1]);
 
    return celsius;
}

Не буду скрывать, код я спер из прошивки 3д принтера Обратите внимание на temptable_11 — эту таблицу возможно придется доделать под ваш диапазон температур. Надо прописать соответствие между температурой и данными analogRead(A0). Для этого не стоит разогревать термистор до нужной температуры, просто смотрим его сопротивление по даташиту, втыкаем вместо термистора потенциометр, и смотрим значение на А0. Хотя можно не заморачиваться и использовать эту таблицу для широкого диапазона температур:

   {1, 841},
   {54, 255},
   {107, 209},
   {160, 184},
   {213, 166},
   {266, 153},
   {319, 142},
   {372, 132},
   {425, 124},
   {478, 116},
   {531, 108},
   {584, 101},
   {637, 93},
   {690, 86},
   {743, 78},
   {796, 70},
   {849, 61},
   {902, 50},
   {955, 34},
   {1008, 3}

Или поискать еще тут эти таблицы: http://reprap.org/wiki/Thermistor/ru

Кстати у термисторов хорошая точность и выдерживает большие температуры)

5/5 - (1 голос)


Место для продажи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *