3 недели назад
Программирование, робототехника,ардуино,C++,создание блока управления звонками.
Помогите написать скетч для ардуино Уно,для автоматической подачи школьных звонков.В составе блока Ардуино Уно,часы реального времени дс1302,жк дисплей 1602, одноканальное реле 12Вольт 10Ампер
Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
#include <LiquidCrystal.h>
#include <DS1302.h>
// Пины для модуля DS1302
DS1302 rtc(4, 5, 6); // CLK, DAT, RST
// Пины для LCD 1602
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// Реле
const int relayPin = 3;
// Расписание звонков (часы, минуты, продолжительность в секундах)
const byte schedule[][3] = {
{8, 0, 15}, // Начало уроков
{8, 45, 10}, // Звонок на перемену
{9, 0, 15}, // Следующий урок
// Добавьте свои временные метки
};
// Текущее время
Time now;
void setup() {
// Инициализация LCD
lcd.begin(16, 2);
// Инициализация RTC
rtc.halt(false);
rtc.writeProtect(false);
// Установка времени при первом запуске (раскомментировать)
// rtc.setTime(12, 0, 0); // Час, минута, секунда
// rtc.setDate(1, 1, 2024); // День, месяц, год
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH); // Реле выключено
lcd.print("School Bell v1.0");
delay(2000);
lcd.clear();
}
void loop() {
now = rtc.getTime();
// Вывод времени на LCD
lcd.setCursor(0, 0);
lcd.print("Time: ");
if(now.hour < 10) lcd.print("0");
lcd.print(now.hour);
lcd.print(":");
if(now.min < 10) lcd.print("0");
lcd.print(now.min);
// Проверка расписания
for(byte i = 0; i < sizeof(schedule)/sizeof(schedule[0]); i++){
if(now.hour == schedule[i][0] &&
now.min == schedule[i][1] &&
now.sec < schedule[i][2]) {
activateBell(schedule[i][2]);
}
}
delay(500); // Задержка для стабильности
}
// Активация звонка
void activateBell(int duration) {
lcd.setCursor(0, 1);
lcd.print("Bell ACTIVE! ");
digitalWrite(relayPin, LOW); // Включаем реле
delay(duration * 1000);
digitalWrite(relayPin, HIGH); // Выключаем реле
lcd.setCursor(0, 1);
lcd.print(" ");
}
Схема подключения:
DS1302:
CLK → 4
DAT → 5
RST → 6
VCC → 5V
GND → GND
LCD 1602:
RS → 7
EN → 8
D4 → 9
D5 → 10
D6 → 11
D7 → 12
VCC → 5V
GND → GND
Реле:
IN → 3
VCC → 5V
GND → GND
COM → 220V звонок
NO → 220V звонок
Больше по теме