Модуль индикатора TM1637 Arduino (семисегментный дисплей) позволяет выводить информацию с датчиков и сенсоров или собрать часы с термометром на базе Ардуино. Рассмотрим в этой статье, как подключить 4-разрядный семисегментный дисплей на основе драйвера TM1637 к плате Ардуино с примерами программ для вывода символов и переменных, а также информации с датчика освещенности с фоторезистором.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- модуль индикатора TM1637
- фоторезистор или датчик света
- макетная плата
- коннекторы
- библиотека TM1637Display.h
Дополнительные материалы на эту тему:
Дисплей ТМ1637 с двоеточием в центре — это самое простое решение для создания на Ардуино секундомера или часов реального времени. Сам модуль дисплея состоит из четырех семисегментных дисплеев, каждый из которых состоит из семи светодиодов, обозначенных буквами от «a» до «g», которые загораются независимо друг от друга. При подключении к плате Arduino дополнительные резисторы в схеме не требуются.
Дисплей TM1637 распиновка, характеристики
TM1637 display Arduino характеристики
- Источник питания: 5 В или 3,3 В
- Рабочий ток: 0.2 – 80 мА
- Использует 2 провода для связи
- Чипсет: TM1637
- Размеры: 43 х 23 х 11 мм
Модуль дисплея имеет максимально простую конструкцию и основан на драйвере TM1637 с интерфейсом двухпроводной шины. Четырехразрядный модуль дисплея TM1637 не поддерживает стандартный протокол i2c, поскольку модуль не имеет адреса ведомого устройства. Производители предлагают модели дисплеев с белыми, красными, синими и зелеными светодиодами; дисплей ТМ1637 имеет размер 0,36 или 0,56 дюйма.
Как подключить дисплей TM1637 к Arduino
Модуль 4-сегментного дисплея TM1637 подключается к Ардуино с помощью четырех контактов — два провода предназначены для питания (5V и GND), а два других (CLK и DIO) подключаются к любым цифровым портам микроконтроллера. Для работы с индикатором TM1637 необходимо установить библиотеку TM1637Display.h в Arduino IDE, которая позволяет отображать на дисплее не только цифры, но и некоторые символы и буквы.
Скетч для индикации символов и букв на TM1637
#include "TM1637Display.h" TM1637Display display(3, 2); // CLC, DIO const uint8_t tire[] = { SEG_G // - }; const uint8_t C[] = { SEG_A | SEG_F | SEG_E | SEG_D // C }; const uint8_t DONE[] = { SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O SEG_C | SEG_E | SEG_G, // n SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E }; void setup() { display.setBrightness(4); // яркость от 0 до 7 display.clear(); display.setSegments(tire, 1, 0); // -___ delay(200); display.setSegments(tire, 1, 1); // _-__ delay(200); display.setSegments(tire, 1, 2); // __-_ delay(200); display.setSegments(tire, 1, 3); // ___- delay(200); display.clear(); display.setSegments(DONE, 4, 0); // dOnE delay(500); display.clear(); } void loop() { display.showNumberDec(1, true, 1, 0); // 1___ delay(500); display.showNumberDec(2, true, 1, 1); // 12__ delay(500); display.showNumberDec(3, true, 1, 2); // 123_ delay(500); display.showNumberDec(4, true, 1, 3); // 1234 delay(500); display.clear(); display.showNumberDec(00, true, 2, 1); // _00_ delay(500); display.setSegments(C, 1, 3); // _00C delay(500); display.clear(); }
Как подключить TM1637 с датчиком освещенности
Символы для индикатора создаются с помощью массива const uint8_t [] = {};
. А в следующем примере переменная в программе будет хранить в себе значения с аналогового датчика света, но можно использовать любой другой датчик для микроконтроллера Arduino. В этом примере модуль отображает трехзначное число из переменной, а четвертый сегмент отображает букву ‘c’, которая была создана в программе.
Скетч для вывода переменных на TM1637 display
#include "TM1637Display.h" TM1637Display display(3, 2); // CLC, DIO int c; const uint8_t c[] = { SEG_G | SEG_E | SEG_D // c }; void setup() { Serial.begin(9600); pinMode(A1, INPUT); display.setBrightness(4); // яркость от 0 до 7 display.clear(); } void loop() { c = analogRead(A1); Serial.println(c); display.showNumberDec(c, false, 3, 0); display.setSegments(c, 1, 3); delay(500); }
Описание команд библиотеки TM1637Display.h
setBrightness(brightness, true/false) — эта функция может быть использована в любом месте кода и устанавливает яркость дисплея. Вы можете задать уровень от 0 (наименьшая яркость) до 7 (наибольшая яркость). Второй параметр используется для включения и выключения дисплея, false
означает, что дисплей TM1637 будет выключен.
clear() — команда для очистки дисплея
setSegments(segments, length, position) — эта функция используется для установки отдельных сегментов, где segments
— массив (созданный в начале программы с помощью const uint8_t). Аргумент length
задает количество символов в массиве, для термометра в сборе TM1637 используются два символа — °C. position
— задает позицию, с которой символ должен быть выведен на светодиодный четырехразрядный дисплей.
showNumberDec(number, leading_zeros, length, position), где первый аргумент number
— это число, которое отображается на четырёхразрядном индикаторе. Второй аргумент leading_zeros
используется для включения (true) или отключения (false) ведущих нулей. Цифра 10 без ведущих нулей печатается как __10, а с ведущими нулями — как 0010. Третий и четвертый аргументы функции такие же, как и в предыдущей функции.
showNumberDecEx(number, dots, leading_zeros, length, position) — эта функция позволяет задействовать точки на дисплее. Она отличается от функции showNumberDec только аргументом dots
. Для модулей у которых есть точки на дисплее необходимо указать 0b01000000 для включения точек и 0b000000 для их отключения.
Заключение. На примере первого скетча вы сможете самостоятельно разобраться, как создать новый символ или букву для модуля дисплея. Во второй программе вы выводили информацию с аналогового датчика, как вывести информацию с цифрового датчика DHT11, можно посмотреть в наших проектах — термометр на TM1637. Если у вас остались вопросы или вы нашли ошибку, оставляйте их в комментариях к данной записи.
Наконец то рабочий пример.