Как сделать секундомер на Arduino

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

Секундомер
Секундомер на базе платы Ардуино. 

Необходимые детали

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

  • Ардуино Uno — 1 шт.;
  • модуль LCD 1602 с клавиатурой и регулируемой подсветкой для Arduino UNO R3, совмещающий жидкокристаллический индикатор с 4-разрядной шиной и кнопки управления, — 1 шт.;
  • кабель USB A-B — 1 шт.
  • макетная плата для соединений без пайки — 1 шт.;
  • индикатор 7-сегментный — 1 шт.;
  • резисторы на 220 Ом — 7 шт.;
  • соединительные провода с «папа-папа» — 9 шт.
На плате модуля LCD 1602 имеются отверстия для крепления в приборе.

Штыревые соединения плат проводников ускоряют монтаж, макетирование, отладку и освоение контроллера.

Принципиальная схема

Назначение деталей и порядок их соединения отражены в принципиальной схеме таймера на базе микроконтроллера Arduino UNO R3 и LCD 1602. Открытая архитектура чипа позволяет в широких пределах изменять состав комплектующих и использовать как встроенное, так и бесплатное программное обеспечение. Индикатор способен выводить 4 цифро-буквенные строки с независимым обновлением содержимого.

Схема
Схема секундомера на Ардуино.

Показания таймера отображаются на дисплее LCD 1602 в формате 24h, показывая часы, минуты, секунды с десятыми долями. Прибор задействует 2 секундомера микроконтроллера UNO, управление которыми производится единственной кнопкой по такому алгоритму:

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

Работа с таймерами в Ардуино УНО осуществляется через вызов функции millis(). Она возвращает значение времени, прошедшее с момента старта.

Подсчет производится в параллельном процессе и не зависит от ветвления исполняемой программы, задержек из-за обращений к функции delay() и т.п. Точность вычислений millis() задается стабильностью кварцевого осциллятора на плате.

Схема на макетной плате

Макетная плата удобна для временной сборки и отладки устройства. Она представляет собой пластину с отверстиями (с шагом 2,54 мм). Каждые 5 отверстий соединены в ряды проводящим слоем с клипсами (рельс), которые удерживают проводники и детали. Для ориентации на плате и удобства составления принципиальных схем каждый ряд и линия отверстий маркированы цифрами и буквами. На некоторых платах имеются шины питания, красным цветом выделен проводник для «+» и синим цветом для «-» напряжения. Макетную плату нельзя использовать для работы с опасным напряжением, в т. ч. 220 В.

Схема на макетной плате
Макетная плата — пластина с отверстиями.

Главное преимущество — отсутствие пайки. Можно быстро менять схему подключений в поисках оптимального варианта и по завершении работ составить точную схему соединений.

Моделирование устройства на беспаечной макетной плате поможет быстро выявить ошибки в проекте и выбрать нужный вариант.

Размещение ЖК-дисплея на Arduino

Модуль ЖК-дисплея 1602 легко размещается на макетной плате благодаря стандартному шагу отверстий. После установки остается произвести нужные соединения. Для вывода символьной информации лучше воспользоваться стандартной библиотекой LiquidCrystal, входящей в состав Arduino IDE, предназначенной для работы с 4-битной интерфейсной шиной. Выводы дисплея имеют нумерацию от 1 до 16. Если LCD 1602 получает питание +5 B от Arduino через кабель USB, то для повышения контраста его 3 ножку через резистор 2 кОм надо подключить к положительной шине.

Порядок подключения пинов дисплея после его расположения на макетной плате:

  • 1 (VSS) к шине «земля» (GND);
  • 2 (VDD) к шине +5 В (5V);
  • 15 (А) к шине +5 В (5V);
  • 16 (К) к шине «земля» (GND).
Размещение ЖК-дисплея
Модуль ЖК-дисплея размещается на макетной плате.

Код для Arduino

В секундомере используется индикатор LCD1602, подключаемый параллельной 4-битной шиной. За вывод информации отвечает следующий программный код:

#include // подключение заголовочного файла LiquidCrystal для жидкокристаллического дисплея

LiquidCrystal lcd(2,3,4,5,6,7); // создание объекта, указание пинов ЖКИ (RS,E,D4,D5,D6,D7) // определение для узкой шины

void setup(){ //

lcd.begin(16, 2); // работа с LCD, указывается количество (столбец, строка)

lcd.setCursor(0, 0); // перемещение курсора в начальную позицию (0 столбец, 0 строка)

lcd.print(«LCD1602»); // Вывод надписи «LDC1602» от текущего положения курсора

lcd.setCursor(0, 1); // курсор переводится на 2 строку (0 столбец, 1 строка)

lcd.print(«secundomer»); // выводится текст «secundomer» в строке с курсором

} //

//

void loop(){} // зацикливаем выполнение кода. Для статичной надписи, показаний остановившегося таймера достаточно разового вывода, в применении функции loop нет необходимости.

Пояснения к скетчу

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

Отсчет времени ведется с помощью функции millis(), которая возвращает время, прошедшее от старта программы, выраженное в мс. Подсчет ведется параллельно и не зависит от исполнения пользовательской части кода, вызовов функций типа delay() и т.п. Полная информация о millis() размещена в описании Arduino IDE.

Запуск секундомера

К этому этапу схема должна быть собрана и проверена на правильность соединений, отсутствие потенциальных мест замыканий проводников.

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

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

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

Ссылка на основную публикацию