#define HARDWARE_ID 0x00 // Sensor hardware ID
#define SOFTWARE_ID 0x400 // Sensor software ID
#define SERIAL_PORT_PIN 3 // S.port serial pin
#define ANALOG_PIN A0 // Пин входа термистора
#define RESISTOR_R1 4.7 // Сопротивление последовательного резистора, кОм (Резистор подключать к Vcc платы, референсное напряжение = Vcc)
#define NTC_R25 100 // Сопротивление термистора при 25 градусах Цельсия
#define NTC_BETA 3950 // Коэффициент Beta термистора
#define MY_PERIOD 1000 // период опроса термистора, мс
#include <SPort.h> //Include the SPort library
SPortHub hub(HARDWARE_ID, SERIAL_PORT_PIN); //Configure HUB with "HARDWARE_ID" and "SERIAL_PORT_PIN"
SimpleSPortSensor sensor1(SOFTWARE_ID); //Configure Sensor with "Sensor software ID"
uint32_t tmr1 = 0; // переменная таймера
void setup() {
Serial.begin(9600);
pinMode(ANALOG_PIN, INPUT);
hub.registerSensor(sensor1); //Add sensor to the hub
hub.begin(); //Start listening
}
void loop() {
hub.handle(); //Handle new data
if (millis() - tmr1 >= MY_PERIOD) { // Цикл опроса термистора
tmr1 = millis(); // сброс таймера
sensor1.value = GetTemperature();
//Serial.println("Calculated Temperature " + String(sensor1.value));
}
}
float GetTemperature()
{
/*Взято отсюда
https://alexgyver.ru/arduino-algorithms/
Смотри раздел "Термистор Термистор (уравнение Стейнхарта-Харта)"
*/
int _value = analogRead(ANALOG_PIN);
//Serial.println("ADC Output " + String(_value));
float _temperature;
_temperature = RESISTOR_R1 / ((float)1023 / _value - 1);
_temperature /= NTC_R25; // (R/Ro)
_temperature = log(_temperature) / NTC_BETA; // 1/B * ln(R/Ro)
_temperature += (float)1.0 / (25 + 273.15); // + (1/To)
_temperature = (float)1.0 / _temperature - 273.15; // инвертируем и конвертируем в градусы по Цельсию
return _temperature;
}