Рубрики
Схемы на Arduino

Часы реального времени с будильником на основе 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 <Wire.h>
#include<EEPROM.h>
#include <RTClib.h>
#include <LiquidCrystal.h>

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

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

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

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

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

Уважаемый админ, здравствуйте!
О предварительной проверке индикатора на отображение букв/цифр — не проверялся из-за банальной не компетенции.
Как это сделать? — подскажите пожалуйста.

Уважаемые компетентные люди, здравствуйте!
Собрал конструкцию часов согласно принципиальной схеме, скачал вышеизложенный скетч, проверил и скомпилировал скетч на Arduino v.1.8.19, в результате индикатор засветился с чётким отображением знакомест, но информации нет никакой. Подскажите первопроходцу в освоении нового направления: что необходимо предпринять следующими шагами, чтобы как-то приблизиться к первому результату?..
Буду признателен за любую помощь. С уважением, Николай.

А что вы понимаете под фразой «индикатор засветился с чётким отображением знакомест»? Вы проверяли может ли он у вас корректно отображать просто буквы/цифры?

Здравствуйте. У дисплеев LCD есть регулировка контрастности отображаемых символов потенциометром, крутить который нужно плавно, ибо если контрастность мала — символы не отображаются, а если контраста перебор, то отображаются в каждом знакоместе прямоугольники. Вам нужно найти промежуточное положение потенциометра, когда символы будут отображаться комфортно для глаз.
У LCD со встроенным модулем I2C этот потенциометр также встроен в плату.

Дополню. На приведённой схеме вместо резистора R3 нужно подключить потенциометр: к контакту 3 LCD — этот «вход предназначен для регулировки контрастности экрана, которая зависит от величины напряжения на входе, обычно для этих целей устанавливается переменный резистор сопротивлением 10-20 кОм, подключенный к линии питания. »
Источник: radiolaba.ru/microcotrollers/podklyuchenie-lcd-1602-po-i2c-interfeysu.html

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

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