Top.Mail.Ru
Ответы

Программирование, робототехника,ардуино,C++,создание блока управления звонками.

Помогите написать скетч для ардуино Уно,для автоматической подачи школьных звонков.В составе блока Ардуино Уно,часы реального времени дс1302,жк дисплей 1602, одноканальное реле 12Вольт 10Ампер

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Мастер
3нед
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 звонок