Вопрос по серво и коду к термистору

Ahriman
Offline
Зарегистрирован: 25.07.2019

Доброго дня, вопрос в следующем: нужно открывать заслонку по нажатию кнопки. Казалось бы простая конструкция, но если поместить код в функцию loop то при каждой итерации серво моторчик будет получать сигнал на открытие\закрытие, а как мне кажеться это не лучший вариант исполнения заслонки, подскажите как быть ?

Ещё, имееться код :

// GND --- термистор --- A0 --- 1к --- 5V
#define THERM A0            // к какому аналоговому пину мы подключены
#define RESIST_1K 1000    // точное сопротивление 10к резистора (Ом)
void setup() {
Serial.begin(9600);
//analogReference(EXTERNAL);
}
void loop() {
Serial.print("Temperature ");
Serial.print(getThermTemp(analogRead(THERM)));
Serial.println(" *C");
//delay(1000);
}
// цифры взяты из даташита
#define RESIST_BASE 1000   // сопротивление при TEMP_BASE градусах по Цельсию (Ом)
#define TEMP_BASE 25        // температура, при которой измерено RESIST_BASE (градусов Цельсия)
#define B_COEF 3435         // бета коэффициент термистора (3000-4000)
float getThermTemp(int resistance) {
float thermistor;
/*
Важно !!!
Для PTC термисторов thermistor = RESIST_1K / ((float)1023 / resistance - 1);
Для NTC термисторов thermistor = RESIST_1K * ((float)1023 / resistance - 1);
*/
thermistor = RESIST_1K * ((float)1023 / resistance - 1);
thermistor /= RESIST_BASE;                        // (R/Ro)
thermistor = log(thermistor) / B_COEF;            // 1/B * ln(R/Ro)
thermistor += (float)1.0 / (TEMP_BASE + 273.15);  // + (1/To)
thermistor = (float)1.0 / thermistor - 273.15;    // инвертируем и конвертируем в градусы по Цельсию
return thermistor;
}

Он получает от термистора сопротивление, высчитывает и выводит в консоль. Не могу понять с какой переменной в нём оперировать что бы производить отключение или выключение нагревательного элемента ?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не вижу в функции loop икакого сервомоторчика. Вы сначала попробуйте сами, а потом уж, если не получится, задавайте вопросы.

Кстати, я не знаю как именно у Вас подключён термистор (верхнее плечо или нижнее), и что там за термистор (PTC/NTC), но функция getThermTemp мне в любом случае сильно не нравится. С нею явно что-то не так. Ну, хотя бы потому, что при росте считанных с ADC значений она сначала растёт, а в самом конце (при максимальном значении с ADC) почему-то обваливается к абсолютному нулю. Так и задумано?