Главная » Arduino
Призовой фонд
на сентябрь 2017 г.
1. 1000 руб
PCBWay
2. Осциллограф DSO138
Паяльник
3. Тестер компонентов MG328
Паяльник
4. Регулируемый паяльник 60 Вт
Паяльник
5. 100 руб.
От пользователей

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

Готов к труду и обороне – так расшифровывается это загадочное ГТО. Система ГТО была создана еще в 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

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
iMAX B6 - зарядное для Lion, LiPo, LiFe, Pb, NiCd и NiMH аккумуляторов Осциллограф DSO138
вверх