Главная » Arduino
Призовой фонд
на июнь 2017 г.
1. UNI-T UT-71E
ООО Промэлектроника
2. Тестер компонентов LCR-T4
Паяльник
3. 200 руб.
От пользователей

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

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

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (3) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
Андрей #
Всё это замечательно, только:
- фоторезистор обладает существенной инерционностью. Нужен фотодиод.
- смартфон + блютуз = также задержка. И потом, непонятно, как одновременно давать отмашку "Старт" и нажимать виртуальные кнопки на смартфоне. Крайне сомнительная затея!
Ответить
0

[Автор]
Симилячник #
Я взял фоторезистор из-за его доступности. Да, в готовом для практического применения приборе нужно поставить фотодиод, а то и чего-нибудь еще.
Задержка в виде смартфон + блютуз сказывается только на приеме сигнала о финише. Результат увеличивается не более чем на несколько сотых секунды.
Время забега так же считается на Ардуино, погрешностью такому расчету будет только фоторезистор. И тот не более чем на сотые секунды. Если настолько важна точность - забирайте показания с Ардуино.
На счет отмашки и нажатии кнопки. Если внимательно прочитать статью, станет ясно, что при нажатии кнопки раздается звуковой сигнал о старте.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Raspberry Pi 2
Raspberry Pi 2
Конструктор регулируемого преобразователя напряжения LM317 Паяльник с регулировкой температуры
вверх