Как сделать часы с будильником на ардуино

Урок 19. RTC часы с будильником

В предыдущем уроке 18, мы подключили Trema RTC часы реального времени с Trema кнопками и LCD I2C дисплеем к arduino Uno, написали скетч, для установки времени при помощи кнопок.

Теперь расширим функционал получившихся часов, добавив к ним функцию будильника. А код, который будет выполняться при срабатывании будильника выведем в отдельную функцию «Func_alarm_action()», чтоб Вы смогли легко его найти и изменить. Например, при срабатывании будильника, открывать жалюзи, включать свет или музыку, включить через реле тостер или кофе-машину и т.д.

Нам понадобится:

  • Arduino х 1шт.
  • RTC модуль Trema на базе чипа DS1307 х 1шт.
  • LCD дисплей LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) х 1шт.
  • Trema Shield х 1шт.
  • Trema-модуль i2C Hub х 1шт.
  • Trema-модуль кнопка c проводами х 3шт.
  • Шлейф «мама-мама»для шины I2С х 2шт.
  • Trema-модуль зуммер х 1шт.
  • Trema-модуль светодиод х 1шт. (белый, синий, красный, оранжевый или зелёный)

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека iarduino_RTC (для подключения RTC часов реального времени DS1302, DS1307, DS3231)
  • Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C)

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

Видео:

Схема подключения:

Подключение модулей RTC и LCD, данного урока, осуществляется к аппаратным выводам SDA, и SCL.

RTC модуль Trema на базе чипа DS1307 / LCD дисплей на базе чипа LCD1602 Arduino Uno
GND GND
Vcc +5V
SDA (Serial DAta) A4
SCL (Serial CLock) A5

Подключение кнопок: кнопка «SET» к выводу 2, кнопка «UP» к выводу 3 и копка «DOWN» к выводу 4.

Зуммер подключаем к выводу 5, а светодиод к выводу 13 (дублируя встроенный в arduino).

Алгоритм работы кнопок следующий:

  • В режиме вывода даты/времени/будильника (обычный режим):
    • Кратковременное нажатие на кнопку SET переключает режимы вывода: даты/времени/будильника
    • Удержание кнопки SET переводит часы в режим установки даты/времени/будильника (зависит от того, каким был режим вывода)
    • Кнопки UP и DOWN, в режиме вывода будильника, активируют/деактивируют будильник.
      Если будильник активен, то в правом верхнем углу экрана появляется значок будильника.
  • В режиме установки даты/времени/будильника:
    • Кратковременное нажатие на кнопку SET — переход между устанавливаемыми параметрами (сек, мин, час, дни, мес, год, д.н.)
    • Удержание кнопки SET выводит часы из режима установки
    • Каждое нажатие на кнопку UP увеличивает значение устанавливаемого параметра даты или времени
    • Каждое нажатие на кнопку DOWN уменьшает значение устанавливаемого параметра даты или времени
  • Во время работы сигнализации будильника:
    • Удержание любой кнопки в течении 1 секунды, отключает сигнализацию (без выполнения их действий, в любом режиме)

Код программы:

Работа кнопок, вывод и установка времени, описывались в уроке 18, в этом уроке рассмотрим работу будильника:

В начале кода добавляем две константы: PIN_alarm_TONE и PIN_alarm_LED, указывающие номера выводов зуммера и светодиода.
А также добавляем четыре переменные: VAR_alarm_MIN , VAR_alarm_HOUR , VAR_alarm_FLAG1 и VAR_alarm_FLAG2 .

  • VAR_alarm_MIN — переменная в которой хранится значение минут, при котором сработает будильник (по умолчанию 0 минут)
  • VAR_alarm_HOUR — переменная в которой хранится значение часов, при котором сработает будильник (по умолчанию 0 часов)
  • VAR_alarm_FLAG1 — флаг разрешения работы будильника, false — не активен, true — активен (по умолчанию true — активен)
  • VAR_alarm_FLAG2 — флаг указывающий на то, что будильник сработал «сигнализация» (по умолчанию false — не сработал)

Последняя переменная которую мы добавили — MAS_alarm_SYM, она содержит изображение символа будильника для вывода на дисплей.

В функции loop, после вывода информации на дисплей, добавляем проверку: не пора ли включить будильник?

  • если будильник включён (установлен флаг VAR_alarm_FLAG1)
  • если в текущем времени 0 секунд (time.seconds==00)
  • если количество минут текущего времени (time.minutes) равно количеству минут установленных в будильнике (VAR_alarm_MIN)
  • если количество часов текущего времени (time.Hours) равно количеству часов установленных в будильнике (VAR_alarm_HOUR)
    то устанавливаем флаг VAR_alarm_FLAG2 (указывающий на то, что будильник сработал)
  • если установлен флаг VAR_alarm_FLAG2, то запускаем действия будильника (действия описаны в функции Func_alarm_action)
    Так как проверка будильника и запуск функции Func_alarm_action() находится внутри условия if(millis()%1000==0)<. >, то действия будильника будут выполняться один раз в секунду.

Теперь всё готово для создания полного кода:

Разберемся в коде действий будильника:

Действия будильника описаны в функции Func_alarm_action().

В этой функции мы включаем светодиод, далее подаём три коротких звуковых сигнала (с частотой 2000Гц, длительностью и паузой 100мс), после чего выключаем светодиод.

Если Вам необходимо выполнить действие будильника однократно, а не каждую секунду после его срабатывания, то начните выполнение действий со сброса флага VAR_alarm_FLAG2, присвоив ему значение false.

Источник

Часы реального времени с будильником на основе Arduino

Рассматриваемые в данной статье часы реального времени на основе платы Arduino представляют собой цифровые часы, которые показывают реальное (истинное) время на основе использования RTC IC DS1307 (микросхема часов истинного времени), которая работает по протоколу I2C. Часы реального (истинного) времени означают что они будут работать (считать время) даже если возникнет проблема с электропитанием. Когда подача питания возобновится, часы будут показывать правильное (реальное) время независимо от того сколько времени они были без питания.

В этом проекте мы будем использовать ЖК дисплей 16×2 для отображения значения времени на нем в формате: час, минута, секунда, дата, месяц и год. Также в наш проект часов реального времени добавлена опция будильника – мы можем устанавливать время «пробуждения». Время будильника будет записываться в энергонезависимую память EEPROM платы Arduino, поэтому оно будет сохраняться там даже при отключении питания. Подобные часы реального времени часто используются в наших компьютерах чтобы они могли обновляться в режиме реального времени.

Протокол I2C является способом объединения двух или более устройств в единую систему при помощи двух проводников, поэтому этот протокол также называется двухпроводным протоколом. Его можно использовать для соединения до 127 устройств в единое устройство или процессор. Большинство устройств на основе протокола I2C работает на частоте 100 кГц.

Необходимые шаги для записи данных от ведущего (master) к ведомому (slave) в протоколе I2C (slave receiving mode — режим приема для ведомого):
1. Передать состояние (команду) START к ведомому.
2. Передать адрес ведомого к ведомому устройству.
3. Передать бит (0) к ведомому.
4. Принять бит ACK (подтверждения) от ведомого.
5. Передать адрес слова (words address) ведомому.
6. Принять бит ACK (подтверждения) от ведомого.
7. Передать данные ведомому.
8. Принять бит ACK (подтверждения) от ведомого.
9. Передать команду STOP ведомому.

Шаги для чтения данных от ведомого (slave) к ведущему (master) в протоколе I2C (slave transmitting mode – режим передачи для ведомого):
1. Передать команду START ведомому.
2. Передать адрес ведомого к ведомому устройству.
3. Передать бит чтения (1) к ведомому.
4. Принять бит ACK (подтверждения) от ведомого.
5. Принять данные отведомого.
6. Принять бит ACK (подтверждения) от ведомого.
7. Передать команду STOP ведомому.

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема построена на основе трех главных компонентов: микросхемы DS1307, платы Arduino Pro Mini и ЖК дисплея 16×2.

Плата Arduino используется для чтения времени от ds1307 и отображения его на ЖК дисплее 16×2. Микросхема DS1307 передает время/дату на Arduino используя 2 провода. Звонок (буззер) используется для подачи сигнала будильника. Структурная схема работы устройства приведена на следующем рисунке.

Как можно видеть из представленной схемы, контакты микросхемы DS1307 SDA и SCL соединены с контактами платы Arduino SDA и SCL с помощью подтягивающих резисторов которые поддерживают состояние высокого напряжения на этих линиях. Кварцевый генератор на 32.768 кГц подсоединен к микросхеме DS1307 для генерации точной 1-секундной задержки. Также батарейка на 3 В подсоединена к контакту 3 (BAT) микросхемы DS1307 чтобы обеспечивать подсчет времени во время отключения питания устройства.

ЖК дисплей 16×2 подключен к плате Arduino в 4-битном режиме. Его контакты управления RS, RW и En подключены к контактам Arduino 2, GND и 3. Контакты данных ЖК дисплея D0-D7 подключены к контактам 4, 5, 6, 7 платы Arduino. Звонок (буззер) подключен к контакту 13 Arduino при помощи NPN транзистора BC547 и резистора 1 кОм.

Три кнопки под названиями set, INC и Next используются для установки времени будильника и подключены к контактам 12, 11 и 10 платы Arduino. Когда мы будем нажимать кнопку set, будет включаться режим установки времени срабатывания будильника, в котором можно будет установить это время с помощью кнопок INC и Next.

Рассматриваемые часы реального времени с будильником на основе платы Arduino, собранные на макетной плате, показаны на следующем рисунке.

Исходный код программы

Для написания программы часов реального времени с будильником нам необходимо подключить ряд библиотек.

#include
#include
#include
#include

Затем в функции setup необходимо произвести инициализацию RTC (часов реального времени), ЖК дисплея, задать режимы работы ряда контактов.

Остальные необходимые функции, такие как считывание времени, установка времени срабатывания будильника и другие будут выполняться в функции void loop .

Источник

Arduino

Простой будильник на Arduino Uno

Пожалуй, самое простое и при этом полезное в быту, что можно создать на основе Arduino — это будильник.

Перед тем, как приступить, рекомендую ознакомиться со статьями по 7-секционным 4х символьным дисплеям и модулю часов реального времени DS1307, это поможет лучше понять код скетча, а также установить начальное время для модуля реального времени.

Кроме дисплея и модуля реального времени, для будильника будем использовать пьезоизлучатель (спикер), две кнопки, подключенные через резисторы и собственно «мозг» часов — плату Arduino Uno. Заказать все элементы можно по ссылкам внизу статьи или в каталоге, общая стоимость достаточно небольшая.

Схема подключения следующая:

Никаких тонкостей и сложностей подключение вызвать не должно, но не забудьте перепроверить еще раз, что все элементы соединены правильно. Ошибка в подключении может привести к выходу из строя платы. Кнопки, как мы видим, подключены через резисторы (20 кОм). Сделано это для того, чтобы при не нажатой кнопке с соответствующего пина всегда приходило значение LOW .

Все управление будильником производится двумя кнопками, при этом оно сделано максимально простым и удобным, и что-то перепутать и сломать при использовании просто невозможно. При нажатии на первую кнопку (подключена к цифровому пину 7), мы входим в режим установки времени, на индикаторе начинают мигать часы. Второй кнопкой (пин 8) мы меняем значение часов по кругу. После этого нажимаем кнопку 1 и переходим к установке минут, которые настраиваем точно так же. Далее по последнему нажатию на кнопку 1 происходит выход из режима настройки часов.

Время срабатывания будильника устанавливается почти также, только для запуска установки будильника нужно нажать кнопку 2, а часы и минуты устанавливать уже кнопкой 1. Перепутать кнопки довольно сложно: при установке будильника горит двоеточие, а при установке часов — нет. Также при установке будильника в качестве значения часов и минут можно задать прочерк, означающий, что будильник отключен.

Для работы скетча вам потребуется установить библиотеки: TM1637, DS1307RTC и Time. Сделать это можно через менеджер библиотек как в Arduino IDE, так и в PlatformIO.

Исходный код скетча можно скачать на странице github.

Корпус можно сделать любой, на что хватит фантазии: строгий или, наоборот, забавный. Для него можно взять готовую 3D-модель и подправить ее, либо сделать все с нуля:

  • Arduino Uno: 123
  • 7-сегментный дисплей: 123
  • модуль часов реального времени: 123
  • батарейки CR2032: 12
  • пьезоизлучатель: 123
  • кнопки: 123
  • резисторы: 123
  • макетная плата: 123
  • провода: 123

Источник

Ардуино — будильник

В статье рассказано о том, как из ардуины и дисплея TM1637 сделать часы-будильник, управляемый при помощи любого ИК-пульта.

С помощью пульта можно будет программировать время и будильник, включать/отключать будильник и устанавливать отсрочку сигнала. То есть делать всё не вставая с дивана.

Так же будут рассмотрены варианты получения времени.

Что понадобится

Ардуина

Дисплей TM1637

Два светодиода — красный и зелёный . Красный будет гореть когда включён будильник, а зелёный будет зажигаться при переключении в режим установки будильника.

Пищалка (buzzer)


Можно не покупать, а выдрать откуда-либо.

ИК-приёмникнаиболее предпочтительный вариант — TSOPxx38 (38kHz).


Во втором варианте потребуется модуль часов DS 3231.

В начале вариант для тех, кто хочет просто подключить/проверить дисплей.

Подключаем всё по следующей схеме:

Скачиваем и устанавливаем библиотеку для дисплея TM1637.

Если всё работает, то переходим к следующему этапу. Добавим к схеме светики, пищалку и ик-приёмник…

У Вас может быть другая распиновка ик-приёмника. Резисторы 300-1000 ом.

Сначала залейте скетч для обнуления EEPROM…

Теперь я (немного забегая вперёд) опишу алгоритм, а после перейдём к программированию пульта.

Инструкция и как работает

Установите время на часах. Нажмите кнопку перехода в режим будильника (загорится зелёный светик и на дисплее будет отображаться будильник) и установите нужное время. Нажмите кнопку включения будильника (загорится красный светик).
Чтоб вернуться в режим часов нужно снова нажать ту же кнопку. Если не возвращаться в режим часов, то через минуту это произойдёт автоматически.

Сигнал будильника будет воспроизводиться в течении минуты, после этого будет десятиминутная пауза и снова сигнал в течении минуты. Так будет происходить до тех пор, пока будильник не будет выключен. Если во время воспроизведения сигнала нажать кнопку отсрочки, то звук выключится, а время будильника переведётся на десять минут вперёд.
То есть в момент пробуждения у вас будет два варианта — нажать кнопку отключения будильника и вылезать из тряпок, либо нажать кнопку отсрочки и поваляться ещё 10 минут.

После нажатия кнопки отключения будильника установленное время вернётся к изначальному значению. То есть, вы встаёте в 7:00 утра, будильник зазвенел, вы нажали отсрочку, будильник перевёлся на 7:10, зазвенел, вы таки встали, отключили будильник — будильник вернулся на 7:00.

В момент нажатия отсрочки появляется индикация будильника.

Время будильника, его состояние (включён/отключён) и уровень яркости дисплея сохраняются в энергонезависимой памяти.

Нажатия на кнопки сопровождаются звуковым сигналом.

Программирование пульта

Возьмите какой-нибудь пульт, например от телевизора, выберите на нём несколько кнопок (у большинства пультов есть незадействованные кнопки), которыми будете управлять часами/будильником.

Нужно выбрать кнопки, которыми вы будете устанавливать время на часах (прибавлять/убавлять часы и минуты, четыре кнопки). Кнопки для установки будильника — прибавлять/убавлять часы и минуты будильника (четыре кнопки). Кнопка включения/отключения будильника (одна кнопка). Кнопка отсрочки будильника на 10 минут (одна кнопка) и кнопка перехода в режим установки будильника (одна кнопка). Кнопки для регулировки яркости (две штуки).

Заполучим коды кнопок. Откройте «Монитор последовательного порта», и нажмите на пульте кнопку, которой планируете устанавливать время — прибавлять часы:


Нажатия должны быть короткими. Иногда печатаются сразу два числа, первое число это код кнопки (то, что нам нужно), а второе это код повтора (он нам не интересен).

Скопируйте это число и вставьте в скетч:

Повторяем процедуру для кнопки убавления часов:

Вставляем в скетч:

Проделываем всё то же самое для остальных кнопок. В скетче есть комментарии.

И в конце комментируем или удаляем строку…

Заливаем скетч, и в принципе можно пользоваться. Однако такой способ подсчёта времени не выдерживает никакой критики, поэтому предложу пару вариантов. Первый — это использование модуля DS3231 (очень точный и стабильный), а второй — это ежесуточная коррекция времени от большого компьютера. Начну с последнего.

Сразу же скажу, что второй вариант подходит тем, у кого есть компьютер с линуксом или роутер с альтернативной прошивкой.

Синхронизация от компьютера

Идея заключается в следующем, часы подключены (USB, UART) к компьютеру с запущенной на нём программой, которая «слушает» USB-порт в ожидании запроса от часов. Ровно в 00:00:10 часы отправляют запрос компьютеру, а тот в ответ отсылает часам своё системное время.

Добавим в скетч необходимый функционал. Там где счётчик времени добавим блок отвечающий за запрос…

И в конец основного цикла добавим блок отвечающий за приём:

Не забудьте про коды кнопок пульта.

Далее скачиваем программу chasikom, кладём её в домашнюю папку, подключаем часы к компу и запускаем:

У вас будет свой юзер и возможно другое устройство (/dev/ttyUSB0). Проверить можно так:

Через десять секунд установится точное время.

Если нужна прога для какого-либо роутера, тогда напишите в комментах.

Вариант с DS3231

Добавляем в схему модуль:

Скачиваем и устанавливаем библиотеку DS3231, заливаем новый скетч:

Не забывайте про коды кнопок пульта.

Библиотека для DS3231 написана так, что если отсоединить модуль, то программа зависнет в ожидании ответа от модуля.

Теперь возьмите пульт, выставите время (в этом скетче нет коррекции от большого компьютера) и передёрните ардуине питание. Если всё работает правильно, то на часах будет текущее время.

Ну и наконец скетч для работы с модулем часов и коррекцией времени:

На этом пожалуй всё.

Вступайте в Telegram-группу Arduino

Источник

Adblock
detector