/*Серводвигатель осуществляет поворот заслонки, которая регулирует интенсивность потока теплоносителя, в системе установлен датчик температуры. Обратная связь от датчика температуры используется для задания градуса открытия заслонки.
В эмуляторе Wokwi, используя микроконтроллер платы Arduino Uno:
Подключите и настройте работу сервопривода.
Движение привода должно осуществляться по информации от обратной связи с аналогового датчика температуры NTC.
Градус поворота должен соответствовать значениям: -24°С — 0°, 80°С — 90°.
Проект нужно оснастить кнопкой, при нажатии на которую происходит сброс угла поворота серводвигателя на 0°.
*/
#include <Servo.h> // подключаем библиотеку сервопривода
Servo servo1; // создаем объект сервопривода
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
#include "SevSeg.h"
SevSeg sevseg1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(3, OUTPUT);
servo1.attach(3);
pinMode(12, INPUT_PULLUP); //вход кнопки.
byte numDigits = 2;
byte digitPins[] = {2, 4};
byte segmentPins[] = {5, 6, 7, 8, 9, 10, 11};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_ANODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = true; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = true; // Use 'true' if your decimal point doesn't exist or isn't connected
sevseg1.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg1.setBrightness(90);
}
void loop() {
// put your main code here, to run repeatedly:
int analogValue = analogRead(A0);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
analogValue = map(celsius, -24, 80, 0, 90); // переводим цельсии в градус поворота
// кнопка сброса угла поворота серводвигателя на 0°
if (!digitalRead(12) == HIGH) {
analogValue = 0;
}
servo1.write(analogValue); //передаём значение угла на привод
//delay(500);
sevseg1.setNumber(analogValue); // передаем значение на индикатор
sevseg1.refreshDisplay();
}