Pages: [1]   Go Down
Author Topic: Virtual Cycling by controling the VLC Media Player (with sketch)  (Read 965 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

By Hans Näsström
This is a Virtual Cycling VIDEO-CONTROLER connected to a reed-switch on your training/spinning -bike.
This program can control video playback speed on a VLC media player by emulating Hot-key´s for the player,
works only on ARDUINO LEONARDO systems. It controls speed from 40% to 200% and stops and pause if you stop pedaling.
At normal pedaling speed the video will play at 100% speed.
For this to work properly ---
1: Start the video with a suitable video and then set it in pause mode (key U).
2: Start (connect) the ARDUINO LEONARDI and wait 10 sec. for it to set up.
3: And away you go! - Start pedaling!

Set VLC-Hotkeys as follows,---- Tools--Preferences--Hotkeys-----
[Pause/Play]: Double click, set and save both Hotkey and Global, set to: the letter u
[Slower (fine)]: Double click, set and save both Hotkey and Global, set to: numpad 4
[Faster (fine)]: Double click, set and save both Hotkey and Global, set to: numpad 6
Save these settings and close the player for it to take effect.
A large number of virtual cycling videos can be downloaded from YouTube, my favorite is:


You can download this video from this place, note the double ss before youtube…
[http://www.ssyoutube.com/watch?v=FTmPk8qpxQA&playnext=1&list=PLXx7G1Mb0J8V4lAGyRzL2g07LBLqLHYZL&feature=results_main]

You will need this hardware fixes:
Set a magnet on and a magnetic reed-switch by the trainer-bike´s wheel, closing only ONES every wheel turn,
(magnet north pole pointing towards the reed-switch).
Attached the reed-switch cables to Digital pin3 and Ground on the Arduino Leonardo.
Set a pull up resistor 100kOhm between +5V and Digital pin3
This software is free to use but on your one risk. Beware it will send keystrokes u, 4, and 6 now and then.
Happy Cycling/Training!



Code:

int videostep=1;
int steplevel=1;
int pause_run=0; // run = 1   pause = 0
int Rot = 0;  // Wheel rotation counter
int bike_wheel_rev = 0;
unsigned long time;
float cruise=61;      // ATTENTION!! Set this value to the number of wheelturns on YOUR bike during
                      // 4 sek and normal cruising speed (the video will go at 100% speed at this count)
void setup()
{

  time=millis();
  while ((time+5000)>millis()); {  } // time for system to settle, setting up Com port etc
  
  Serial.begin(9600);
  
  attachInterrupt(0, rpm, FALLING); // Set a pull up 10K resistor from 5V to Digital pin 3 (interupt 0).
  cli();            // Disable interrupts for now

  // initialize control over the keyboard:
  Keyboard.begin();
  
 //Step down speed from 100% to 40%    
  int var = 0;
  while(var < 6){
  Keyboard.press('4'); delay(100); Keyboard.releaseAll();delay(100);
  var++;
}

}

void loop ()
{

  int Rot=0;  
  bike_wheel_rev = 0; //Set bike_wheel counter to 0
  sei(); //Enables interrupts
  delay (4000);        //count # bike wheel rev during 4 sec
  cli(); //Disable interrupts
  Rot = (bike_wheel_rev);   //Rot = revolutions during 4 sec

     if (Rot<20 && pause_run == 1)    {
     pause_run = 0;
     Keyboard.press('u'); delay(100); Keyboard.releaseAll(); delay(100);
  }
  if (Rot>19 && pause_run == 0)    {
    pause_run = 1;  
    Keyboard.press('u'); delay(100); Keyboard.releaseAll(); delay(100);
  }
  if (Rot<(cruise*0.4))   { steplevel=1;}  // Serial.println("1-#");    
  if (Rot>(cruise*0.5))   { steplevel=2;}  // Serial.println("2-##");        
  if (Rot>(cruise*0.6))   { steplevel=3;}  // Serial.println("3-###"); wheel speed at 50% video speed
  if (Rot>(cruise*0.7))   { steplevel=4;}  // Serial.println("4-####");  
  if (Rot>(cruise*0.8)) { steplevel=5;}  // Serial.println("5-#####");
  if (Rot>(cruise*0.9))   { steplevel=6;}  // Serial.println("6-######");  
  if (Rot>cruise)         { steplevel=7;}   // Serial.println("7-#######");  Wheel speed at 100% video speed
  if (Rot>(cruise*1.1))   { steplevel=8;}  // Serial.println("8-########");
  if (Rot>(cruise*1.2))   { steplevel=9;}  // Serial.println("9-#########");  
  if (Rot>(cruise*1.3))   { steplevel=10;} // Serial.println("10-##########");
  if (Rot>(cruise*1.4))   { steplevel=11;} // Serial.println("11-###########");
  if (Rot>(cruise*1.5))   { steplevel=12;} // Serial.println("12-############");
  if (Rot>(cruise*1.6))   { steplevel=13;} // Serial.println("13-#############");
  if (Rot>(cruise*1.7))   { steplevel=14;} // Serial.println("14-##############");
  if (Rot>(cruise*1.8))   { steplevel=15;} // Serial.println("15-###############");
  if (Rot>(cruise*1.9))   { steplevel=16;} // Serial.println("16-################");
  if (Rot>(cruise*2))     { steplevel=17;} // Serial.println("16-################"); Wheel speed at 200% video speed

  while (videostep<steplevel && steplevel<17) // adjust video speed by stepping controler to the right, (step up speed)                      
  {
    videostep = videostep +1;
    Keyboard.press('6'); delay(100); Keyboard.releaseAll(); delay(100);
  }

  while (videostep>steplevel&&steplevel>0)// adjust video speed by stepping controler to the left, (step down speed)
  {
    videostep = videostep -1;
    Keyboard.press('4'); delay(100); Keyboard.releaseAll(); delay(100);
  }                          
  
}

void rpm ()      //This is the function that the interupt calls
{
  bike_wheel_rev++;
  delay(100);
}

/[Code]

[/code]
« Last Edit: February 26, 2013, 04:37:11 am by HasseBasse » Logged

Global Moderator
Offline Offline
Brattain Member
*****
Karma: 481
Posts: 18742
Lua rocks!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Your post has got smiley faces and stuff like that in it.

Please edit your post, select the code, and put it between [code] ... [/code] tags.

You can do that by hitting the # button above the posting area.
Logged


Pages: [1]   Go Up
Jump to: