Идея заставить двигаться сутулого игрока в компьютерные игры не нова, уже давно существует 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);

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



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

Не останавливайтесь! Занимайтесь на здоровье!
Only registered users can participate in poll. Log in, please.
Какие мысли приходят вам в голову при занятиях на тренажёре?
15.06%Какой я стану сильный39
1.54%Какая я стану стройная и красивая4
37.07%Когда кончится это мучение96
46.33%Мысли покидают меня120
259 users voted. 95 users abstained.