Как сделать часы на ардуино уно на дисплее 7 segment

Обновлено: 05.07.2024

В этой статье описывается схема подключения пары светодиодных семисегментных индикаторов к Arduino Uno с помощью микросхем-драйверов CD4026. При таком подходе для вывода произвольного числа используется всего 2 цифровых выхода контроллера.

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

Исходные компоненты

Для эксперимента нам понадобятся:

Принцип работы

Семисегментный индикатор — это просто набор обычных светодиодов в одном корпусе. Просто они выложены восьмёркой и имеют форму палочки-сегмента. Можно подключить его напрямую к Arduino, но тогда будет занято 7 контактов, а в программе будет необходимо реализовать алгоритм преобразования числа из двоичного представления в соответствующие «калькуляторному шрифту» сигналы.

Для упрощения этой задачи существует 7-сегментный драйвер. Это простая микросхема с внутренним счётчиком. У неё есть 7 выходов для подключения всех сегментов (a, b, c, d, e, f, g pins), контакт для сбрасывания счётчика в 0 (reset pin) и контакт для увеличения значения на единицу (clock pin). Значение внутреннего счётчика преобразуется в сигналы (включен / выключен) на контакты a-g так, что мы видим соответствующую арабскую цифру.

На микросхеме есть ещё один выход, обозначенный как «÷10». Его значение всё время LOW за исключением момента переполнения, когда значение счётчика равно 9, а его увеличивают на единицу. В этом случае значением счётчика снова становится 0, но выход «÷10» становится HIGH до момента следующего инкремента. Его можно соединить с clock pin другого драйвера и таким образом получить счётчик для двузначных чисел. Продолжая эту цепочку, можно выводить сколь угодно длинные числа.

Микросхема может работать на частоте до 16 МГц, т.е. она будет фиксировать изменения на clock pin даже если они будут происходить 16 миллионов раз в секунду. На той же частоте работает Arduino, и это удобно: для вывода определённого числа достаточно сбросить счётчик в 0 и быстро инкрементировать значение по единице до заданного. Глазу это не заметно.

Подключение

Сначала установим индикаторы и драйверы на breadboard. У всех них ноги располагаются с двух сторон, поэтому, чтобы не закоротить противоположные контакты, размещать эти компоненты необходимо над центральной канавкой breadboard’а. Канавка разделяет breadboard на 2 несоединённые между собой половины.

Далее, подключим один из драйверов в соответствии с его распиновкой

2 «disable clock» — к рельсе земли: мы его не используем 3 «enable display» — к рельсе питания: это питание для индикатора 1 «clock» — через стягивающий резистор к земле. К этому контакту мы позже подведём сигнал с Arduino. Наличие резистора полезно, чтобы избежать ложного срабатывания из-за окружающих помех пока вход ни к чему не подключен. Подходящим номиналом является 10 кОм. Когда мы соединим этот контакт с выходом Arduino, резистор не будет играть роли: сигнал притянет к земле микроконтроллер. Поэтому если вы знаете, что драйвер при работе всегда будет соединён с Arduino, можете не использовать резистор вовсе. 15 «reset» и 5 «÷10» пока оставим неподключенными, но возьмём на заметку — нам они понадобятся в дальнейшем

Контакты 3 и 8 на индикаторе обозначены как «катод», они общие для всех сегментов, и должны быть напрямую соединены с общей землёй.

Далее следует самая кропотливая работа: соединение выходов микросхемы с соответствующими анодами индикатора. Соединять их необходимо через токоограничивающие резисторы как и обычные светодиоды. В противном случае ток на этом участке цепи будет выше нормы, а это может привести к выходу из строя индикатора или микросхемы. Номинал 220 Ом подойдёт.

Соединять необходимо сопоставляя распиновку микросхемы (выходы a-g) и распиновку индикатора (входы a-g)

Повторяем процедуру для второго разряда

Теперь вспоминаем о контакте «reset»: нам необходимо соединить их вместе и притянуть к земле через стягивающий резистор. В последствии, мы подведём к ним сигнал с Arduino, чтобы он мог обнулять значение целиком в обоих драйверах.

Также подадим сигнал с «÷10» от правого драйвера на вход «clock» левого. Таким образом мы получим схему, способную отображать числа с двумя разрядами.

Стоит отметить, что «clock» левого драйвера не стоит стягивать резистором к земле, как это делалось для правого: его соединение с «÷10» само по себе сделает сигнал устойчивым, а притяжка к земле может только нарушить стабильность передачи сигнала.

Железо подготовленно, осталось реализовать несложную программу.

Программирование

Результат

Подключаем контакт 2 с Arduino к контакту clock младшего (правого) драйвера, контакт 3 — к общему reset’у драйверов; разводим питание; включаем — работает!

В настоящее время во встраиваемой электронике (и не только) достаточно широкое применение находят часы на семисегментных дисплеях (индикаторах). Ранее на нашем сайте мы уже рассматривали подключение семисегментного дисплея к плате 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

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

Расшифровка обозначений контактов регистра сдвига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, 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. Затем мы выделяем индивидуальные цифры из этого считанного числа. Далее эти индивидуальные цифры преобразуются в двоичный формат и передаются на регистр сдвига, а с него на семисегментный дисплей. Для отображения всех четырех символов мы используем технологию мультиплексирования – то есть в каждый момент времени мы отображаем только один символ, но переключение между символами происходит с высокой частотой, поэтому человеческий глаз этого не замечает.

LED-chasy-

Для начала мы соберем все на макетной плате для проверки работы,

LED часы – компоненты для сборки и макетирования

    – 1 шт. ( используется для макетирования и заливки скетча в микроконтроллер Atmega 8A-PU) – 1 шт. ( используется для сборки часов)
  • Кнопки – 3 шт. – 1 шт. – 1 шт. – 1 шт.

LED часы – схема подключения

Для начала мы соберем все на макетной плате для проверки работы, и начнем с подключения кнопок к плате arduino

  • кнопка для установки часов – к аналоговому входу A1
  • кнопка для установки минут – к аналоговому входу A2
  • кнопка для светового эффекта на – к аналоговому входу A0

shema1

После подключения кнопок подключим плюс пищалки (buzzer) к аналоговому входу A5 ( цифровой вход 19) , а минус на GND

shema2

А теперь переходим к подключению 7 сегментного индикатора, сразу уточню, что подключать можно индикаторы с общим анодом , и с общим катодом. На макетке я использовал индикатор LN543GA , который когда-то выпаял из старой нерабочей магнитолы…

LN543GA

LN543GA-front

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

На основе этого индикатора и будем разбираться в подключении к дисплея к ардуино. Для начала поищем и откроем даташит на этот дисплей и посмотрим распиновку ног, рабочее напряжение и ток.

LN543GA-pinout

ток работы сигмента от 30 до 50 мА , напряжение 5 вольт

LN543GA-pinout-2

Слева пины для дисплея с общим анодом, справа – с общим катодом

После “курения” даташита приступаем к подключению

  • подключаем сигменты A, B, C, D, E, F, G к цифровым пинам на ардуино 2, 3, 4, 5, 6, 7, 8
  • подключаем разряды 1, 2, 3, 4 к цифровым пинам на ардуино 9, 10, 11, 12
  • сегменты которые отвечают за двоеточие ( в моем случае, это Lower collon и Upper collon) , подключаем к 13 пину на ардуино

LED часы – скетч

Если вы подключили все как у меня, смело заливайте скетч и тестируйте свои LED часы

Мы решили собрать большое руководство о том, как сделать часы на Ардуино, где расскажем о нескольких вариантах реализации такого проекта. Ранее мы уже делали электронные часы на основе этой платы.

Часы на Ардуино на основе ЖК-дисплея и часов реального времени

Цель первого урока показать, как сделать простые часы на основе Arduino с использованием ЖК-дисплея и часов реального времени.


Комплектующие

Для первого урока этого большого руководства нам понадобятся следующие комплектующие для наших часов на Ардуино:

    и Genuino UNO
  • PCF8563 (часы реального времени)
  • Кристалл 32 кГц
  • 10К потенциометры
  • Резистор 10k 1/4w
  • Резистор 220 Ом
  • LCD 16x2
  • Макет с набором проводов

В этом уроке будут использованы ЖК-дисплей и часы реального времени. Если вы хотите знать больше теме взаимодействия 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.

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

Часы без RTC

Для начала мы должны понимать, что такое RTC. Из Википедии:

Часы реального времени (ЧРВ, RTC — англ. Real Time Clock ) — электронная схема, предназначенная для учёта хронометрических данных (текущее время, дата, день недели и др.), представляет собой систему из автономного источника питания и учитывающего устройства. Чаще всего часы реального времени встречаются в вычислительных машинах, хотя на самом деле ЧРВ присутствуют практически во всех электронных устройствах, которые должны хранить время.

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

Комплектующие

Вам понадобятся эти кусочки для этого проекта:

  • Arduino Uno плата
  • Кнопки 3 шт.
  • Потенциометр
  • Модуль LCD 1602
  • Модуль температуры и влажности DHT11
  • Макетная плата
  • Перемычки

Схема соединения

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


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

На этом пока всё. Мы постарались описать все основные варианты реализации часов на Ардуино.

cover

Привет! В начальном наборе для Ардуино осталось совсем немного датчиков. Сегодня посмотрим на одноразрядный 7 сегментный индикатор.

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

Поскольку управлять таким индикатором можно также, как и простым светодиодом. Вспомним один из самых первых уроков. И используем программу из него. Посмотрите его еще раз, если уже забыли или пропустили.

Все светодиоды внутри корпуса индикатора соединены с общим катодом. Для катода даже выделено две ножки. Они находятся в центре с каждой стороны корпуса.

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

Схема и программа

Схема кажется громоздкой. Но, на самом деле, тут всего лишь соединяются 8 светодиодов. Они соединяются с цифровыми портами Ардуино последовательно с резисторами.

Пока что не будем искать какой конкретно светодиод нужно подключить к конкретному порту. Определим это уже в программе.

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

Заполним массив номерами цифровых портов. И будем обращаться к ним с помощью этого массива.

Теперь, надо понять какие порты соответствуют конкретным сегментам на индикаторе. Для этого переберем их последовательно. Добавим небольшую паузу после каждого сегмента. После чего пронумеруем.

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

Обратный отсчет

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

Теперь мы можем передать в функцию нужную нам цифру и получить ее на индикаторе.

Полный текст программы

Добавим в главный цикл программы вызов функции с увеличением счетчика. Напишем еще одну небольшую функцию очистки экрана. А потом посмотрим, что получилось в итоге.

Заключение

Мы рассмотрели одноразрядный 7 сегментный индикатор. Как и многие другие элементы, он служит для вывода информации из нашей схемы и программы для пользователя. Мы написали простейшую программу и функцию управления индикатором. Но также для него уже существуют удобные библиотеки. Рассмотрим одно такую в следующий раз.

Читайте также: