#include <Stepper.h>
#include <LiquidCrystal_I2C.h>
#define TEMP_SENSOR_PIN A0
#define DIR_PIN 2 // Пін напрямку
#define STEP_PIN 3 // Пін кроків
#define LED_PIN 13 // Пін для підключення світлодіода
#define BUZZER_PIN 4 // Пін для підключення динаміку
Stepper myStepper(200, 5, 3, 8, 2);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int tempThreshold = 25; // Порогове значення температури
int maxTemp = 30; // Максимальне значення температури
int previousTemp = 0; // Змінна для зберігання попередньої температури
const int stepsPerRevolution = 10000;
void setup() {
lcd.init();
lcd.backlight();
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
myStepper.setSpeed(120);
}
void loop() {
float temperature = readTemperature();
lcd.setCursor(0, 0);
lcd.print("Horchuk Kyrylo");
lcd.setCursor(0, 1);
lcd.print("temp: ");
lcd.print(temperature);
lcd.print(" C");
if (temperature >= tempThreshold) {
if (temperature > previousTemp) { // Запуск двигуна лише при
myStepper.step(400);
}
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 100, 250); // Динамік гратиме з частотою 100 Гц протягом 0,25 секунди
} else {
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN); // Вимикаємо бузер
}
previousTemp = temperature; // Зберігання поточної температури як попередньої
delay(0);
}
const float BETA = 3950; // повинно відповідати коефіцієнту Бета термістора
float readTemperature() {
int analogValue = analogRead(TEMP_SENSOR_PIN); // зчитуємо значення з датчика
float celsius = 1 / (log(1 / (1023.0 / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15; // конвертація в градуси Цельсія
return celsius;
}