Как стать автором
Обновить

Подключаем спортивный тренажёр к компьютеру и перестаём отращивать жир, играя в компьютерные игры

Время на прочтение 6 мин
Количество просмотров 21K


Идея заставить двигаться сутулого игрока в компьютерные игры не нова, уже давно существует Kinect у Microsoft, всякие датчики у Sony, Nintendo, а теперь ещё и аксессуары к шлемам виртуальной реальности, которые требуют, чтобы вы шевелили руками-ногами в процессе игры.

Однако, личный опыт пользования такими устройствами показал, что:

1. Играть можно только в те игры, которые явно заточены под датчики движения. А что делать тем, чья любимая игра — «Весёлые Зомби на Острове Невинных», выпущенная в прошлом веке?
2. Движения в игре не совпадают с комфортным/необходимым уровнем нагрузки. Либо быстро устаёшь, либо мышцы не получают нужной нагрузки.

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

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

Кому интересно повторить мой опыт — читаем дальше.

Кратко о том, как это работает


Когда вы шагаете на степпере, в нём перемещается магнит, замыкая и размыкая встроенный датчик (геркон), благодаря чему подсчитывается и выводится на дисплей число шагов.

Установим рядом аналогичный датчик, присоединим его к плате Arduino, а уж её – к компьютеру кабелем USB. Arduino будет сообщать программе на компьютере, когда вы сделаете очередной шаг. Если вы не слишком интенсивно шагаете, программа инструктирует Arduino о том, что нужно сперва привлечь ваше внимание моргающими светодиодами (красным, потом синим, потом обоими), а потом включить назойливый писк. Если это не помогает, программа затемняет изображение на экране компьютера.

Поверьте, это хорошо работает. Вы сразу возобновляете ходьбу.

Изначально я пытался блокировать работу мыши/клавиатуры как наказание за низкую интенсивность физического упражнения. Но это оказалось излишним/раздражающим, достаточно слегка понизить комфорт общения с компьютером, но не блокировать управление совсем.

Опыт использования и перспективы


Двигаться я стал гораздо больше, и это однозначно плюс. Но есть тонкости.

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

Программа пока что настроена на один темп нагрузки. В идеале его нужно регулировать как вручную, так и по графику. А ещё лучше – в зависимости от датчика пульса.

Далее, ноги тренируются достаточно хорошо. А как же руки и всё остальное? Ведь руки заняты клавиатурой и мышью?

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

Посмотреть видео о попытках играть без помощи рук (используя программы, которые я писал для людей с ограниченными возможностями)
Управление голосом в игре:


Управление взглядом в игре:


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

А вообще считаю, что фитнес-центры, в том виде, в котором они есть сейчас, себя отжили. Придёт время развлекательных центров, где физическая нагрузка будет стимулироваться какими-нибудь развлечениями, например, компьютерными играми/соревнованиями.

А пока — сделаем такой у себя дома.

Что нам понадобится?


1. Компьютер, установленный на возвышении. Это важно. Стоя на степпере, вы должны иметь комфортный доступ к клавиатуре и мыши. Я соорудил полочку на шведской стенке.

2. Тренажёр «степпер». Я взял “Domyos Mini Stepper Essential” в «Декатлоне». Но видел очень похожую модель и в «Спортмастере». Вообще сложилось впечатление, что все степперы делают по одинаковым чертежам, внося минимальные косметические изменения.

3. Набор с платой Arduino – самый простой, лишь бы туда входили:
— плата Arduino (в моём случае – китайский аналог Arduino Nano)
— провод USB для соединения с компьютером
— монтажная плата и провода
— 2 светодиода, 2 сопротивления 220 Ом, 1 сопротивление 10 кОм

Можно все эти элементы взять по отдельности.

4. пьезоизлучатель, рассчитанный на напряжение от 5 Вольт. На моём написано – HPM-14A.

5. миниатюрный геркон, например, МКА-10110А. Более крупный геркон здесь работает плохо! Проверено!

6. длинный двухжильный провод, чтобы соединить геркон в тренажёре и Arduino

7. колпачок от старого фломастера, чтобы разместить в нём геркон

8. Паяльник, дрель, пинцет, клеевой пистолет, тестер/мультиметр.

Пошаговая инструкция


1. Добавляем геркон в степпер


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



Подпаиваем провода:



Засовываем геркон в колпачок от фломастера и устанавливаем его, аналогично штатному, но с другого бока. Сразу установить на правильное место не получится. Правильное место – это когда геркон срабатывает точно посередине шага, когда правая педаль находится вровень с левой. Поэтому сначала приклеим скотчем и будем двигать вправо-влево, пока не найдём правильное положение (потребуется тестер, чтобы увидеть, когда контакт замыкается-размыкается):



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

Провода от датчика, выведенные наружу через просверленное отверстие, имеет смысл снабдить легко отсоединяющимися разъёмами (взял из набора с Arduino). Потом много раз задевал провод ногой, и это спасало его от обрыва.



2. Собираем схему с платой Arduino




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



3. Заливаем программу в Arduino


Код программы
// версия для геркона, двух диодов и пьезоизлучателя
int brightnessB=LOW, brightnessR=LOW;
int blinkingB=0; int blinkingR=0;

int speakerPin=8;
int BlueLED=10;
int RedLED=11;

int freq[]={3830,3038,2550,3038};
int cur_freq=0;
int buzzer_value=0;

volatile int stepper=0, old_stepper=0;

// функция обработки прерывания на pin 
void step()
{
  stepper=!stepper;

  Serial.print(stepper);
  Serial.flush();
}

void setup() {

pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(2,INPUT);

Serial.begin(9600);

//attachInterrupt(0,step,CHANGE);

}

void loop() 
{
 delay (200);

  // 1. Принимаем команду от компьютера о яркости светодиода
  while(Serial.available())
  {
    switch(Serial.read())
    {
     case '0': // красный и синий горят, сирена воет
      brightnessB=HIGH; blinkingB=0;
      brightnessR=HIGH; blinkingR=0;
      buzzer_value=1;
      break;

     case '1':
      // Синий и красный перемаргиваются. 
      brightnessB=LOW; blinkingB=1;
      brightnessR=HIGH; blinkingR=1;
      buzzer_value=0;
      break;
    
     case '2': // Синий моргает
      brightnessB=HIGH; blinkingB=1;
      brightnessR=LOW; blinkingR=0;
      buzzer_value=0;
      break;
    
     case '3':// Красный моргает
      brightnessB=LOW; blinkingB=0;
      brightnessR=HIGH; blinkingR=1;
      buzzer_value=0;
      break;

     case '4': // Красный горит
      brightnessB=LOW; blinkingB=0;
      brightnessR=HIGH; blinkingR=0;
      buzzer_value=0;
      break;

    case '5':
      // Тьма. 
     brightnessB=LOW;  blinkingB=0;
     brightnessR=LOW; blinkingR=0;
     buzzer_value=0;
     break;
    }
  } // Прочли все символы из буфера порта, поняли, какая яркость нам нужна


  if(1==blinkingB)
  {  
    if(HIGH==brightnessB) brightnessB=LOW; else brightnessB=HIGH;
  }

  if(1==blinkingR)
  {
    if(HIGH==brightnessR) brightnessR=LOW; else brightnessR=HIGH;
  }
    
  digitalWrite(RedLED,brightnessR);
  digitalWrite(BlueLED,brightnessB);

  if(1==buzzer_value)
  {
    tone(speakerPin, freq[cur_freq], 200);
    cur_freq++;
    if(cur_freq>3) {cur_freq=0;}
  }

  stepper=digitalRead(2);
  if(old_stepper!=stepper)
  {
     Serial.print(stepper);
     Serial.flush();
     old_stepper=stepper;
  }

}


Проверяем, что она работает – в Serial Monitor, который есть в среде разработки Arduino, можно увидеть растущую строку из нулей и единиц, когда вы шагаете на тренажёре.



А если вбивать цифры и посылать их Arduino, то он должен реагировать так:

5 – светодиоды погашены
4 – горит красный
3 – моргает красный
2 – моргает синий
1 – моргает то красный, то синий
0 – Пищит пищалка. Оба диода горят.

4. Запускаем программу на компьютере


Программу DimForce.exe можно взять на гитхабе (в том числе в виде исходников):
https://github.com/MastaLomaster/DimForce

На текущий момент в программе жёстко прошито, что Arduino соединён по порту COM9. Если у вас это не так, сконфигурируйте порт Arduino, как COM9. Либо перекомпилируйте программу, подправив в ней строку в файле DFSerial.cpp:

Port = CreateFile(L"\\\\.\\COM9", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

Когда вы шагаете на тренажёре, в окне программы ноль должен меняться на единицу и обратно:



Если перестанете шагать, светодиоды должны моргать всё назойливее, а затем включится пищалка, и в конце концов экран чуть потемнеет.

Не останавливайтесь! Занимайтесь на здоровье!
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какие мысли приходят вам в голову при занятиях на тренажёре?
15.06% Какой я стану сильный 39
1.54% Какая я стану стройная и красивая 4
37.07% Когда кончится это мучение 96
46.33% Мысли покидают меня 120
Проголосовали 259 пользователей. Воздержались 94 пользователя.
Теги:
Хабы:
+29
Комментарии 70
Комментарии Комментарии 70

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн