Одним из широко используемых устройств для отображения информации в любительских проектах Arduino являются 7-сегментные светодиодные индикаторы, которые используют в сборках из 4 или 8 штук. На данные дисплеи уже можно выводить какие-то осмысленные данные, например текущее время или курс валюты. Но еще совсем недавно это требовало использования очень большого количества контактов Arduino. С появлением дисплеев на светодиодных индикаторов на микросхеме TM1637. для подключения используется всего 2 цифровых контакта Arduino, плюс питание и земля. TM1637 полностью берет на себя организацию динамической индикации индикаторов.

Светодиодный индикатор на микросхеме TM1637

Светодиодный индикатор на микросхеме TM1637

Данный дисплей содержит четыре семисегментных индикатора с общим анодом, а также имеет разделительные точки для вывода времени. Логические уровни толерантны как к уровням напряжения 5 и 3.3 В. Сегменты бывают красного, синего, желтого, белого и зеленого цвета. Есть возможность установки уровня яркости сегментов.

Технические характеристики дисплея TM1637

  • Напряжение питания – 3.3 – 5.5 В
  • Ток потребления – 0.2 – 80 мА
  • Количество сегментов – 4 с десятичной точкой в каждом разряде
  • Размер индикаторов – 0.36" или 0.56"
  • Наличие разделительных точек
  • Интерфейс – двухпроводной последовательный
  • Цвета – красный, синий, желтый, белый, зеленый
  • Регулируемая яркость – 7 уровней.

Подключение 4-Digit LED дисплея к плате Arduino

Для подключения дисплея к микроконтроллеру используют два контакта дисплея:

  • DIO –отправка данных
  • CLK – синхронизация

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

Подключение светодиодного индикатора TM1637 к Arduino

Подключение светодиодного индикатора TM1637 к Arduino

Для работы с данным дисплеем существует несколько библиотек, например TM1637, DigitalTube, GyverTm1637. Установим в Arduino IDE библиотеку, позволяющую выводить цифры, буквы, время, бегущую строку и имеющую интересные визуальные эффекты.
Посмотреть возможности библиотеки можно, запустив пример GyverTm1637_Demo (Примеры → GyverTm1637 → GyverTm1637_Demo).

GyverTm1637_Demo

GyverTm1637_Demo

Пример использования светодиодного LED дисплея vTM1637

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

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

  • Плата Arduino Nano – 1 шт
  • Плата – 1 шт
  • Дисплей TM1637 – 1 шт
  • RTC DS3231 – 1 шт
  • Провода.

Проект отображения на дисплее TM1637

Проект отображения на дисплее TM1637

Порядок показа даты и времени, получаемых с модуля RTC DS3231:

  • _ _ : s s – показ секунд с миганием двоеточия
  • h h : m m – часы и минуты с миганием двоеточия
  • d d   m m – день месяц
  • y e   a r – год.

Загружаем на плату Arduino скетч

// подключение библиотек
#include "GyverTM1637.h"
#include <Wire.h>
#include <DS1307RTC.h>
#include <Time.h>
#include <TimeLib.h>
// создание объекта
#define CLK 4
#define DIO 5
GyverTM1637 disp(CLK, DIO);
// переменная даты-времени
tmElements_t tm;
// служебные переменные
unsigned long millisp=0;
unsigned long millist=0;
// двоеточие
boolean flagpoint=true;
void setup() {
// очистить дисплей
disp.clear();
// установить яркость
disp.brightness(7);  
}
void loop() {
if(millis()-millisp>=500) {
// разделительные точки
flagpoint=!flagpoint;
millisp=millis();
// получить время
RTC.read(tm);
// показ инфо
if(millis()-millist<=5000) { // секунды
disp.point(flagpoint);
disp.display(0, 10);
disp.display(1, 10);
disp.display(2, tm.Second/10);
disp.display(3, tm.Second%10);
}
else if(millis()-millist<5500) {  
else if(millis()-millist<=9000) { // часы-минуты
disp.point(flagpoint);
disp.display(0, tm.Hour/10);
disp.display(1, tm.Hour%10);
disp.display(2, tm.Minute/10);
disp.display(3, tm.Minute%10);
}
else if(millis()-millist<=12000) { // день-месяц
disp.point(false);
disp.display(0, tm.Day/10);
disp.display(1, tm.Day%10);
disp.display(2, tm.Month/10);
disp.display(3, tm.Month%10);
}
else if(millis()-millist<=15000) { // год
disp.point(false);
int year1=tmYearToCalendar(tm.Year);
disp.display(0, year1/1000);
disp.display(1, (year1%1000)/100);
disp.display(2, ((year1%1000)%100)/10);
disp.display(3, ((year1%1000)%100)%10);
}
else {
millist=millis();
}
}  
}

И проверяем работу часов

4-digit-led-display-tm1637-05.jpg4-digit-led-display-tm1637-06.jpg


Что делать если

Не выводится изображение на дисплей

Проверьте правильность подключения модуля к плате Arduino.
Проверьте правильность написания скетча.

Рекомендуемые товары

Комментарии 0