Цифровые часы Arduino
Спроектировать и собрать электронные часы не так просто, как может показаться на первый взгляд.
Помимо подключения энергонезависимого модуля часов реального времени, необходимо продумать как задавать текущее время. В нашем примере часы и минуты настраиваются с помощью четырёхкнопочного модуля: верхний ряд добавляет значения, нижний — уменьшает.
Что потребуется
Полный сет компонентов проекта. В сет входят:
Видеоинструкция
Как собрать
Установите Troyka Slot Shield на Iskra Neo
Возьмите часы реального времени и вставьте в средний верхний слот. Вставьте батарейку CR1225 в держатель на лицевой панели модуля.
Переверните Quad Display на 180 градусов и вставьте в центральный и правый слоты нижнего ряда.
Поверните четырёхкнопочную клавиатуру на 90 градусов против часовой стрелки и вставьте в правый верхний слот.
Если у вас старый модуль семисегментного индикатора (у него всего три ноги и расположены они слева), схема сборки устройства, скетч и библиотеки будут отличаться. Мы выложили их ниже, в ответах на часто задаваемые вопросы .
Скетч
Прошейте контроллер скетчем через Arduino IDE.
Что дальше?
Хотите собрать другой девайс? Выберите своё будущее устройство из списка проектов на Slot Shield.
OLED часы на arduino
На днях я решил создать часы на arduino с отображением времени, текущей даты, дня недели и температуры воздуха на OLED дисплее. Что из этого получилось смотрите на видео.
Список необходимых компонентов:
- Часовой модуль DS1307 – 1 шт.
- Датчик температуры DS18B20 – 1 шт.
- OLED I2C дисплей 0.96″ – 1 шт. – 1 шт.
- DS1307
- OneWire
- OLED I2C RUS

и загружаем первый пробный скетч для проверки работоспособности дисплея и часового модуля
после загрузки скетча у нас на дисплее отобразятся часы как на фото

Как видим все отображается нормально, но что бы добавить русские названия дней недели нам потребуется инициализировать русские шрифты добавив строку в скетч
и еще добавить строки которые помогут нам определить порядковый номер дня недели и отобразить название дня на русском языке.
и еще закомментируем строки
что бы при повторной загрузке скетча не устанавливать заново время. После этого день недели на нашем дисплее отобразится на русском языке.

теперь изменим отображения месяца, добавив в скетч строки
Теперь наши часики будут выглядеть как на фото.

Для тех, кому было лень править скетч, ниже есть готовый скетч.
Ну а теперь, еще более усовершенствуем наши OLED часы и добавим к ним отображение температуры, которую мы будем считывать с датчика температуры DS18B20.
Для отображения рисунка с градусником на OLED дисплее и значка градуса выберем картинку с рисунком градусника и с помощью графического редактора сохраним ее в формате GIF с именем term.gif, и тоже самое проделаем с картинкой с значком градуса — сохраним ее как grad.gif.
У меня картинка term.bmp имеет размеры 19×40 пикселей, а картинка grad.bmp 13×12 пикселей. Потом нам потребуется конвертировать две картинки с помощью онлайн-сервиса www.rinkydinkelectronics.com

выбираем наш файл изображения и жмем Make File

Жмем на Click here to download your file и сохраняем файл grad.c в папку с нашим скетчем, тоже самое проделываем с другим изображением. Сохраняем и закрываем скетч. При повторном открытии он будет иметь еще две вкладки с файлами изображений.

После этого добавим две строки в скетч, которые инициализируют наши файлы изображений
а потом отобразим наши изображения на экране OLED дисплея, добавив строки
Добавим в наш скетч на два цикла. В первом цикле у нас будет отображаться время – назовем его void watch(); Второй цикл будет считывать и отображать температуру void temp();
А в основном цикле void loop(); пропишем для ротации циклов несколько строчек кода
В цикле void temp(); пропишем кусочек кода для считывания и отображения температуры
В цикле void watch(); пропишем наш код, который отвечает за отображение времени
После заливки скетча, наши OLED часы сначала должны отображать время, а потом температуру как на видео в начале статьи.
Урок 19. RTC часы с будильником

В предыдущем уроке 18, мы подключили Trema RTC часы реального времени с Trema кнопками и LCD I2C дисплеем к arduino Uno, написали скетч, для установки времени при помощи кнопок.
Теперь расширим функционал получившихся часов, добавив к ним функцию будильника. А код, который будет выполняться при срабатывании будильника выведем в отдельную функцию «Func_alarm_action()», чтоб Вы смогли легко его найти и изменить. Например, при срабатывании будильника, открывать жалюзи, включать свет или музыку, включить через реле тостер или кофе-машину и т.д.
Нам понадобится:
-
х 1шт.
- RTC модуль Trema на базе чипа DS1307 х 1шт.
- LCD дисплей LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) х 1шт. х 1шт. х 1шт. х 3шт. х 2шт. х 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 с использованием ЖК-дисплея и часов реального времени.

Комплектующие
Для первого урока этого большого руководства нам понадобятся следующие комплектующие для наших часов на Ардуино:
-
и Genuino UNO
- PCF8563 (часы реального времени)
- Кристалл 32 кГц
- 10К потенциометры
- Резистор 10k 1/4w
- Резистор 220 Ом
- LCD 16×2
- Макет с набором проводов
В этом уроке будут использованы ЖК-дисплей и часы реального времени. Если вы хотите знать больше теме взаимодействия Arduino и ЖК-дисплеев — изучите уроки, которые мы публиковали ранее на нашем сайте.
Схема соединения
Схема очень проста. PCF8563 связывается с Arduino с помощью TWI, и когда данные принимаются, ЖК-дисплей обновляется, показывая новое время.

Установка даты и времени
Чтобы установить дату и время, используйте следующий скетч:
Код проекта
Теперь вы сможете использовать свои часы, загрузив этот скетч на Arduino:
Часы с выводом на экран Nokia 5110
Следующий урок — часы на Arduino, которые также простые для сборки, где вы сможете установить дату и время на последовательном мониторе.
В этом уроке используются лишь несколько компонентов — только перемычки, Arduino и дисплей Nokia 5110/3110.

Комплектующие
Детали, используемые в этом проекте ниже.
Оборудование
- Arduino UNO и Genuino UNO × 1
- Adafruit дисплей Nokia 5110 × 1
- Соединительные провода (универсальные) × 1
- Резистор 221 Ом × 1
Программное обеспечение
Схема соединения

Соединяем детали часов на Ардуино как на схеме выше:
- контакт pin 3 — последовательный тактовый выход (SCLK) // pin 3 — Serial clock out (SCLK)
- контакт pin 4 — выход серийных данных (DIN) // pin 4 — Serial date out (DIN)
- контакт pin 5 — дата / выбор команды (D / C) // pin 5 — date/Command select (D/C)
- контакт pin 6 — выбор ЖК-чипа (CS / CE) // pin 6 — LCD chip select (CS/CE)
- контакт pin 7 — сброс ЖК (RST) // pin 7 — LCD reset (RST)
Код урока
Код второй версии часов вы можете скачать или скопировать ниже.
Часы с будильником, гигрометром и термометром
Эти часы сделаны с использованием платы Arduino Uno, датчика AM2302, модуля RTC DS3231 и TFT-дисплей 1,8″ с ST7735.

Комплектующие
Компоненты, используемые в третьей версии часов на Ардуино перечислены ниже.
Компоненты оборудования
- Arduino UNO и Genuino UNO × 1
- Часы реального времени (RTC) × 1
- Датчик температуры DHT22 × 1
- Кнопочный переключатель 12мм
- SparkFun Кнопочный переключатель 12 мм × 4
- Соединительные провода (универсальные) × 1
- Макет (универсальный) × 1
- Adafruit ST7735 1,8 «дисплей × 1
Программное обеспечение
- Arduino IDE

Схема соединения
Соедините все детали часов согласно схеме ниже.

Код урока
Скачайте или скопируйте код часов для Ардуино ниже и загрузите на плату используя Arduino IDE.
Часы без RTC
Для начала мы должны понимать, что такое RTC. Из Википедии:
В итоге в данной версии мы сделаем часы без RTC с индикатором температуры и влажности на Arduino с помощью модуля DHT11. Также мы используем 3 кнопки для установки часов.
Комплектующие
Вам понадобятся эти кусочки для этого проекта:
- Arduino Uno плата
- Кнопки 3 шт.
- Потенциометр
- Модуль LCD 1602
- Модуль температуры и влажности DHT11
- Макетная плата
- Перемычки
Схема соединения
Соедините комплектующие часов как на схеме ниже.

Вы можете скопировать или скачать код часов на Ардуино ниже.
На этом пока всё. Мы постарались описать все основные варианты реализации часов на Ардуино.
5 комментариев
Не умеете скотч писать так нехрен выкладывать,*censored*.
В статье 4 примера, даже непонятно о каком скетче идет речь. Но, в любом случае, вы всегда можете написать свой скетч, вы же наверняка очень умный и талантливый человек, Евгений?
Евгений, ждем скетч от вас. Спасибо
Искал что либо для PCF8563 , поправить часы в устройстве , повторил первый материал , заработало . Из неудобств : для редактирования часиков необходимо применять 2 разных скетча , 2 прошивки ; Без ардуинки правка времени невозможна , изделие (часы) теряет свою автономность , т.е. устанавливать себе время своими кнопками (кей-пад шилд ардуино) . Хотя нужно не так много — добавить кусок кода опроса кнопок аналогового входа и интегрирования в управление редактированием дата-время . Ну и вообще будет супер — просмотр еепром содержимого этих часов . Знаний языков программирования и синтаксиса С++ почти нет , просьба к гуру — пожените оба скетча (PCF85663) , большое спасибо . Олег С.
