Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Простой будильник с DS1302 RTC

Компоненты и расходные материалы

Часы реального времени (RTC)
× 1
Зуммер
× 1
Стандартный ЖК-экран Adafruit - 16x2, белый на синем
× 1
Arduino UNO
× 1

Об этом проекте

Всем привет, в этом проекте мы попробуем сделать простой будильник на плате Arduino UNO. Этот проект представляет собой смесь различных модулей, которые я использовал раньше. Если вы застряли в чем-то, вы можете проверить на веб-сайте учебник по модулю, потому что я обычно работаю именно так:делайте что-то отдельно, а затем начинайте смешивать. :D

Для этого проекта нам понадобятся:

  • Плата Arduino UNO, или вы можете использовать то, что вам подходит:
  • Модуль DS1302 RTC:
  • Модуль матричной клавиатуры 4 * 4:
  • ЖК-экран I2C:
  • Модуль зуммера или зуммер с 2 контактами:

Если вы в чем-то застряли, можете проверить эти предыдущие руководства по модулям, указанным выше:

Как настроить модуль DS1302 RTC с клавиатурой + Arduino + ЖК-дисплеем

Как просто использовать модуль DS1302 RTC с платой Arduino и ЖК-экраном

Arduino LCD I2C простое использование и прямая запись с последовательного монитора; Arduino LCD I2C простое использование и прямая запись с последовательного монитора

Arduino uno + матрица клавиатуры 4 × 4 + ЖК-экран i2c

Как использовать зуммер / пьезо-динамик с Arduino

Электропроводка:

Библиотеки и код:

Библиотека LCD i2c. Вы можете выбрать ее или загрузить свою.

Библиотека клавиатуры Или вы можете загрузить ее из Arduino IDE

Библиотека virtuabotix RTC DS1302

Код:

Загрузить код

Функционирование кода довольно простое:после подключения модуля вы можете нажать «*», чтобы установить время и дату на DS1302 RTC, дисплей покажет текущий день и время, если вы хотите установить будильник, нажмите «A» и вы можете установить часы и минуты, и вы можете отключить их, нажав «B» перед временем или нажав любую кнопку во время звонка.

Надеюсь, вам понравится, по любым вопросам вы можете связаться со мной.

Код

  • RTC_alarm_clock_LCD.ino
RTC_alarm_clock_LCD.ino Arduino
Работает с UNO + RTC DS1302 + LCD i2c + 4x4 клавиатурой
(Основные изменения внесены 12.04.18 для решения некоторых проблем)
 // Этот код предназначен для использования с модулем DS1302 RTC + 4 * 4 клавиатуры + ЖК-дисплей i2c + Arduino + зуммер // После подключения модулей ЖК-дисплей будет показывать дату и время по умолчанию или те, которые были установлены до // Цель этого проекта состоит в том, чтобы вы могли установить модуль RTC с клавиатуры и убедиться, что он останется сохраненным // Затем покажите его на экране и после того, как вы сможете установить свой тревога .// Обратитесь к Surtrtech.com или SurtrTech канал YouTube для получения дополнительной информации # include  // Необходимые библиотеки # include  #include  #include  #define I2C_ADDR 0x27 // материал LCD i2c # определить BACKLIGHT_PIN 3 # определить En_pin 2 # определить Rw_pin 1 # определить Rs_pin 0 # определить D4_pin 4 # определить D5_pin 5 # определить D6_pin 6 # определить D7_pin 7L LiquidCrystal_I2C lcd (I2C_ADDR_ En_pin, Rs_pin , D5_pin, D6_pin, D7_pin); virtuabotixRTC myRTC (2, 3, 4); // Подключение RTC (CLK, DAT, RST) // Если вы измените подключение, измените контакты здесь alsoconst byte numRows =4; // количество строк на клавиатуреconst byte numCols =4; // количество столбцов на клавиатуре. A '}, {' 4 ',' 5 ',' 6 ',' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins [numRows] ={12,11,10,9}; // Строки с 0 по 3 // если вы изменяете свои пины, вы должны изменить этот слишком байт colPins [numCols] ={8,7,6,5}; // Столбцы от 0 до 3 int i1, i2, i3, i4; char c1, c2, c3, c4; char keypressed, keypressedx; int A_hour =NULL; int A_minute =NULL; int AlarmIsActive =NULL; int buzzer =13; Keypad myKeypad =Клавиатура (makeKeymap (раскладка клавиатуры), rowPins, colPins, numRows, numCols); void setup () {Serial.begin (9600); lcd.begin (16,2); // Инициализируем ЖК-дисплей lcd.setBacklightPin (BACKLIGHT_PIN, POSITIVE); lcd.setBacklight (ВЫСОКИЙ); lcd.home (); } void loop () {while (keypressed ==NO_KEY) {// Пока не нажата никакая клавиша, мы продолжаем показывать дату и время, я обязан каждый раз очищать экран, чтобы числа не путались // И я должен добавить эту небольшую задержку, чтобы экран отображался правильно, иначе это не сработало для меня keypressed =myKeypad.getKey (); lcd.clear (); // Здесь после очистки ЖК-дисплея мы берем время из модуля и выводим его на экран обычными функциями ЖК-дисплея myRTC.updateTime (); if (myRTC.hours ==A_hour &&myRTC.minutes ==A_minute &&AlarmIsActive ==1 &&myRTC.seconds> =0 &&myRTC.seconds <=2) {while (keypressedx ==NO_KEY) {tone (buzzer, 1000); // Вы можете изменить тон или сделать свою собственную задержку звука (100); тон (зуммер, 2000); задержка (100); lcd.clear (); lcd.print («Вставай !!!»); // Сообщение для отображения при срабатывании будильника keypressedx =myKeypad.getKey (); }} keypressedx =NO_KEY; noTone (зуммер); lcd.setCursor (0,0); lcd.print (myRTC.dayofmonth); lcd.print ("/"); lcd.print (myRTC.month); lcd.print ("/"); lcd.print (myRTC.year); lcd.setCursor (0,1); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC.minutes); lcd.print (":"); lcd.print (myRTC.seconds); задержка (100); } if (keypressed =='*') // Поскольку мы каждый раз проверяем нажатую клавишу, мы приступаем к настройке только после нажатия «*» {lcd.clear (); lcd.print («Настройка»); задержка (1000); lcd.clear (); lcd.print («Год установки»); // Итак, вы можете понять, как это работает, сначала он показывает нам «установку», затем печатает «год установки», и теперь вы можете записать свой год в обычном режиме (2-0-1-8) // Он автоматически переходит к настройке месяц ... пока он не закончится // Все клавиши клавиатуры считаются символами (c), поэтому мы должны преобразовать их в int, что я сделал, затем мы сохраняем их (i) // Мы делаем некоторые математические вычисления и получаем год, month ... как int, чтобы мы могли ввести их в RTC, иначе он не будет скомпилирован // Месяцы, такие как апрель, вы должны написать 04, 03 для марта ... иначе он не перейдет к следующему параметру // RTC virtuabotix библиотека уже настроена так, чтобы не принимать странные время и даты (45/17/1990) (58:90:70), и да, старые даты считаются ошибками char keypressed2 =myKeypad.waitForKey (); if (keypressed2! =NO_KEY &&keypressed2! ='*' &&keypressed2! ='#' &&keypressed2! ='A' &&keypressed2! ='B' &&keypressed2! ='C' &&keypressed2! ='D') { c1 =нажатие клавиши 2; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed3 =myKeypad.waitForKey (); if (keypressed3! =NO_KEY &&keypressed3! ='*' &&keypressed3! ='#' &&keypressed3! ='A' &&keypressed3! ='B' &&keypressed3! ='C' &&keypressed3! ='D') { c2 =нажатие клавиши 3; lcd.setCursor (1, 1); lcd.print (c2); } char keypressed4 =myKeypad.waitForKey (); if (keypressed4! =NO_KEY &&keypressed4! ='*' &&keypressed4! ='#' &&keypressed4! ='A' &&keypressed4! ='B' &&keypressed4! ='C' &&keypressed4! ='D') { c3 =keypressed4; lcd.setCursor (2, 1); lcd.print (c3); } char keypressed5 =myKeypad.waitForKey (); if (keypressed5! =NO_KEY &&keypressed5! ='*' &&keypressed5! ='#' &&keypressed5! ='A' &&keypressed5! ='B' &&keypressed5! ='C' &&keypressed5! ='D') { c4 =нажатие клавиши 5; lcd.setCursor (3, 1); lcd.print (c4); } i1 =(c1-48) * 1000; // нажатые клавиши сохраняются в символы. Я конвертирую их в int, затем я произвел некоторое умножение, чтобы получить код как int xxxx i2 =(c2-48) * 100; i3 =(c3-48) * 10; i4 =c4-48; int N_year =i1 + i2 + i3 + i4; задержка (500); lcd.clear (); lcd.print («Месяц установки»); //////////////////////////////////////// //////////////////////// char keypressed6 =myKeypad.waitForKey (); // здесь все программы останавливаются, пока вы не введете четыре цифры, затем он сравнивается с кодом выше if (keypressed6! =NO_KEY &&keypressed6! ='*' &&keypressed6! ='#' &&keypressed6! ='A' &&keypressed6 ! ='B' &&keypressed6! ='C' &&keypressed6! ='D') {c1 =keypressed6; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed7 =myKeypad.waitForKey (); if (keypressed7! =NO_KEY &&keypressed7! ='*' &&keypressed7! ='#' &&keypressed7! ='A' &&keypressed7! ='B' &&keypressed7! ='C' &&keypressed7! ='D') { c2 =keypressed7; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_month =i1 + i2; задержка (500); lcd.clear (); lcd.print («День установки»); ////////////////////////////////////////////////// ////////////// char keypressed8 =myKeypad.waitForKey (); // здесь все программы останавливаются, пока вы не введете четыре цифры, затем он сравнивается с кодом выше if (keypressed8! =NO_KEY &&keypressed8! ='*' &&keypressed8! ='#' &&keypressed8! ='A' &&keypressed8 ! ='B' &&keypressed8! ='C' &&keypressed8! ='D') {c1 =keypressed8; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed9 =myKeypad.waitForKey (); if (keypressed9! =NO_KEY &&keypressed9! ='*' &&keypressed9! ='#' &&keypressed9! ='A' &&keypressed9! ='B' &&keypressed9! ='C' &&keypressed9! ='D') { c2 =keypressed9; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_day =i1 + i2; задержка (500); lcd.clear (); lcd.print ("Настроить час"); //////////////////////////////////////// ////////////////////////////////////////////:char keypressed10 =myKeypad. waitForKey (); // здесь все программы останавливаются, пока вы не введете четыре цифры, затем он сравнивается с кодом выше if (keypressed10! =NO_KEY &&keypressed10! ='*' &&keypressed10! ='#' &&keypressed10! ='A' &&keypressed10 ! ='B' &&keypressed10! ='C' &&keypressed10! ='D') {c1 =keypressed10; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed11 =myKeypad.waitForKey (); if (keypressed11! =NO_KEY &&keypressed11! ='*' &&keypressed11! ='#' &&keypressed11! ='A' &&keypressed11! ='B' &&keypressed11! ='C' &&keypressed11! ='D') { c2 =keypressed11; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_hour =i1 + i2; задержка (500); lcd.clear (); lcd.print («Протокол настройки»); //////////////////////////////////////// ////////////////////////////////////////////:char keypressed12 =myKeypad. waitForKey (); // здесь все программы останавливаются, пока вы не введете четыре цифры, затем он сравнивается с кодом выше if (keypressed12! =NO_KEY &&keypressed12! ='*' &&keypressed12! ='#' &&keypressed12! ='A' &&keypressed12 ! ='B' &&keypressed12! ='C' &&keypressed12! ='D') {c1 =keypressed12; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed13 =myKeypad.waitForKey (); if (keypressed13! =NO_KEY &&keypressed13! ='*' &&keypressed13! ='#' &&keypressed13! ='A' &&keypressed13! ='B' &&keypressed13! ='C' &&keypressed13! ='D') { c2 =клавиша 13; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_minutes =i1 + i2; задержка (500); lcd.clear (); myRTC.setDS1302Time (22, N_minutes, N_hour, 1, N_day, N_month, N_year); // как только мы закончим установку даты и времени, мы передаем значения в модуль RTC // 22 означает секунды, вы также можете добавить настройку для него, если хотите // 1 означает день недели, так как долго не показываю на экране не меняю keypressed =NO_KEY; // ключ "*" хранится в "keypressed", поэтому я удаляю из него это значение, иначе я снова попаду в настройку} ////////////////////// ///////////////////// Настройка сигналов тревоги /////////////////////////// ////// if (keypressed =='A') {lcd.clear (); lcd.print («Настройка сигнализации»); задержка (1000); lcd.clear (); lcd.print («Установить будильник»); char keypressed14 =myKeypad.waitForKey (); // здесь все программы останавливаются, пока вы не введете четыре цифры, затем он сравнивается с кодом выше if (keypressed14! =NO_KEY &&keypressed14! ='*' &&keypressed14! ='#' &&keypressed14! ='A' &&keypressed14 ! ='B' &&keypressed14! ='C' &&keypressed14! ='D') {c1 =keypressed14; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed15 =myKeypad.waitForKey (); if (keypressed15! =NO_KEY &&keypressed15! ='*' &&keypressed15! ='#' &&keypressed15! ='A' &&keypressed15! ='B' &&keypressed15! ='C' &&keypressed15! ='D') { c2 =клавиша 15; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; A_hour =i1 + i2; задержка (500); lcd.clear (); lcd.print («Установить минуты будильника»); char keypressed16 =myKeypad.waitForKey (); // здесь все программы останавливаются, пока вы не введете четыре цифры, затем он сравнивается с кодом выше if (keypressed16! =NO_KEY &&keypressed16! ='*' &&keypressed16! ='#' &&keypressed16! ='A' &&keypressed16 ! ='B' &&keypressed16! ='C' &&keypressed16! ='D') {c1 =keypressed16; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed17 =myKeypad.waitForKey (); if (keypressed17! =NO_KEY &&keypressed17! ='*' &&keypressed17! ='#' &&keypressed17! ='A' &&keypressed17! ='B' &&keypressed17! ='C' &&keypressed17! ='D') { c2 =keypressed17; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; A_minute =i1 + i2; задержка (500); lcd.clear (); AlarmIsActive =1; keypressed =NO_KEY; } если (нажатие клавиши =='B') {lcd.clear (); lcd.print («Тревога отключена»); AlarmIsActive =0; keypressed =NO_KEY; задержка (500); } еще {myRTC.updateTime (); keypressed =NO_KEY; }} 

Схема


Производственный процесс

  1. ЖК-панель с Arduino для симулятора полета
  2. Часы видения Arduino pov
  3. Самодельные простейшие часы Numitron IV9 с Arduino
  4. Простые часы со словами (Arduino)
  5. Часы Arduino с исламским временем молитв
  6. Основные часы
  7. Arduino Temp. Монитор и часы реального времени с дисплеем 3.2
  8. Простой датчик препятствий с Arduino
  9. Цифровые часы TM1637 с функцией настройки времени и будильника
  10. Отображение изображения на ЖК-экране TFT с помощью Arduino UNO!