Стокилоомный термистор NTC 3950 (B57540G0104F000, B57560G1104F, B57560G104F или любой подобный) покажет температуру в градусах Цельсия. Возможно к вам в руки попал стокилоомный термистор, и вы хотите считать с него температуру в Цельсиях с помощью ардуино.
Для этого нужно сделать небольшую схему:
А код скетча примерно такой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{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
Кстати у термисторов хорошая точность и выдерживает большие температуры)
Добавить комментарий