/*
Серводвигатель осуществляет поворот заслонки, которая регулирует интенсивность потока теплоносителя, в системе установлен датчик температуры. Обратная связь от датчика температуры используется для задания градуса открытия заслонки.
В эмуляторе Wokwi, используя микроконтроллер платы Arduino Uno:
Подключите и настройте работу сервопривода.
Движение привода должно осуществляться по информации от обратной связи
с аналогового датчика температуры NTC.
Градус поворота должен соответствовать значениям: -24°С — 0°, 80°С — 90°.
Проект нужно оснастить кнопкой, при нажатии на которую происходит
сброс угла поворота серводвигателя на 0°.
*/
#include <Servo.h>
Servo servo;
int btnPin = 2;
bool btnRst = false;
int pos = 0; // variable to store the servo position
int tempMin = -24;
int tempMax = 80;
//Определения для работы модуля температуры
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
int analogValue;
float celsius;
//переменные для отсчета времени
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 1000; // interval at which to blink (milliseconds)
int count = 0;
//предельные углы поворота сервопривода
int angleMax = 90;
int angleMin = 0;
void setup() {
Serial.begin(115200);
servo.attach(3);
pinMode(3, INPUT);
}
void loop() {
btnRst = digitalRead(btnPin);
analogValue = analogRead(A1);
celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
if (celsius >= tempMin && celsius <= tempMax && !btnRst)
{
servo.write(map(celsius, tempMin, tempMax, angleMin, angleMax));
}
else{
servo.write(0);
}
Serial.println(celsius);
}