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

Простой секундомер — таймер на Arduino Uno

В этой статье описан простой секундомер/таймер на базе недорогой платы Arduino Uno. таймер можно использовать для измерения промежутков времени при разработке таких устройств, как реле времени, автоматические выключатели и т.д. Кроме того, этот таймер можно использовать для лабораторных / промышленных целей. Таймер измеряет промежуток времени между нажатием кнопки SART и нажатием кнопки STOP. «Нажимать» кнопки может и какое-либо внешнее устройство, если использовать контакты реле или MOSFET ключей, подключенных к соответствующим к выводам кнопок. Должны быть использованы только «беспотенциальные» переключатели или ключи (на их выводах не должно присутствовать дополнительное напряжение)

Схема устройства

Принципиальная схема показана на рис. 1, помимо платы Arduino Uno вам потребуется несколько дополнительных компонентов. Запуск и остановка таймера осуществляется двумя кнопками. Кнопки могут быть нормально-разомкнутыми или нормально-замкнутыми.

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

Перед измерением времени нажмите кнопку RESET. На дисплее появится сообщение «Timing test kit» в первой строке и «Time(s): 0.000» во второй.

Теперь нажмите кнопку START, чтобы начать отсчет. Подсчитанное значение будет отображаться на дисплее. Вы можете остановить счет в любой момент, нажав кнопку STOP. Время счета отображается в секундах с левой стороны и в долях секунд (в миллисекундах) с правой стороны дисплея.

Если вы хотите управлять таймером от внешнего устройства, то целесообразно использовать разъемы, подключенные к контактам кнопок START и STOP. Устройство можно поместить в подходящего размера коробку-корпус. На переднюю панель нужно вывести дисплей и три кнопки.

Устройство тестировалось на «беспаечной» макетной плате типа breadboard.

ниже приводится текст «прошивки» устройства (скетч Arduino):

Если у вас пока что нет платы Arduino Uno или вам лень возиться с железом, вы можете проверить работу проекта в симуляторе Proteus 8 (проект для Proteus вы можете скачать по ссылке в конце статьи).

Если у вас пока что нет платы Arduino Uno или вам лень возиться с железом, вы можете проверить работу проекта в симуляторе Proteus 8 (проект для Proteus вы можете скачать по ссылке в конце статьи).

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

Здесь вы можете посмотреть короткое видео, демонстрирующее симуляцию проекта в Proteus 8 professional:

В архиве файл прошивки (скетч) для Arduino, и проект для симуляции в Proteus 8. В папке Proteus вы также найдете откомпилированный *.hex файл прошивки для использования в Proteus.

Модель Arduino UNO для Proteus можно скачать на этой странице…
(в проекте использована вторя по тексту страницы модель Arduino Uno — Arduino Uno Library AtMega328 )

Источник

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Урок 22. Работа со временем в Ардуино. Проект спортивного секундомера.

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

Рассмотрим функции работы со временем. Разработаем спортивный секундомер на базе платы Ардуино.

Для работы со временем в системе Ардуино существуют 4 стандартные функции:

Рассмотрим эти функции подробно.

void delay(unsigned long time)

Функция приостанавливает работу программы на время time, заданное в мс.

delay(500); // пауза на 0,5 сек

Мы уже использовали эту функцию в предыдущих уроках. Использовали в отладочных программах. В практических программах функция применяется редко.

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

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

Время цикла равно сумме: времени 100 мс, времени выполнения программного блока и времени перехода на начало цикла while(). Время программного блока может меняться в зависимости от алгоритма выполнения программы. Время перехода на начало цикла тоже не определено точно. В результате время цикла можно определить только приблизительно.

Для организации циклов с заданным временем лучше использовать прерывание по таймеру (урок 10). Надо только понимать, что такой способ обеспечивает стабильное время цикла, но оно может несколько отличаться от заданного. Например, библиотека MsTimer2 задает время в мс. Реальное время может отличаться на 1-2 мкс. В некоторых приложениях, например в часах, ошибка будет накапливаться и приведет к недопустимой погрешности.

void delayMicroseconds(int time)

Функция приостанавливает работу программы на время time, заданное в мкс.

delayMicroseconds(50); // пауза на 50 мкс

Аналог функции delay(), только обеспечивает более короткие остановки программы. Вполне допустима для использования в практических программах по двум причинам.

unsigned long millis(void)

Функция возвращает время в мс, с момента запуска текущей программы. Значение времени переполняется через 1193 часов, приблизительно 50 суток.

tm = millis(); // чтение времени в tm

По сути это функция чтения системного времени Ардуино. Время считается в параллельном процессе и не зависит от алгоритмов выполнения программы, остановок, в том числе и функцией delay(), и т.п. Для измерения интервалов времени необходимо считать системное время в начале и конце интервала и выполнить разность этих значений. Ниже будет пример программы для работы с временными интервалами.

Запрещение прерываний функцией noInterrupts() на длительное время может нарушить работу системных часов.

Точность работы функции millis().

Точность отсчета времени функцией millis() определяется точностью и стабильностью частоты кварцевого резонатора платы Ардуино. Даже для дешевых резонаторов погрешность частоты не превышает 30 ppm. Вместе с температурной нестабильностью, в нормальных условиях, это 50 ppm, что соответствует ± 0,00005 %. Таким образом, суммарная абсолютная ошибка системного времени Ардуино составит:

Наверное, вполне допустимая точность для создания секундомеров и даже часов.

unsigned long micros(void)

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

tm = micros(); // чтение времени в tm

На платах Ардуино с частотой тактирования 16 мГц разрешение значения функции micros() составляет 4 мкс. Для плат с частотой 8 мГц – 8 мкс.

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

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

Управление секундомером осуществляется двумя кнопками:

После нажатия на кнопку ПУСК/СТОП секундомер начинает отсчитывать время. Повторное нажатие на эту кнопку останавливает счет. Следующее нажатие продолжает отсчет времени с остановленного значения. Таким образом, секундомер может быть использован для отсчета ”чистого ” времени спортивных соревнований.

Для сброса значения времени необходимо нажать кнопку СБРОС.

Время отображается на четырех разрядном семисегментном индикаторе в следующих форматах.

Значение времениРазряд 3Разряд 2Разряд 1Разряд 0
0 … 59 сексекундысотые доли секунды
1 … 10 минутминутысекундыдесятые доли секунды
10 … 99 минутминутысекунды
Больше 99 минут

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

Схема спортивного секундомера на базе платы Arduino UNO R3.

По уже хорошо известным нам схемам подключаем к плате Ардуино:

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

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

Если кнопки управления секундомером физически расположены на значительном расстоянии от платы, то лучше их подключить по схеме из охранной сигнализации, урок 17. Или хотя бы соединить входы кнопок с питанием + 5 В через резисторы 1 кОм.

Но для отладки и проверки программы достаточно приведенной схемы. Я собрал ее на макетной плате.

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

Программа для спортивного секундомера на Ардуино.

Скетч программы для секундомера выглядит так.

#define SOUND_PIN 18 // звуковой излучатель, вывод 18 (A4)

// тип индикатора 1; выводы разрядов 5,4,3,2; выводы сегментов 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

Button buttonReset(16, 10); // кнопка СБРОС, вывод 16 (A2)
Button buttonStartStop(17, 10); // кнопка ПУСК/СТОП, вывод 17 (A3)

void setup() <
MsTimer2::set(2, timerInterrupt); // прерывания по таймеру 2 мс
MsTimer2::start(); // разрешение прерывания
pinMode(SOUND_PIN, OUTPUT); // вывод звукового излучателя
>

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

Подробно хочется остановиться на программном блоке “отсчет времени”. Счет времени можно реализовать разными способами. Например, можно считать время в миллисекундах, а в блоке отображения делать перевод в нужный формат. Я решил, что намного проще считать время в формате:

В этом случае не приходится выполнять двоично-десятичные преобразования для отображения минут. Конечно, если бы у нас была задача измерения одного интервала времени, то достаточно было бы считать время функцией millis() в начале и конце интервала, а затем вычислить разность. Но нам необходимо накопление времени, поэтому алгоритм несколько усложняется.

В программе достаточно комментариев. Думаю, Вы без труда разберетесь в ней и сможете создать устройство под свои задачи, будь это спортивный секундомер, система для интеллектуальных игр ”Что? Где? Когда?” или ”Брейн ринг” и многое другое. Мы вернемся к секундомеру и работе со временем при разработке спортивных табло на базе светодиодных модулей. Надеюсь, уже этим летом.

Источник

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

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

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

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

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

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

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

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

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

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

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

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

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

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

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

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

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

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

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

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

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

Код для Arduino

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

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

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

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.

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

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

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

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

Источник

Arduino.ru

Проект. Секундомер со стартом по датчику движения. Обучение.

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

Конечно, можно было бы все это вывесить просто в «ищу исполнителя», но интересно понять, как оно все работает. Тем более с программированием знаком (правда не на сях), с электроникой знаком. Издалека. Да.

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

за готовое решение готов заплатить.

Платформа Arduino Uno v3

PIR Motion Sensor HC-SR501

Итак, проблема первая: датчик постоянно детектит движение (на cериал мониторе постоянно «Motion Detected»)

Датчик PIR Motion Sensor HC-SR501 подключен к GND, Ардуино вход 2, 5V

Спасибо, поменяю на ИК. Тем не менее не понятно, почему врет датчик. Брак?

Подтяни вход 2 на минус через резистор 10КОм

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

Спасибо, поменяю на ИК. Тем не менее не понятно, почему врет датчик. Брак?

1. Затупите чувствительность.

Подтяни вход 2 на минус через резистор 10КОм

Лазерный датчик заказал, спасибо за ссылку, Okmor!

Какие преимущества и недостатки между » инфракрасным передатчиком с приемником» и » л азерным датчиком» для этого проекта? Цена? Точность? Простота реализации?

И еще вопрос. Нужно заказывать 7 сегменты. Желательно с высотой буквы не меньше 10 см. Есть тут какие подводные камни или в схеме ничего не меняется от размера и только вопрос цены самих дисплеев имеет место быть?

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

Самый простой и дешевый способ это фоторезистор и лазерная указка.

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

Фиксироваться должно пересечение ворот шириной 1 метр.

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

Лазерному же датчику никакой «напарник» на другой стороне ворот не нужен, правильно?

Нужен. так как сигнал должен от чего то отразится. хотя этим отрожателем может и стать мотоциклист :-))

Нужен. так как сигнал должен от чего то отразится. хотя этим отрожателем может и стать мотоциклист :-))

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

Сегодня проект прошел первые боевые испытания.

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

Из минусов этого решения:

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

Код написал вот такой (добавил комменты, которыми объяснял другу, как это работает):

Еще приложил бы схему (пусть она и простейшая, но может кому-то и пригодится), но пока не нашел софтинку, что бы оформить схему в удобоворимом для форума виде (может кто подскажет?)

Акромя лазерного датчика необходимы следующие доработки:

Источник

Регулируемый таймер обратного отсчета на Arduino Mega 2560

Создадим регулируемый таймер обратного отсчета с помощью 4-разрядного 7-сегментного дисплея и Arduino Mega 2560.

Компоненты

Для того, чтобы нам собрать таймер обратного отсчета на Ардуино нам нужны будут следующие компоненты:

Из программного обеспечения мы никуда без IDE Arduino.

Проект

Таймер обратного отсчета является, пожалуй, самым естественным проектом для 4-разрядного 7-сегментного дисплея. Исследуя то, что доступно в интернете, я нашел несколько проектов, но не нашел тот, который имел в виду, а именно, автономный настраиваемый таймер обратного отсчета, который можно удобно настроить с помощью кнопок (а не загружая измененный код). Поэтому я решил сделать один из них.

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

Прилагаемый код также может быть использован в других проектах с 4-разрядным 7-сегментным дисплеем. В частности, в нем есть функция, которая отображает заданное число (0-9999) за заданный интервал времени. Возможно, такая функциональность есть в некоторых библиотеках, но быстрый поиск ее не выявил. Так как программирование такого дисплея дело немного хитрое (так как можно показывать только одну цифру за раз), то такая функция действительно удобна.

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

Все компоненты мы соединяем согласно схеме ниже:

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

В собранном виде наш таймер будет выглядеть примерно так:

Как сделать секундомер на ардуино. Смотреть фото Как сделать секундомер на ардуино. Смотреть картинку Как сделать секундомер на ардуино. Картинка про Как сделать секундомер на ардуино. Фото Как сделать секундомер на ардуино

Код / скетч

В нашу среду разработки Arduino IDE мы должны загрузить следующий скетч:

Видео

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *