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


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

ЖК дисплей устройства с информацией о реальных времени и дате

В этом проекте мы будем использовать ЖК дисплей 16x2 для отображения значения времени на нем в формате: час, минута, секунда, дата, месяц и год. Также в наш проект часов реального времени добавлена опция будильника – мы можем устанавливать время "пробуждения". Время будильника будет записываться в энергонезависимую память 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 ведомому.

Работа схемы

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

Схема часов реального времени с будильником на основе Arduino

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

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

Структурная схема часов реального времени с будильником на основе Arduino

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

ЖК дисплей 16x2 подключен к плате 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 <Wire.h>
#include<EEPROM.h>
#include <RTClib.h>
#include <LiquidCrystal.h>

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

Код программы для инициализации часов реального времени и ЖК дисплея

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

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

Далее представлен полный текст программы.

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
9 447 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *