Готов к труду и обороне – так расшифровывается это загадочное ГТО. Система ГТО была создана еще в 30ых годах 20 века, но была благополучно забыта после развала СССР. В 2014 году произошло возрождение ГТО.
На дворе 21 век – век технологий. Почему бы нам не автоматизировать сдачу ГТО?
Сегодня мы будем модернизировать сдачу норматива по бегу.
Идея
Начинается все, как обычно, с идеи. Смотрим на картинку.
Алгоритм
Алгоритм такой:
- Подключаемся по Bluetooth к устройству
- Когда будем готовы, нажимаем кнопку старт
- Раздается сигнал, сообщающий бегуну о старте. Время пошло
- Ожидаем финиша
- Как только бегун пересекает линию финиша – посылаем команду на смартфон о финише.
- В приложении будет показано время финиша. Если время финиша устраивает, то переходим на экран, который попросит ввести данные о бегуне и дистанцию, а потом выведет результат забега в виде значка ГТО.
Детали
Нам понадобятся:
Arduino UNO
Будет мозгом нашего устройства.
Troyka shield
Его надеваем на Arduino UNO. К нему проще простого подключить все датчики и Bluetooth.
Bluetooth модуль
С его помощью мы будем связываться со смартфоном. См. статью Подключаем к Arduino модуль Bluetooth
Динамик
Для готового устройства нужно взять что-нибудь мощнее. Для прототипа сойдет обычная пищалка.
Лазер
Для Arduino есть модули-лазеры. Если такого нет, то можно взять лазерную указку. Нам требуется направленный луч света.
Фоторезистор
На него нужно направить луч лазера.
Макет устройства
Начнем с присоединения Troyka к Arduino UNO. Насаживаем Troyka поверх Arduino UNO
Теперь нужно подключить датчики и Bluetooth. Собираем схему.
Еще нужно подумать на счет размещения фоторезистора и лазера. Лазер должен быть направлен точно в фоторезистор. Фоторезистор стоит защитить ободом для того, чтобы уменьшить воздействие света. Я собрал небольшой макет. Каркас распечатан на 3D принтере.
Макет собран. Пришло время программирования.
Код
#include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX Bluetooth #define BUZZER 4 #define LASER 2 #define LDR A5 //Light Depend Resistor, если что int val; //Показания фоторезистора char inc_byte; //Переменная для входящих данных от Bluetooth float s_time, f_time, r_time; //Переменные для подсчета времени void setup() { mySerial.begin(9600); Serial.begin(9600); pinMode(BUZZER, OUTPUT); pinMode(LASER, OUTPUT); digitalWrite(LASER, HIGH); } void loop() { //Если появились данные с Bluetooth if (mySerial.available() > 0) { //Считываем входящий байт inc_byte = mySerial.read(); Serial.println(inc_byte); // Если пришла команда СТАРТ if (inc_byte == 'S') { Serial.println("Start"); tone(BUZZER, 1000); delay(1000); noTone(BUZZER); s_time = millis(); while (inc_byte != 'i') { finish(); } } } } void finish() { // Ждем сигнала пересечения линии val = (analogRead(LDR)); if (val > 50) { f_time = millis(); r_time = f_time - s_time; r_time = r_time / 1000 + 1.0; Serial.println("Finised"); Serial.println(r_time); //Отправляем сообщение о финише через Bluetooth mySerial.write('F'); inc_byte = 'i'; } }
Пояснения
millis() – функция, встроенная в Arduino IDE, которая возвращает время, прошедшее с момента запуска контроллера. Она может пригодиться для измерения времени, прошедшего с начала какого-нибудь события.
Я написал небольшую программу для тестирования этой функции. После запуска программы, откройте Serial monitor. Когда будете готовы, впишите ‘s’ в строку ввода данных.
bool start = false; int incByte = 0; float s_time, f_time, rf_time; void setup() { Serial.begin(9600); Serial.println("Type 's' when you are ready"); while(!start) { if (Serial.available() > 0) { incByte = Serial.read(); if(incByte == 's') start = true; } } Serial.println("Arduino started!"); s_time = millis(); Serial.print("Start time is: "); Serial.println(s_time); delay(2000); //Искусственная задержка. f_time = millis(); rf_time = (f_time - s_time) / 1000.0; Serial.print("Finish time is: "); Serial.println(f_time); Serial.print("Measured time in seconds is: "); Serial.println(rf_time); } void loop() { // put your main code here, to run repeatedly: }
Запуская программу, вы можете заметить, что замеренное время иногда отличается от ожидаемого на 1 миллисекунду или около того. Так происходит из-за того, что на выполнение команд контроллеру нужно время. Небольшое, но все же.
Приложение для Android
Чтобы было удобно собирать информацию о забегах, нужно сделать Android приложение. С помощью этого приложения также будут отдаваться команды о начале забега. Телефон, на котором установлено приложение, должен иметь Bluetooth.
Я сделал макет такого приложения. После соединения с Bluetooth вылезает экран с секундомером. При нажатии кнопки “Start”, на Arduino посылается сигнал о начале забега. Издается звуковой сигнал, который сообщает бегуну о начале забега. Как только бегун пересекает линию финиша, Arduino отправляет сигнал об остановке.
Если время забега устраивает, нужно нажать на “Results”. Откроется новый экран. Здесь нужно заполнить информацию о бегуне. Когда информация будет заполнена, нужно нажать на “My result”. Ваш результат будет выведен на экран в виде значка ГТО.
Если делать настоящее приложение, то нужно добавить возможность поделиться результатом или сохранить его в базу данных ГТО. Так же нужно добавить возможность добавления бегуна для быстрого результата. А это же макет, показывающий, как еще можно использовать Arduino, Bluetooth и датчик пересечения.
Я не буду рассказывать о том, как создать такое приложение – эта тема далеко не на один урок. Для тех, кто разбирается - скачать файлы приложения можно тут. Делалось приложение в Android Studio, если что.
Будущее?
Основываясь на принципе, представленном выше, можно создать устройство, предназначенное для автоматического сбора результатов ГТО по бегу и занесения их в базы данных.
Физруки по всей стране смогут вздохнуть с облегчением – не надо больше самостоятельно вносить результаты в тетради или таблицы Excel. Все сделает устройство. Нужно только поудобнее расположиться в кресле и, потягивая лимонад из бокала, нажимать на кнопку.
Идем дальше. А что если устройство будет полезным не только физрукам? Оно пригодится всем спортсменам бегунам. Устройство будет устанавливаться на легкоатлетических дорожках и помогать бегунам заниматься спортом.
А если пойти еще дальше, то можно создать приложение-соцсеть для бегунов, в котором можно взаимодействовать с устройством. Там будет вестись статистика тренировок, спортсмены будут кооперироваться и вместе выходить на прогулки, а соответственно – меньше филонить.
Но чего-то я размечтался. Пора закругляться.
Итог
Сегодня мы нашли еще одно применение Bluetooth, собрали датчик пересечения из лазера и фоторезистора, а также помечтали о получении мотивации таки выйти и сделать кружок на стадионе. А чего, собственно, мечтать? За дело!
Прикрепленные файлы:
- arduino code.rar (1 Кб)
Комментарии (6) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
- фоторезистор обладает существенной инерционностью. Нужен фотодиод.
- смартфон + блютуз = также задержка. И потом, непонятно, как одновременно давать отмашку "Старт" и нажимать виртуальные кнопки на смартфоне. Крайне сомнительная затея!
[Автор]
Задержка в виде смартфон + блютуз сказывается только на приеме сигнала о финише. Результат увеличивается не более чем на несколько сотых секунды.
Время забега так же считается на Ардуино, погрешностью такому расчету будет только фоторезистор. И тот не более чем на сотые секунды. Если настолько важна точность - забирайте показания с Ардуино.
На счет отмашки и нажатии кнопки. Если внимательно прочитать статью, станет ясно, что при нажатии кнопки раздается звуковой сигнал о старте.
Если же мечтать, то отличная идея - измеритель скорости бега на основе GPS-модуля, не нужно никаких стационарных устройств, которые надо чем-то питать, а возможно охранять от других спортсменов - любителей литробола) - сказал я, поглаживая свой живот.