В своих устройствах использую терморезисторы NTC 3950 1% 10kOm Написал библиотеку (TermoRes3950) для их использования, может кому пригодится. В принципе её можно применить к любому терморезистору, только нужно в ней заменить таблицу зависимостей температура/сопротивление на необходимую. Схема включения Пример использования Код (C++): #include <TermoRes3950.h>//библиотека терморезистора TermoRes3950 termometr(0);//инициализация терморезистора на АЦП 0 float temp=0.0;//переменная для хранения температуры void setup(){ Serial.begin(9600); } void loop(){ temp=termometr.getTemp();//получаем температуру Serial.println(temp);//выводим температуру в монитор порта delay(1000);//задержка }
Интересная библиотека. По умолчанию настроена на 12 bit АЦП ? А на 10 bit закментировано. Я правильно понял. Чтобы подключить на 10 бит надо сделать наоборот.
Совершенно верно (использован оверсемплинг до 12 bit). Там всё просто можно и на 10 bit (но там не только раскоментировать нужно). С оверсемплингом хороший результат измерений получается, особенно если шумы есть.
Планирую немного переписать библиотеку. Добавить настройку (выставлять сопротивление по схеме из первого поста Ra), сделать так чтобы для нескольких экземпляров класса использовалась одни и те же функции (чтобы не дублировались, в частности таблица температура/сопротивление), выбор режима 10bit или oversempling 12bit возможно библиотека станет универсальной если добавить возможность передавать в нё произвольную таблицу (температура/сопротивление), чтобы любой терморезистор использовать. Но это уже как время позволит. Текст библиотеки на данный моммент H Код (C++): #ifndef TermoRes3950_h #define TermoRes3950_h class TermoRes3950 { public: TermoRes3950(int pin); double getTemp(); private: static float getR(float V); int _pin; }; #endif CPP Код (C++): /* TermoRes3950.cpp - A. Taranov (yul-i-an) 04.2016 */ #include <arduino.h> #include "TermoRes3950.h" static float addr[34][2] = {//таблица температура, сопротивление { -45,212.0 } , { -40,175.0 } , { -35,145.0 } , { -30,119.5 } , { -25,97.0 } , { -20,78.0 } , { -15,63.0 } , { -10,50.0 } , { -5,40.0 } , { 0,32.0 } , { 5,25.5 } , { 10,20.0 } , { 15,15.7 } , { 20,12.62 } , { 25,10.0 } , { 30,8.24 } , { 35,6.63 } , { 40,5.41 } , { 45,4.41 } , { 50,3.62 } , { 55,2.99 } , { 60,2.48 } , { 65,2.08 } , { 70,1.75 } , { 75,1.47 } , { 80,1.258 } , { 85,1.063 } , { 90,0.905 } , { 95,0.776 } , { 100,0.669 } , { 105,0.581 } , { 110,0.505 } , { 115,0.442 } , { 120,0.387 } , }; TermoRes3950::TermoRes3950(int pin) { _pin = pin; } double TermoRes3950::getTemp()//получение температуры { int t; t=0; for (int i=0; i <= 15; i++){ t = t + analogRead(_pin); } t=t/4; float R; R=getR(t); int i=0; while (addr[i][1] >R) { i++; } double result; result=(R-addr[i][1])*(addr[i-1][0]-addr[i][0])/(addr[i-1][1]-addr[i][1])+addr[i][0]; return result; } float TermoRes3950::getR(float V)//вычисление сопротивления { float result; result=-10*V/(V-4096);//10 сопротивление Ra //result=-10*V/(V-1024); return result; }
ну а чо, может какой лох поведется.... На ардуино.ру. кстати. можно найти ветку. где автору этой библиотеки помогали ее написать. Совершенно бесплатно помогали. там и ранние версии библиотеки есть. Но лучше самому написать, будет не хуже. чем у автора