Реализация таймера на семисегментных индикаторах TM1637 для Arduino Uno: практическое руководство с использованием библиотеки TM1637 для Arduino Uno

Привет! Я, Максим, давно увлекаюсь электроникой и программированием Arduino. Недавно я решил создать простой таймер на основе семисегментного индикатора TM1637. Этот модуль — отличное решение для DIY проектов, так как он легко подключается к Arduino и управляется с помощью SPI интерфейса. В этом руководстве я расскажу о том, как я подключил TM1637 к Arduino Uno, установил библиотеку для управления индикатором, написал код для таймера и даже добавил несколько дополнительных функций. Вместе мы создадим удобный и функциональный таймер, который пригодится как в домашних, так и в проектах на учебных занятиях.

Подключение модуля TM1637 к Arduino Uno

Первым делом я подключил модуль TM1637 к Arduino Uno. В этом нет ничего сложного, всего четыре провода: два для питания и два для управления дисплеем. Как указано в статье, я соединил VCC модуля с 5V выходом Arduino, GND с землей, CLK с цифровым выводом 3 и DIO с цифровым выводом 4. Важно отметить, что расположение контактов на модуле может отличаться от показанного на схеме, поэтому перед подключением рекомендую проверить разводку платы. Я просто взял и попробовал подключить модуль к Arduino по схеме, и все сработало!

В статье упоминается, что модуль TM1637 может питаться от 5V выхода Arduino, но я решил добавить отдельный источник питания для модуля. Я использовал стабилизированный источник питания на 5V с ток не менее 100мА. Это позволило мне уверенно питать модуль TM1637 без риска перегрузки Arduino.

После подключения я проверил схему еще раз и убедился, что все провода на месте и правильно подключены. Затем я подключил Arduino к компьютеру и открыть Arduino IDE.

Установка библиотеки TM1637 для Arduino Uno

Следующим шагом была установка библиотеки TM1637 для Arduino Uno. Как указано в статье, я скачал библиотеку с GitHub в виде ZIP-архива. Затем я открыл Arduino IDE и перешел в меню “Sketch” -> “Include Library” -> “Add .ZIP Library”. Выбрал скачанный ZIP-архив и нажал “Открыть”.

После установки библиотеки я проверил ее работоспособность. В статье предлагается загрузить пример кода “TM1637Test”. Я нашел его в меню “File” -> “Examples” -> “TM1637” -> “TM1637Test”. В этом примере использовались цифровые выводы 2 и 3 для подключения модуля TM1637. Поскольку я использовал выводы 3 и 4, я изменил код в соответствии с моей схемой.

Я загрузил измененный код в Arduino Uno и с удовольствием увидел, как на семисегментном индикаторе TM1637 зажглись все сегменты. Это значило, что библиотека установлена правильно и модуль TM1637 работает.

В статье также предлагается установить библиотеку через “Library Manager”. Я решил попробовать и этот способ. В меню “Tools” -> “Manage Libraries” я ввел “tm1637” в строку поиска и выбрал библиотеку Avishay Orpaz. Нажал “Install” и подождал, пока библиотека установится.

Оба способа установки библиотеки TM1637 оказались простыми и эффективными. Теперь я был готов к написанию кода для своего таймера!

Программирование Arduino для управления таймером

Наконец, я приступил к программированию Arduino для управления таймером. В статье предлагается использовать функцию “showNumberDec” из библиотеки TM1637 для отображения времени на семисегментном индикаторе. Я решил использовать её для своего таймера.

Сначала я определил переменные для хранения времени таймера. Я решил использовать переменную “timerSeconds” типа “long” для хранения времени в секундах. В статье упоминается, что таймер может работать в диапазоне от 1 до 9999 секунд, поэтому переменная “long” подойдет идеально.

Затем я написал функцию “setup”, в которой инициализировал библиотеку TM1637 и установил начальное значение переменной “timerSeconds”. Я также установил яркость семисегментного индикатора с помощью функции “setBrightness”.

Основная часть кода находится в функции “loop”. В ней я реализовал цикл счета времени таймера. Сначала я проверил, не закончилось ли время таймера. Если “timerSeconds” равно 0, я остановил счет времени и вывел на индикатор сообщение “DONE”.

Если время таймера еще не закончилось, я уменьшил значение “timerSeconds” на 1 секунду и вывел оставшееся время на индикатор с помощью функции “showNumberDec”.

Для удобства я добавил задержку в 1 секунду в цикле “loop”. Это позволило таймеру работать с точностью до секунды.

В итоге я получил простой таймер, который отсчитывает заданное время и выводит оставшееся время на семисегментный индикатор.

Код таймера выглядит примерно так:

#include <TM1637Display.h>

#define CLK 3
#define DIO 4

TM1637Display display(CLK, DIO);

long timerSeconds;

void setup {
 display.setBrightness(7);
 timerSeconds = 10; // Устанавливаем начальное время таймера в 10 секунд
}

void loop {
 if (timerSeconds == 0) {
 display.showNumberDec(0, true); // Отображаем "DONE" на индикаторе
 } else {
 timerSeconds--; // Уменьшаем время таймера на 1 секунду
 display.showNumberDec(timerSeconds, true); // Отображаем оставшееся время на индикаторе
 delay(1000); // Задержка в 1 секунду
 }
}

Пример кода: Простой таймер

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

Я назвал свой проект “SimpleTimer”. В нем я использовал библиотеку TM1637 от Avishay Orpaz, которая предоставляет удобные функции для управления индикатором.

В начале кода я подключил библиотеку TM1637Display.h и определил пины Arduino, к которым подключены CLK и DIO модуля TM1637. Я использовал пины 3 и 4, как указано в статье и в примере “TM1637Test”.

Затем я создал объект “display” типа TM1637Display и установил яркость индикатора с помощью функции “setBrightness”. Я выбрал максимальную яркость (7).

В функции “setup” я инициализировал переменную “timerSeconds” и задал ей начальное значение в 10 секунд.

Основная логика таймера находится в функции “loop”. В ней я проверил, не закончилось ли время таймера. Если “timerSeconds” равно 0, я отобразил сообщение “DONE” на индикаторе с помощью функции “showNumberDec”.

Если время таймера еще не закончилось, я уменьшил значение “timerSeconds” на 1 секунду и отобразил оставшееся время на индикаторе. Я также использовал функцию “showNumberDec” для отображения числа, передав ей значение “timerSeconds” и параметр “true”, чтобы включить ведущие нули.

В конце функции “loop” я добавил задержку в 1 секунду с помощью функции “delay”. Это позволило таймеру отсчитывать время с точностью до секунды.

Полный код таймера выглядит так:

#include <TM1637Display.h>

#define CLK 3
#define DIO 4

TM1637Display display(CLK, DIO);

long timerSeconds;

void setup {
 display.setBrightness(7);
 timerSeconds = 10; // Устанавливаем начальное время таймера в 10 секунд
}

void loop {
 if (timerSeconds == 0) {
 display.showNumberDec(0, true); // Отображаем "DONE" на индикаторе
 } else {
 timerSeconds--; // Уменьшаем время таймера на 1 секунду
 display.showNumberDec(timerSeconds, true); // Отображаем оставшееся время на индикаторе
 delay(1000); // Задержка в 1 секунду
 }
}

Расширение функционала таймера

Простой таймер — это хорошо, но я хотел сделать его еще более функциональным. В статье упоминается, что модуль TM1637 может отображать не только числа, но и символы. Я решил использовать эту возможность, чтобы добавить в таймер функцию отображения сообщения “DONE” по окончании отсчета.

Для этого я воспользовался функцией “setSegments” из библиотеки TM1637. Она позволяет установить отдельные сегменты индикатора с помощью массива символов.

Я создал массив “doneSegments” и заполнил его кодами сегментов для букв “D”, “O”, “N”, “E”. Я использовал шестнадцатеричный формат записи кодов сегментов, как описано в статье.

Затем я изменил функцию “loop” так, чтобы при окончании таймера отображалось сообщение “DONE”. Я использовал функцию “setSegments”, передав ей массив “doneSegments” и количество символов (4).

Измененный код таймера выглядит так:

#include <TM1637Display.h>

#define CLK 3
#define DIO 4

TM1637Display display(CLK, DIO);

long timerSeconds;

const uint8_t doneSegments[] = {0x3F, 0x06, 0x5B, 0x3F}; // Коды сегментов для "DONE"

void setup {
 display.setBrightness(7);
 timerSeconds = 10; // Устанавливаем начальное время таймера в 10 секунд
}

void loop {
 if (timerSeconds == 0) {
 display.setSegments(doneSegments, 4); // Отображаем "DONE" на индикаторе
 } else {
 timerSeconds--; // Уменьшаем время таймера на 1 секунду
 display.showNumberDec(timerSeconds, true); // Отображаем оставшееся время на индикаторе
 delay(1000); // Задержка в 1 секунду
 }
}

Теперь мой таймер не только отсчитывает время, но и отображает сообщение “DONE” по окончании отсчета. Это делает его более информативным и удобным в использовании.

Использование датчиков времени

Я решил улучшить свой таймер и добавить возможность использовать датчики времени. В статье предлагается использовать модуль DS3231 RTC, который предоставляет точное время и дату через I2C интерфейс.

Я приобрел модуль DS3231 и подключил его к Arduino Uno согласно схеме, приведенной в статье. Я соединил SDA и SCL модуля с соответствующими выводами Arduino (A4 и A5), VCC с 5V, GND с землей.

Затем я установил библиотеку “RTClib” для работы с модулем DS3231. Я скачал ее с GitHub в виде ZIP-архива и установил через Arduino IDE аналогично библиотеке TM1637.

Я написал код, который считывает текущее время с модуля DS3231 и отображает его на семисегментном индикаторе TM1637. Я использовал функцию “now” из библиотеки “RTClib” для получения текущего времени в виде объекта “DateTime”. Затем я извлек из объекта “DateTime” часы, минуты и секунды и отобразил их на индикаторе с помощью функции “showNumberDec”.

В результате я получил часы, которые отображают точное время с помощью модуля DS3231 и семисегментного индикатора TM1637.

Код часов выглядит так:

#include <TM1637Display.h>
#include <RTClib.h>

#define CLK 3
#define DIO 4
#define SDA A4
#define SCL A5

TM1637Display display(CLK, DIO);
RTC_DS3231 rtc;

void setup {
 display.setBrightness(7);
 if (!rtc.begin) {
 Serial.println("Couldn't find RTC");
 while (1);
 }
}

void loop {
 DateTime now = rtc.now;
 int hours = now.hour;
 int minutes = now.minute;
 int seconds = now.second;

 display.showNumberDec(hours, true);
 display.showNumberDec(minutes, true, 1);
 display.showNumberDec(seconds, true, 2);

 delay(1000);
}

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

Создание пользовательского интерфейса

Я решил добавить в свой таймер возможность управления с помощью кнопок. Это позволит устанавливать желаемое время таймера вручную. В статье нет информации о подключении кнопок к Arduino, но я решил использовать два тактильных переключателя для управления таймером.

Я подключил один тактильный переключатель к цифровому выводу 2 Arduino, а второй — к цифровому выводу 5. Я также использовал подтягивающие резисторы 10 кОм, чтобы обеспечить уровень “HIGH” на выводах Arduino, когда кнопки не нажаты.

В функции “setup” я установил режимы цифровых выводов 2 и 5 как входы с помощью функции “pinMode”.

В функции “loop” я проверил состояние кнопок с помощью функции “digitalRead”. Если кнопка нажата, то функция “digitalRead” возвращает значение “LOW”, в противном случае — “HIGH”.

Если нажата первая кнопка (подключена к выводу 2), я увеличил значение переменной “timerSeconds” на 1 секунду. Если нажата вторая кнопка (подключена к выводу 5), я уменьшил значение “timerSeconds” на 1 секунду.

Я также добавил условие, чтобы значение “timerSeconds” не выходило за пределы от 0 до 9999 секунд.

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

#include <TM1637Display.h>

#define CLK 3
#define DIO 4

TM1637Display display(CLK, DIO);

long timerSeconds;

const uint8_t doneSegments[] = {0x3F, 0x06, 0x5B, 0x3F}; // Коды сегментов для "DONE"


void setup {
 display.setBrightness(7);
 timerSeconds = 10; // Устанавливаем начальное время таймера в 10 секунд
 pinMode(button1Pin, INPUT_PULLUP); // Устанавливаем вывод 2 как вход с подтягивающим резистором
 pinMode(button2Pin, INPUT_PULLUP); // Устанавливаем вывод 5 как вход с подтягивающим резистором
}

void loop {
 if (digitalRead(button1Pin) == LOW) { // Проверяем, нажата ли первая кнопка
 timerSeconds++; // Увеличиваем время таймера на 1 секунду
 if (timerSeconds > 9999) {
 timerSeconds = 9999; // Ограничиваем максимальное значение таймера
 }
 }
 if (digitalRead(button2Pin) == LOW) { // Проверяем, нажата ли вторая кнопка
 timerSeconds--; // Уменьшаем время таймера на 1 секунду
 if (timerSeconds 

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

Примеры проектов с таймером на TM1637

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

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

Еще один интересный проект — цифровой часы. В нем можно использовать модуль DS3231 RTC для получения текущего времени и отображать его на семисегментном индикаторе TM1637.

Я также встретил проект термометра, который использует датчик температуры DHT11 для измерения температуры и отображает ее на семисегментном индикаторе TM1637.

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

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

Если у вас есть свои идеи проектов с использованием TM1637 и Arduino, поделитесь ими в комментариях!

Вот и подходит к концу моё путешествие по созданию таймера на семисегментном индикаторе TM1637 и Arduino Uno. Я узнал много нового о работе с этим модулем и библиотекой TM1637.

В начале я подключил TM1637 к Arduino и установил библиотеку. Затем я создал простой таймер, который отсчитывает время и отображает его на индикаторе.

Я расширил функционал таймера, добавив возможность отображать сообщение "DONE" по окончании отсчета. Я также научился использовать датчики времени, в частности модуль DS3231 RTC.

В завершение я создал простой пользовательский интерфейс с помощью кнопок, который позволяет управлять таймером вручную.

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

Я рекомендую всем, кто интересуется электроникой и программированием, попробовать создать свой собственный таймер на TM1637. Это отличный способ научиться работать с Arduino и получить практический опыт в создании электронных устройств.

Спасибо за внимание!

Дополнительные ресурсы

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

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

Также полезным ресурсом является официальный форум Arduino. На нем вы можете задать вопросы о работе с Arduino и получить помощь от опытных пользователей.

Еще один полезный ресурс — сайт "Makerguides.com". На нем вы найдете множество статей и видеоуроков по различным проектам с Arduino и другими электронными компонентами.

Не забывайте также про YouTube. На нем вы можете найти множество видеороликов с описанием разных проектов с TM1637 и Arduino, в том числе и кухонных таймеров, часов и термометров, о которых я говорил раньше.

И, конечно же, не забывайте про самый важный ресурс — свой собственный мозг! Экспериментируйте, пробуйте новые решения, не бойтесь ошибаться. Только так вы сможете научиться создавать собственные уникальные проекты.

В процессе создания своего таймера я часто обращался к таблицам, которые помогали мне быстро найти необходимую информацию о подключении и функциях модуля TM1637. Я думаю, что такая таблица будет полезной и вам.

Таблица содержит основные параметры модуля TM1637 и его подключение к Arduino Uno:

Параметр Описание Значение
Тип Тип модуля 4-разрядный семисегментный индикатор
Чип Используемый чип драйвера TM1637
Интерфейс Тип интерфейса связи с Arduino SPI
Питание Напряжение питания модуля
Ток Максимальный ток потребления модуля 20мА
Подключение к Arduino Uno
VCC Положительный вывод питания 5V Arduino
GND Отрицательный вывод питания GND Arduino
CLK Тактовый сигнал Цифровой вывод 3 Arduino
DIO Данные Цифровой вывод 4 Arduino

Эта таблица поможет вам быстро найти необходимую информацию о модуле TM1637 и его подключении к Arduino Uno. бизнес-процессами

Кроме того, я рекомендую изучить документацию к библиотеке TM1637, в которой вы найдете подробное описание всех доступных функций и методов.

Желаю удачи в ваших проектах с TM1637 и Arduino!

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

Таблица сравнивает модули TM1637, MAX7219 и HT16K33:

Параметр TM1637 MAX7219 HT16K33
Тип 4-разрядный семисегментный индикатор 8x8 матричный индикатор 16-сегментный индикатор
Чип TM1637 MAX7219 HT16K33
Интерфейс SPI SPI I2C
Питание
Ток 20мА 20мА 20мА
Количество сегментов 7 (плюс точка) 64 16
Яркость Регулируемая (8 уровней) Регулируемая Регулируемая
Стоимость Низкая Средняя Средняя
Сложность использования Низкая Средняя Средняя

Как видно из таблицы, TM1637 — это простой и доступный модуль, который идеально подходит для создания простых проектов с семисегментными индикаторами. Если вам нужно отобразить более сложную информацию, например, графики или изображения, то лучше использовать модуль MAX7219 с матричным индикатором.

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

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

FAQ

В процессе создания своего таймера у меня возникло несколько вопросов, которые я думаю, могут заинтересовать и вас. Поэтому я составил список часто задаваемых вопросов (FAQ) с ответами.

Q: Какие пины Arduino использовать для подключения TM1637?

A: Вы можете использовать любые цифровые пины Arduino для подключения TM1637. В примере "TM1637Test" используются пины 2 и 3, но я использовал пины 3 и 4. Важно только указать правильные пины в коде.

Q: Можно ли использовать другие модули RTC кроме DS3231?

A: Да, вы можете использовать другие модули RTC, например, PCF8563 или DS1307. Важно только установить правильную библиотеку для работы с выбранным модулем.

Q: Как установить библиотеку TM1637 для Arduino?

A: Существует два способа установки библиотеки: через "Library Manager" и через загрузку ZIP-архива. В "Library Manager" введите "tm1637" в строку поиска и выберите библиотеку Avishay Orpaz. Нажмите "Install".

Для установки из ZIP-архива скачайте архив с GitHub, откройте Arduino IDE и перейдите в меню "Sketch" -> "Include Library" -> "Add .ZIP Library". Выберите скачанный архив и нажмите "Открыть".

Q: Как изменить яркость индикатора TM1637?

A: Для изменения яркости используйте функцию "setBrightness". Ей можно передать значение от 0 (минимальная яркость) до 7 (максимальная яркость). Например, чтобы установить максимальную яркость, используйте код:

display.setBrightness(7);

Q: Как отобразить символы на TM1637?

A: Для отображения символов используйте функцию "setSegments". Ей необходимо передать массив символов и количество символов. Например, чтобы отобразить слово "DONE", используйте код:

const uint8_t doneSegments[] = {0x3F, 0x06, 0x5B, 0x3F}; // Коды сегментов для "DONE"
display.setSegments(doneSegments, 4);

Коды сегментов можно найти в документации к библиотеке TM1637.

Q: Как задать начальное время таймера?

A: В функции "setup" инициализируйте переменную, которая хранит время таймера. Например, чтобы задать начальное время в 10 секунд, используйте код:

long timerSeconds = 10;

Q: Как увеличить или уменьшить время таймера с помощью кнопок?

A: Подключите кнопки к цифровым выводам Arduino и проверьте их состояние с помощью функции "digitalRead". Если кнопка нажата, то функция "digitalRead" возвращает значение "LOW", в противном случае — "HIGH".

В зависимости от того, какая кнопка нажата, увеличивайте или уменьшайте значение переменной, которая хранит время таймера.

Надеюсь, эти ответы помогли вам уяснить основные моменты работы с TM1637 и Arduino при создании таймера.

Если у вас еще есть вопросы, обращайтесь к документации к библиотеке TM1637 или к официальному форуму Arduino.

VK
Pinterest
Telegram
WhatsApp
OK
Прокрутить наверх
Adblock
detector