ГТО по-современному

Готов к труду и обороне – так расшифровывается это загадочное ГТО. Система ГТО была создана еще в 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, собрали датчик пересечения из лазера и фоторезистора, а также помечтали о получении мотивации таки выйти и сделать кружок на стадионе. А чего, собственно, мечтать? За дело!