Вопрос по серво и коду к термистору
- Войдите на сайт для отправки комментариев
Чт, 25/07/2019 - 11:03
Доброго дня, вопрос в следующем: нужно открывать заслонку по нажатию кнопки. Казалось бы простая конструкция, но если поместить код в функцию 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;
}
Он получает от термистора сопротивление, высчитывает и выводит в консоль. Не могу понять с какой переменной в нём оперировать что бы производить отключение или выключение нагревательного элемента ?
Не вижу в функции loop икакого сервомоторчика. Вы сначала попробуйте сами, а потом уж, если не получится, задавайте вопросы.
Кстати, я не знаю как именно у Вас подключён термистор (верхнее плечо или нижнее), и что там за термистор (PTC/NTC), но функция getThermTemp мне в любом случае сильно не нравится. С нею явно что-то не так. Ну, хотя бы потому, что при росте считанных с ADC значений она сначала растёт, а в самом конце (при максимальном значении с ADC) почему-то обваливается к абсолютному нулю. Так и задумано?