Вопрос по серво и коду к термистору
- Войдите на сайт для отправки комментариев
Чт, 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) почему-то обваливается к абсолютному нулю. Так и задумано?