#define HARDWARE_ID 0x00 // Sensor hardware ID
#define SOFTWARE_ID 0x400 // Sensor software ID
#define ANALOG_PIN A0 // Analog input pin
#define SERIAL_PORT_PIN 3 // S.port serial pin
#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"
/*https://viereck.ch/ntc/
Original Formula
float measuredVoltage = _value / maxValue * (maxVoltage - minVoltage) + minVoltage;
float _rNtc = measuredVoltage * R1 / (inputVoltage - measuredVoltage);
float temperature = 1 / (log(_rNtc / ntcR25) / ntcBeta + 1 / (273.15 + 25)) - 273.15;
*/
float inputVoltage = 5.0; //Input voltage
float R1 = 4.7; //Serial resistance, KOhm
float ntcR25 = 100; //Thermistor resistance, KOhm
float ntcBeta = 3950; //Thermistor Beta coefficient
float minVoltage = 0.000;
float maxVoltage = 5.000;
float maxValue = 1024;
float coefficientOne;
//float rNtc;
//int T1;
uint32_t tmr1; // переменная таймера
void setup() {
Serial.begin(9600);
pinMode(ANALOG_PIN, INPUT);
hub.registerSensor(sensor1); //Add sensor to the hub
hub.begin(); //Start listening
coefficientOne = 1 / maxValue * (maxVoltage - minVoltage);
//Serial.println("coefficientOne " + String(coefficientOne,8));
}
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()
{
//int _value = 0;
int _value = analogRead(ANALOG_PIN);
//Serial.println("ADC Output " + String(_value));
float measuredVoltage = _value * coefficientOne + minVoltage;
//Serial.println("Voltage " + String(measuredVoltage));
float _rNtc = measuredVoltage * R1 / (inputVoltage - measuredVoltage);
//Serial.println("_rNtc " + String(_rNtc));
int temperature = 1 / (log(_rNtc / ntcR25) / ntcBeta + 0.003354016) - 273.15;
//Serial.println("temperature " + String(temperature));
return temperature;
}