#include <Servo.h> // подключение библиотеки управления серводвигателем
Servo servo1; // объявление объекта servo1
int temp; // переменная значений датчика температуры теплоносителя
const float BETA = 3950; // коэффициент для датчика температуры теплоносителя
#define Btn 2 // постоянная пина кнопки
int posServo1; // переменная положения серводвигателя
void setup() {
pinMode(Btn, INPUT_PULLUP); // пин 2 кнопка сброса угла поворота серводвигателя на 0°
pinMode(A0, INPUT); // пин А0 вход с датчика температуры теплоносителя
pinMode(11, OUTPUT); // пин 11 серводвигатель заслонки
servo1.attach(11); // привязка серводвигателя заслонки к пин 11
Serial.begin(9600); // подключение монитора порта
}
void loop() {
bool Btn_State = digitalRead(Btn); // считывание состояния кнопки
if (Btn_State == HIGH) { // если кнопка не нажата, то выполняется следующее условие
int temp = analogRead(A0); // чтение данных с датчика температуры теплоносителя
float celsius = 1 / (log(1 / (1023. / temp - 1)) / BETA + 1.0 / 298.15) - 273.15; // преобразование значений датчика температуры в градусы Цельсия
Serial.print("Температура теплоносителя: "); // вывод значения датчика температуры в монитор порта
Serial.print(celsius);
Serial.println(" ℃");
delay(500); // задержка 500 мс
temp = map(temp, 953, 115, 0, 90); // перевод значений датчика температуры теплоносителя в диапазон угла положения серводвигателя заслонки
servo1.write(temp); // поворот серводвигателя заслонки на полученный угол
Serial.print("Угол поворота заслонки: "); // вывод значения угла градуса поворота серводвигателя заслонки в монитор порта
Serial.print(temp);
Serial.println("°");
delay(500); // задержка 500 мс
}
if (Btn_State == LOW) { // если кнопка нажата, то выполняется следующее условие
posServo1 = 0; // сброс угла поворота серводвигателя заслонки на 0°
servo1.write(posServo1); // поворот серводвигателя заслонки в положение 0°
int temp = analogRead(A0); // чтение данных с датчика температуры теплоносителя
float celsius = 1 / (log(1 / (1023. / temp - 1)) / BETA + 1.0 / 298.15) - 273.15; // преобразование значений датчика температуры теплоносителя в градусы Цельсия
Serial.print("Температура теплоносителя: "); // вывод значения датчика температуры теплоносителя в монитор порта
Serial.print(celsius);
Serial.println(" ℃");
delay(500); // задержка 500 мс
temp = map(temp, 953, 115, 0, 90); // перевод значений датчика температуры теплоносителя в диапазон угла поворота серводвигателя заслонки
Serial.print("Угол поворота заслонки: "); // вывод значения угла градуса поворота серводвигателя заслонки в монитор порта
Serial.print(posServo1);
Serial.println("°");
delay(500);
}
}