Как сделать часы на arduino

от admin

Цифровые часы 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

image

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

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

image

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

и еще добавить строки которые помогут нам определить порядковый номер дня недели и отобразить название дня на русском языке.

и еще закомментируем строки

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

image

теперь изменим отображения месяца, добавив в скетч строки

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

image

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

Ну а теперь, еще более усовершенствуем наши OLED часы и добавим к ним отображение температуры, которую мы будем считывать с датчика температуры DS18B20.

Для отображения рисунка с градусником на OLED дисплее и значка градуса выберем картинку с рисунком градусника и с помощью графического редактора сохраним ее в формате GIF с именем term.gif, и тоже самое проделаем с картинкой с значком градуса — сохраним ее как grad.gif.

У меня картинка term.bmp имеет размеры 19×40 пикселей, а картинка grad.bmp 13×12 пикселей. Потом нам потребуется конвертировать две картинки с помощью онлайн-сервиса www.rinkydinkelectronics.com

image

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

image

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

image

После этого добавим две строки в скетч, которые инициализируют наши файлы изображений

а потом отобразим наши изображения на экране OLED дисплея, добавив строки

Добавим в наш скетч на два цикла. В первом цикле у нас будет отображаться время – назовем его void watch(); Второй цикл будет считывать и отображать температуру void temp();

А в основном цикле void loop(); пропишем для ротации циклов несколько строчек кода

В цикле void temp(); пропишем кусочек кода для считывания и отображения температуры

В цикле void watch(); пропишем наш код, который отвечает за отображение времени

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

Часы на Arduino и 4-х разрядном семисегментном индикаторе

В настоящее время во встраиваемой электронике (и не только) достаточно широкое применение находят часы на семисегментных дисплеях (индикаторах). Ранее на нашем сайте мы уже рассматривали подключение семисегментного дисплея к плате Arduino Uno, также у нас представлены проекты различных часов на основе Arduino:

Внешний вид часов на Arduino и семисегментных дисплеях

В этой же статье мы рассмотрим создание часов на основе платы Arduino и четырех семисегментных дисплеях. Управление семисегментными дисплеями мы будем осуществлять с помощью технологии мультиплексирования.

Необходимые компоненты

  1. Плата Arduino UNO (купить на AliExpress).
  2. 4-х разрядный семисегментный дисплей (индикатор) (4-Digit 7 Segment Display) (купить на AliExpress).
  3. Микросхема 74HC595 (регистр сдвига) (купить на AliExpress).
  4. Модуль часов реального времени DS3231 (купить на AliExpress).
  5. Макетная плата.
  6. Соединительные провода.

4-х разрядный семисегментный дисплей (4-Digit 7 Segment Display)

Внешний вид 4-х разрядного семисегментного дисплея

4-х разрядный семисегментный дисплей состоит из четырех семисегментных дисплеев, объединенных в единое устройство. Иногда говорят, что эти дисплеи “мультиплексированы вместе”, поэтому для управления ими можно использовать технологию мультиплексирования. Этот дисплей можно использовать для отображения цифр, а также некоторых букв. Дисплей можно использовать в обоих направлениях. 4 символа удобно использовать для изготовления электронных часов или счетчика от 0 до 9999.

Распиновка 4-х разрядного семисегментного дисплея

На следующем рисунке показана внутренняя схема соединений 4-х разрядного семисегментного дисплея.

Внутренняя схема соединений 4-х разрядного семисегментного дисплея

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

Внутренние схемы соединений семисегментных дисплеев

В семисегментном дисплее с общим катодом (ОК) отрицательные выводы всех светодиодов соединены вместе и образую общую землю. В схеме с общим анодом (ОА) положительные выводы всех светодиодов соединены вместе и они образуют общий вывод напряжения постоянного тока (VCC).

На нашем сайте есть достаточно подробные статьи про устройство семисегментных дисплеев и их программированию – они написаны для микроконтроллеров семейства AVR, но я думаю провести аналогию с Arduino вам будет не трудно:

Использование технологии мультиплексирования

Так каким образом мы можем на подобном 4-х символьном семисегментном дисплее отобразить, к примеру, число 1234? Это возможно сделать с использованием технологии мультиплексирования. Смысл этой технологии достаточно прост – в каждый момент времени мы отображаем только один символ (из 4-х возможных) на данном дисплее. Переключение между отображением всех 4-х символов происходит достаточно быстро – поэтому человеческий глаз воспринимает их непрерывно горящими.

Регистр сдвига 74HC595

Микросхема 74HC595 представляет собой 8-битовый регистр сдвига, работающий по принципу Serial IN – Parallel OUT (последовательный вход – параллельный выход). То есть данный регистр сдвига принимает входные данные последовательно и обеспечивает параллельный вывод этих данных на своих 8 контактах. С его помощью можно значительно уменьшить количество используемых контактов микроконтроллера (в нашем случае платы Arduino). Более подробно о подключении регистра сдвига 74HC595 к платы Arduino можно прочитать в этой статье.

Читать:
Как узнать номинал резистора по полоскам

Распиновка регистра сдвига 74HC595

Микросхема 74HC595 использует 3 контакта (Clock, Data & Latch) для подключения к микроконтроллеру и позволяет контролировать 8 своих выходных контактов. Контакт Clock используется для непрерывной подачи синхронизирующих импульсов, а контакт Data предназначен для подачи на него необходимых данных. Регистр сдвига 74HC595 работает по интерфейсу SPI, подробную информацию по использованию данного интерфейса в платах Arduino вы можете почерпнуть в этой статье. Назначение контактов микросхемы 74HC595 приведено на следующих двух рисунках.

Назначение контактов микросхемы 74HC595 (часть 1)Назначение контактов микросхемы 74HC595 (часть 2)Расшифровка обозначений контактов регистра сдвига74HC595 на русском языке выглядит следующим образом.

Q0-Q7 – восемь параллельных выходов общего назначения. Данные выходы нужны для того, чтобы мы могли как-то воспользоваться пришедшими данными по SPI – подключить линейку светодиодов, либо сегменты какого-то индикатора, либо дешифратор и т.д.

VCC – напряжение питания.

GND – общий провод.

Q7′ – последовательный выход данных. По сути — это MISO.

DS – последовательный вход данных или MOSI.

MR – это master reset. Сбрасывает все выходы в 0. Для нормального функционирования регистра сдвига на нем должна быть логическая 1.

SH_CP – в нашем случае это будет chip select.

ST_CP – это контакт управления регистром хранения, в нашем случае это будет контакт синхронизации, на который необходимо подавать тактовые импульсы. Но Arduino будет делать для нас это автоматически при использовании соответствующей команды.

OE – задействования выхода. При отрицательном значении последовательный выход включен, при положительном – выключен.

Модуль часов реального времени DS3231

Внешний вид данного модуля представлен на следующем рисунке.

Внешний вид модуля часов реального времени DS3231

Модуль предназначен для хранения времени и даты даже когда общее питание схемы выключено – для этой цели в его состав входит элемент питания CR2032. В состав модуля DS3231 входит также датчик температуры, поэтому его можно использовать в различных встраиваемых устройствах, например, в цифровых часах с индикатором температуры и т.д. Модуль работает по интерфейсу I2C. На нашем сайте вы можете посмотреть следующие проекты с использованием данного модуля:

Назначение контактов (распиновка) модуля DS3231 приведена в следующей таблице.

Наименование контакта Назначение контакта
VCC напряжение питания
GND общий провод (земля)
SDA контакт последовательной передачи данных (I2C)
SCL контакт синхронизации (тактирования) (I2C)
SQW выход прямоугольного сигнала (программируемый меандр)
32K выход меандра с частотой 32.768кГц

Теперь перейдем непосредственно к схеме нашего проекта.

Схема проекта

Схема часов на Arduino и 4-х разрядном семисегментном индикаторе представлена на следующем рисунке.

Схема часов на Arduino и 4-х разрядном семисегментном индикаторе

В следующей таблице представлены необходимые соединения между модулем часов реального времени и платой Arduino Uno.

DS3231 Arduino Uno
VCC 5V
GND GND
SDA A4
SCL A5

В следующей таблице представлены необходимые соединения между регистром сдвига 74HC595 и платой Arduino Uno.

Регистр сдвига 74HC595 Arduino Uno
11-SH_CP (SRCLK) 6
12-ST_CP (RCLK) 5
14-DS (Data) 4
13-OE(Latch) GND
8-GND GND
10-MR(SRCLR) +5V
16-VCC +5V

В следующей таблице представлены необходимые соединения между регистром сдвига 74HC595, 4-х разрядным семисегментным дисплей и платой Arduino Uno.

4-х разрядный семисегментный дисплей Регистр сдвига 74HC595 Arduino Uno
A Q0
B Q1
C Q2
D Q3
E Q4
F Q5
G Q6
D1 10
D2 11
D3 12
D4 9

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

Объяснение программы для Arduino

Полный код программы и видео, демонстрирующее работу проекта, приведены в конце статьи. Здесь же мы рассмотрим основные фрагменты кода программы.

В программе мы должны считывать время (часы и минуты в 24-часовом формате) с модуля часов реального времени и конвертировать их в формат для отображения на 4-х символьном семисегментном дисплее.

Для подключения модуля часов реального времени DS3231 к плате Arduino используется шина I2C. Для работы с данным модулем (считывания даты, времени, температуры и т.д.) мы в программе будем использовать библиотеку <DS3231.h>. Скачайте ее по следующей ссылке — DS3231 RTC module Arduino Library. Поскольку мы используем интерфейс I2C нам в программе необходимо будет подключить и библиотеку <wire.h>.

В нашем проекте часы и минуты считываются с модуля часов реального времени и они потом объединяются вместе, например, 0930 – это будет 09:30 pm. Затем мы выделяем индивидуальные цифры из этого считанного числа. Далее эти индивидуальные цифры преобразуются в двоичный формат и передаются на регистр сдвига, а с него на семисегментный дисплей. Для отображения всех четырех символов мы используем технологию мультиплексирования – то есть в каждый момент времени мы отображаем только один символ, но переключение между символами происходит с высокой частотой, поэтому человеческий глаз этого не замечает.

Часы на Ардуино без модуля RTC на LCD 1602

Часы на Ардуино без модуля RTC на LCD 1602

Часы на Ардуино без модуля часов реального времени RTC с выводом информации на дисплей LCD 1602 i2c — в этом проекте предусмотрена настройка времени (часов и минут) и время включения будильника. Для этого использованы две тактовые кнопки (для переключения режимов настройки) и пьезодинамик ардуино для звукового сигнала. Проект содержит схему сборки устройства, а также рабочий код.

Часы на Ардуино без модуля реального времени

Для этого проекта потребуется минимум деталей: дисплей 1602 с модулем i2c (можно подключить дисплей без i2c при желании), две тактовые кнопки и пьезодинамик. Кнопки подключаются к пинам микроконтроллера Arduino, сконфигурированных в режиме INPUT_PULLUP — при таком способе подключения можно считывать количество нажатий на кнопку, а при сборке не потребуются резисторы и ds1302.

Для этого проекта потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • экран LCD 16×02 i2c;
  • 2 тактовые кнопки;
  • пьезодинамик;
  • макетная плата;
  • провода «папа-мама», «папа-папа».

Часы на Arduino без использования модуля RTC

Схема сборки часов на Arduino без использования модуля RTC ds1302

Если вы используете Arduino Mega, то на этой плате порты SDA и SCL для подключения дисплея расположены на 20 и 21 пине. У платы Arduino Nano распиновка такая же, как на Uno и LCD 1602 подключается к пинам A4 (SDA) и A5 (SCL). Будильник будет пищать в течении 1 минуты, чтобы его выключить можно нажать на кнопку, подключенную к 8 порту. После сборки электрической схемы загрузите в плату следующую программу.

Скетч. Часы на LCD 16×02 без модуля RTC

Пояснения к коду:
  1. переменные c1 и c2 отвечают за позицию курсора при выводе времени и минут на экране, в зависимости от того — двухзначное или однозначное число хранится в переменной (это сделано для удобства вывода информации);
  2. во время настройки часов и будильника, таймер останавливается.

Заключение. Часы без модуля RTC ds1302 будут сбрасывать время на начальные значения при отключении питания, поэтому в проект были добавлены кнопки. С помощью них можно настроить часы, без необходимости повторной загрузки скетча — получился простой проект на Ардуино для начинающих программировать. Также можно добавить датчик DHT11 или BMP180, чтобы выводить на экране температуру.

Похожие публикации