/*
Серводвигатель осуществляет поворот заслонки, которая регулирует интенсивность потока теплоносителя, в системе установлен датчик температуры. Обратная связь от датчика температуры используется для задания градуса открытия заслонки.
В эмуляторе Wokwi, используя микроконтроллер платы Arduino Uno:
Подключите и настройте работу сервопривода.
Движение привода должно осуществляться по информации от обратной связи с аналогового датчика температуры NTC.
Градус поворота должен соответствовать значениям: -24°С — 0°, 80°С — 90°.
Проект нужно оснастить кнопкой, при нажатии на которую происходит сброс угла поворота серводвигателя на 0°.
*/
#include <Servo.h>
Servo myServo; // Создаем объект для управления сервоприводом
const int tempPin = A0; // Пин для температурного датчика
const int buttonPin = 2; // Пин для кнопки
int buttonState = 0;
const float BETA = 3950; // should match the Beta Coefficient of the thermistor https://wokwi.com/projects/299330254810382858
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Устанавливаем пин кнопки как вход с подтяжкой
myServo.attach(9); // Подключаем сервопривод к пину 9
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin); // Читаем состояние кнопки
if (buttonState == LOW) { // Если кнопка нажата
myServo.write(0); // Устанавливаем угол 0°
} else {
int tempValue = analogRead(tempPin); // Считываем значение с датчика температуры
float voltage = tempValue * 5.0 / 1023.0; // Преобразуем значение в напряжение
float resistance = (5.0 - voltage) * 10000 / voltage; // Рассчитываем сопротивление
//Расчитываем температуру по Целсию
float temperature = 1 / (log(1 / (1023. / tempValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Преобразуем температуру в угол поворота сервопривода
int servoAngle = map(temperature, -24, 80, 0, 90);
servoAngle = constrain(servoAngle, 0, 90); // Ограничиваем угол от 0 до 90°
myServo.write(servoAngle); // Устанавливаем угол поворота сервопривода
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" C, Servo Angle: ");
Serial.println(90);
}
delay(500); // Задержка для стабильности
}