Psycho Scooter Scramble

32K5753

Intro: Psycho Scooter Scramble



Psycho Scooter Scramble is a blind-driving electric wheelchair game. It consists of two riders, strapped into electric wheelchairs, and two blindfolded pilots, who remotely control the wheelchairs from the sidelines based on information given over headset by their driver.

The basic mechanic is simple: players must drive across the court to get a ball from a stand, then drive back across to put the ball in a
hoop. This action is repeated until all four balls have been scored or the timer runs out.

Since there is an inevitable disconnect between the pilots’ steering and their teammates’ intentions, wheelchairs zigzag across the court at high speeds, colliding with each other, ball stands, the scoreboard, and most everything else; all the while, taking full advantage of the custom steel bumpers.

Psycho Scooter Scramble was created for the Creation Challenge. Team Instructables includes Amanda Ghassaei, Audrey Love, Eric Wilhelm, Gabriella Levine, Greg Johnson, Jake Rogers, Jessy Ellenberger, Matthew Dalton, Noah Weinstein, and Randy Sarafan.

STEP 1: Go Get Stuff

You will need:

per cart**:

(x2) electric wheelchair
(x1) 1"x1"x10' square steel stock
(x1) 2.5"x.175"x20' steel flat bars
(x1) Arduino
(x1) Wireless SD Shield
(x1) Xbee S1
(x1) PC Board
(X12) male header pins
(x4) relays
(x4) 2K resistors
(x4) 1K resistors
(x4) 5.1K resistors
(x1) 9V battery connector
(x1) 9V battery
(x1) 22 AWG stranded wire
(x1) wireless headset
(x1) Large-ish sealable plastic food container
(x1) assorted zip ties

control pedestals:

(x1) Arduino
(x1) Wireless SD Shield
(x1) Xbee
(x1) 9V battery connector
(x1) 9V battery
(x1) 4' x 8' sheet 3/4"wood
(x2) floor flanges
(x2) 1/2" threaded metal pipe
(x2) 24" x 24" acrylic sheet

scoreboard:

(x1) 4' x 8' x 3/4" plywood sheet
(x4) flanges
(x2) 48" threaded pipe
(x2) threaded nipples
(x2) elbow joints
(x2) small whiteboards
(x4) 36 x 24" 1/8" black acrylic sheet
(x2) 36" x 24" x 1/8" orange acrylic sheet (for lettering)
(x2) 12" 7-segment display
(x1) Arduino
(x1) Annoying buzzer
(x1) Light-up stop hand
(x1) Red arcade button
(x1) green arcade button
(x1) PC Board
(x1) 5V relay
(x1) 5V / 120V 10A solid state relay
(x2) giant 7 seg display
(x2 darlington uln2803

goal:

(x1) 8' x 4' x 3/4" plywood board
(x2) Basketball nets
(x1) Staple gun

ball holders:

(x8) Kick balls
(x2) 4' x 8' plywood sheet
(x2) 4x4 wood beam
(x4) 2x4 across
(x1) 20' thin metal rod

miscellaneous:

(x2) referee shirts
(x2) whistles
(x1) 1 yard of bright orange fabric
(x1) 3' dowel rods

**Cart materials are for ideal conditions. Parts may vary depending on the electric wheelchair you are confronted with.

STEP 2: About Electric Wheelchairs

You will need to get an electric wheelchair. While you may be tempted to get a mobility scooter, you should resist this urge because mobility scooters are manually steered and you will need something that can be put into full autopilot.

You can get working electric wheelchairs on Craigslist for much cheaper than you may ever think possible. We got ours for about $150 each. We heard one of the ones we bought typically retails for about $11,000. That is pretty hefty savings.

Some of the wheelchairs that we bought were sold as-is. They did not turn on. We later learned that "as-is" is typically code for "needs new batteries." We solved this by purchasing some 12V deep-cycle forklift batteries for $30 a piece. These turned out to be gel cell batteries that could be positioned on any side. They worked like a charm.

Once we had all 4 electric wheelchairs up and running, much silliness ensued. After we got that out of our system, we then proceeded to fully mod them.

STEP 3: Fit New Batteries

If you end up replacing the batteries in your wheelchair, chances are that you will need to mod the battery compartments to accommodate. The gel cells that we got were great because we could position them in any orientation we wished. This gave us a lot of flexibility to make them fit.

When necessary we cut away non-structural bits to give the batteries more room and/or build new platforms or enclosures to hold the batteries in place. When necessary, we also needed to extend the battery wires to reach the battery terminals.

While this was happening, we were also charging all of the batteries.

STEP 4: Build Armor Frames

In order to maintain safety on the court, we built reinforced steel bumpers around each of the wheelchairs at a fixed height. In this way, the wheelchairs would collide bumper-to-bumper when they would eventually collide.

Tools needed for this step:
Angle Grinder with metal sanding disc
Grinder and Cut-off wheel
MIG welder

For all four chairs, we used two 1"x1"x20' steel square stock to build out the frames. We decided that five support struts would be sufficient to weld continuous steel flat bar to. Each chair was a little different, and needed to be modified differently. Once the main frame supports were welded to the frame, we could weld the flat bar to the supports. This part was a bit tricky, and took a bit of teamwork.

Each bumper was designed to float 3 inches from the ground, and we created a wood jig to guide the flat bar around the steel struts as they were welded and bent in to place. We worked as a team, because the flat bar is long and wobbly. We used one 2.5"x.175"x20' per cart - tacking on the edge of the flat bar as it hovered on a 3" jig from the ground, and then bent and tacked around the frame.

STEP 5: Hack the Wheelchair



For the communication, we used one arduino to receive the information from two joysticks and transmit that data via xbee radio.  We strapped a receiving xbee/arduino onto each wheelchair and used this data to control the wheelchair. 

We wanted to maintain as much of the original controls as possible. To do this we wired into the controller's joystick. The joysticks on these wheelchairs are understandably more advanced and accurate than a normal gaming joystick. They work off of a hall effect principle and have four sensors embedded in them. Here is the joystick's datasheet which explains the pinout, seen in the image above. 

We cut the 8 stranded ribbon cable connecting the joystick to the controller on the wheelchair. On the transmitting end, we wired up the joystick following the pinout diagram so Arduino received two analog inputs (forward / backwards, left / right). 

The wheelchairs will not start if it does not sense that the joystick is connected and in a neutral position. To do this, we needed to mimic the joystick signals with an Arduino. It turned out this was rather tricky to do for the position switches. We ended up wiring the control board to a voltage divider, which we controlled using relays.  The relays were wired in parallel with resistors in the voltage divider so that they shorted out the resistor when closed.  Using two relays wired in this configuration, we could mimic 3 different joystick positions from the center junction of the voltage divider.  These corresponded to the neutral position and two extreme positions on either side of neutral.  This circuit was repeated twice: one for forward, neutral, back, and another for left, neutral, right.

This worked because we only wanted the wheelchair to move in one of four directions and did not care too much about the intermediary values. The wheelchair has some built-in functionality to prevent sudden stops and starts, so this was not a problem.

Here is the receive code:
#define left 4
#define right 5
#define forward 6
#define back 7

byte incomingByte;

void setup(){
  DDRD=0xFF;
  PORTD=0;
  
  Serial.begin(9600);
}

void loop(){
  if(Serial.available() > 0){//do{
    if (Serial.available()){
      incomingByte = Serial.read();
      switch(incomingByte){
        case 1:
        digitalWrite(forward,LOW);
        digitalWrite(back,HIGH);
        digitalWrite(left,LOW);
        digitalWrite(right,HIGH);
        break;
        case 2:
        digitalWrite(forward,LOW);
        digitalWrite(back,LOW);
        digitalWrite(left,LOW);
        digitalWrite(right,HIGH);
        break;
        case 3:
        digitalWrite(forward,HIGH);
        digitalWrite(back,LOW);
        digitalWrite(left,LOW);
        digitalWrite(right,HIGH);
        break;
        case 4:
        digitalWrite(forward,LOW);
        digitalWrite(back,HIGH);
        digitalWrite(left,LOW);
        digitalWrite(right,LOW);
        break;
        case 5:
        digitalWrite(forward,LOW);
        digitalWrite(back,LOW);
        digitalWrite(left,LOW);
        digitalWrite(right,LOW);
        break;
        case 6:
        digitalWrite(forward,HIGH);
        digitalWrite(back,LOW);
        digitalWrite(left,LOW);
        digitalWrite(right,LOW);
        break;
        case 7:
        digitalWrite(forward,LOW);
        digitalWrite(back,HIGH);
        digitalWrite(left,HIGH);
        digitalWrite(right,LOW);
        break;
        case 8:
        digitalWrite(forward,LOW);
        digitalWrite(back,LOW);
        digitalWrite(left,HIGH);
        digitalWrite(right,LOW);
        break;
        case 9:
        digitalWrite(forward,HIGH);
        digitalWrite(back,LOW);
        digitalWrite(left,HIGH);
        digitalWrite(right,LOW);
        break;
      }//end switch
    }//end if serial available
  }//end do
  //while (Serial.available() > 0))
}
  

STEP 6: Build the Control Pedestal

To begin with, cut podium top and base. Then, attach flanges at their centers. screw in metal rod.

Make a little plywood box underneath to hold the electronics. Paint in team colors and glue on laser cut acrylic lettering (optional).

Finally drill holes for joysticks.

Upload the following code to your Arduino (with Wireless Xbee shield):

int fbVal=0;
int lrVal=0;
int fbVal_last=0;
int lrVal_last=0;


int fbVal_1=0;
int lrVal_1=0;
int fbVal_last_1=0;
int lrVal_last_1=0;


int currentState=1;
int lastState = 1;

int currentState_1=1;
int lastState_1 = 1;

void setup(){
  pinMode(A0,INPUT);//lr pin, pin 2 of joystick
  pinMode(A1,INPUT);//fb pin4 of joystick

   pinMode(A3,INPUT);//lr pin, pin 2 of joystick
  pinMode(A4,INPUT);//fb pin4 of joystick

  Serial.begin(9600);
}

void loop(){
  lastState = currentState;
  lastState_1 = currentState_1;
  
  fbVal_last = fbVal;
  lrVal_last = lrVal;

  fbVal_last_1 = fbVal_1;
  lrVal_last_1 = lrVal_1;

  lrVal = analogRead(A0);

  fbVal = analogRead(A1);

   lrVal_1 = analogRead(A3);

  fbVal_1 = analogRead(A4);



  if (lrVal<500){
    if (fbVal<500){
      currentState = 1;
    }
    else if(fbVal<600){
      currentState = 2;
    }
    else if(fbVal>599){
      currentState = 3;
    }
  }
  else if (lrVal<600){
    if (fbVal<500){
      currentState = 4;
    }
    else if(fbVal<600){
      currentState = 5;
    }
    else if(fbVal>599){
      currentState = 6;
    }
  }
  else if (lrVal>599){
    if (fbVal<500){
      currentState = 7;
    }
    else if(fbVal<600){
      currentState = 8;
    }
    else if(fbVal>599){
      currentState = 9;
    }
  }

  if (lrVal_1<500){
    if (fbVal_1<500){
      currentState_1 = 10;
    }
    else if(fbVal_1<600){
      currentState_1 = 11;
    }
    else if(fbVal_1>599){
      currentState_1 = 12;
    }
  }
  else if (lrVal_1<600){
    if (fbVal_1<500){
      currentState_1 = 13;
    }
    else if(fbVal_1<600){
      currentState_1 = 14;
    }
    else if(fbVal_1>599){
      currentState_1 = 15;
    }
  }
  else if (lrVal_1>599){
    if (fbVal_1<500){
      currentState_1 = 16;
    }
    else if(fbVal_1<600){
      currentState_1 = 17;
    }
    else if(fbVal_1>599){
      currentState_1 = 20;
    }
  }


  if(lastState != currentState)
  {
    Serial.write(currentState);
  }
  if(lastState_1 != currentState_1)
  {
    Serial.write(currentState_1);
  }

  delay(20);
}


Finally, the transmitting Arduino was connected to two joysticks.  It monitored the signal from the two inputs of each joystick with its analog inputs.  Then it compared these signals to a threshold value and sent out a piece of data accordingly.

STEP 7: Make a Scoreboard

First cut the plywood board to size. Then cut rectangles for the base and the decorative top arc.

Screw flanges to the center of base struts, and the back of the board. Screw pipe components together (board flanges --> to nipples --> to elbows --> to long rods --> to floor struts).

Cut out your letters. They can be stuck on to decorative arc with carpet tape. Attach arc to top with struts and bolts.

The electronics on the scoreboard largely consist of two 12" common anode 7-segment displays, the illuminated stop hand, a buzzer, 2 arcade buttons, and an Arduino-based circuit.

The 7 seg displays were controlled by pins A0-A5 and D0-D7 of the Arduino via a Darlington 2803 (to source more current).  Each seg of the giant 7-seg displays was made up of four parallel lines of 15 red LEDs in series.  It runs off a 35V AC to DC power supply.  Other than the special current and voltage considerations, the giant 7-seg is controlled like any other common anode 7 seg display.

STEP 8: Hoops

To make hoops we made two 4'  by 4' boards. Then we cut a 12" diameter hole in the center of each board.

We stapled the basketball net to the back of each hoop board with a staple gun.

Hoops should be painted in team colors.

STEP 9: Ball Holders

Each team has two ball holders. They consist of: plywood base, 4x4 up in the middle, 2x4 across, welded metal rings to hold balls.

Paint in team colors.

STEP 10: Boundaries

Boundaries are important. Ideally, the wheelchairs will be completely fenced off with sturdy chain link. A tennis court with no net would be ideal. So would a bumper car court.

We made wood-and-rope boundaries, and they didn't help at all. They're just a piece of 4x4 on a plywood base and an eye hook screwed in to hold a rope.

Do something better and more effective, because the wheelchairs will hit the boundaries on a regular basis.

STEP 11: Blind Goggles

Spray paint the outside of some chemical safety goggles for complete blackout vision.

STEP 12: Referee Flags

Cut a piece of orange fabric that is roughly 14" x 16".

Sew a loop that fits snugly around your dowel rods, and then slip it onto the dowel to make your flag.

STEP 13: Comm Units

There is a lot of shouting during gameplay, so it is vital to establish a communications system between pilot and passenger.

We used vox-capable walkie talkies with headsets.

Each passenger-pilot pair needs a pair of headset walkie talkies on the same channel. The passenger's walkie-talkie can be zip tied to the frame of the wheelchair, and the headset should be put on under the safety gear.

Communication should be one-way: the pilot's headset should be a monitor, and the passenger should be transmitting at all times.

Set the passenger's vox to the highest sensitivity. Disable the pilot's vox by pressing PTT once after turning the walkie talkie on.

STEP 14: Safety Equipment

Each passenger should be fully equipped with a properly adjusted seat belt, a helmet, and strapped-on chemical safety goggles.

Additional safety equipment may be necessary. Participant discretion is advised.

STEP 15: How to Play

A Psycho Scooter Scramble court consists of a scoreboard with a countdown clock positioned roughly around midfield. On the side opposite the scoreboard stands two control pedestals (one for each team). There are goals on each end of the court which are surrounded on both sides by ball holders of the opposing team.

The court is ideally fenced in on all or most sides by chain link fence. The court may also be delineated by fence posts and rope, or plastic orange restraining fence. Lacking all of these, it can be defined by drawing it on the ground with chalk. Barring that, players can define imaginary boundaries using mutually agreed upon fixed landmarks (such as trees and rocks and things).

Before the game starts, the scooters are manually wheeled to the center of the court. The drivers put on colored shirts, appropriate safety gear, and their seatbelt. Taunting is encouraged before gameplay begins.

The game starts with both teams face to face in the middle of the court. The referee blows their whistle and presses the green button to start the game clock. Each player must then retrieve the ball of their team color, and then drive to the opposite end of the court to try to throw it through their color goal before time runs out. Each goal scored counts for one point, which is then marked on the scoreboard by the referee. When time runs out, the red hand will light up and buzzer sound. At this time, all gameplay stops. The driver and pilot switch roles for the game to start again.

After two full rounds, the team which successfully throws the most balls through the hoop is deemed the winner.

During gameplay the referee may blow their whistle to warn the pilot of inappropriate conduct, and/or wave their flag to warn the driver of inappropriate conduct. It is suggested the player stops whatever it is they were doing that warranted this warning. Should things get really out of control, the referee may choose to hit the red foul button on the scoreboard. This stops the clock and all gameplay must stop. The court is then reset, and both drivers must return to the center of the court before gameplay can resume.

If at any time the pilot takes off their blind goggles, the team is automatically disqualified from the match. Use of weapons will also result in automatic disqualification.

Throwing your ball at the blindfolded pilot of the other team is highly antisocial and discouraged. Knocking them out cold will definitely result in a foul and stop gameplay.

Grabbing the opposite team's goal and wearing it around your head like a necklace is also extremely antisocial and discouraged. This too may result in a foul and stop gameplay.

STEP 16: Repair Damaged Wheelchairs

After the inevitable crashes, one of the wheelchairs stopped working with an error code on the controller.  The error codes for a Quickie Freestyle M11 are here.  We had 5 blinking lights indicating a right motor wiring trip.  Getting to the motor wiring required taking off the seat and the battery cover.  We disconnected and reseated the main power for the motor, which fixed the error.  

Also, the bumper is invariably going to get dented. This can easily be fixed by kicking or hammering back into shape.

STEP 17: A Note on Referees

The referee tries to maintain the semblance of order in a disordered world. That is why they have a whistle and some orange flags.

The referee is responsible for maintaining law and order, keeping everyone safe, calling fouls, stopping and starting gameplay, keeping score, freeing stuck carts, and excessively blowing their whistle.

As the last remaining voice of reason, it is recommended that you don't run over the referee. However, this is sometimes unavoidable.


51 Comments

For a clearer understanding of the joystick connectivity. Do you have a clearer wiring diagram? if not, my questions below:
The (+) and (-) under wheelchair - is that the vcc of the wheelchair console controller (where joystick is)?
and;
The relay , Is that connected to the arduino I/O pin(s)?

Thanks ( in advance)
Hi, I was just wondering if you can assist me in understanding the controllers to wheelchairs. I am an electronic tech and I have several friends that use mobiliy scooters in which the controllers are bad. Any information that you guys can give would be highly appreciated. Just need to know what are the basic things that I would need. Not really trying to hack into or change anything to the controller, just need to set up something simple to test the operations of the device.
I've got a wheelchair with a joystick similar to yours. Its 6's wires; 5v, Gnd, 2 for Left/right, 2 for forward/backward. The two for left/right forward/backward are paired (i think like yours) as one rises, the other falls, and they balance at 2.5v for center.
I tried wiring an arduino up to all 4 pins and simulating it (with the same voltage and amps for the center) but the wheelchair somehow still knew it was not the correct joystick. How would i go about hooking up an arduino in place of the joystick? I cant find anything online about it except for this instructable and this mention (http://www.rosstron.com/dl_50_specifications.htm) of the electric wheelchair box that's similar to mine. Thanks for your time, awesome instructable too!!
thank you,and in my project i will leave the joystick connected ann add the arduino, but if both of them are working , is that a problem, if yes any solution to keep only one of them working
hi , i just want to know if you used a transistor to command the relays or what!
the relays are connected directly to the arduino digital output pins
hi, i m going to command a wheel chair using arduino but i can.t figure how did u make the connection between the arduino and the relays?? don.t you need uln 2803 and potentiometrs to deliver the values required? and i'l use arduino DUE is that possible ? because i 'll use a 5v sensors that can.t handle. so would you plz help me up by explainning the circuit you add to the arduino and wich pins did you used. thanks :)
the relays we used operate on 5V, so no need to use a uln2803. looks like the due only outputs 3.3, this will not work with the 5v relays. I would recommend using an uno. the schematic is in the step.
hey ...my wheelchair run very fast ... i made as mentioned in your project...anyway to make it slower ?
change the values of the resistors so that the voltage going into the wheelchair control is closer to 2.5V
Hi all,I know I'm getting to this project a bit late, but I have been trying to figure out what I am doing wrong. If anyone can get me pointed in the right direction I would greatly appreciate it. This is what I have.... I built up the circuit board with the total of 4 relays on it. From the joystick I have the plus voltage going to the 5 volt pin on the sending arduino, the minus ( or negative) going to the gnd pin on the same arduino. I also have one of the signal left/right pins going to analog A0, and one of the signal forward/reverse pins going to analog A1.

For the Receving arduino board combined with the circuit board I made I'm having trouble with the hook up. I thought the output of pins 4,5,6,7 would ave gone to the relay + and the negative woud go to the arduino gnd, but with this hookup when I toggle the joystick all the relays seem to go on so I know that's not right. I also have the Receving arduino + 5 volt going to the + side of the two 2K resistors, and the gnd to the - side of the other two resistors.

When I plug everything in I do get a reading of 2.5 volts on all four signal pins referenced to the gnd pin on the arduino which is tied to the negative side of the relay.
When I toggle forward I get 1.2volts on both of the forward/reverse signals, and the left/right signals increase to around 2.6 volts. When I toggle reverse I get 3.8 volts on both of the forward/reverse signals and again the left/ right pin voltages increase slightly. Do I have any of the connections right? The controller that my chair came with is a dynamic DL 5.2i so it only has 6 wires going to the joystick (4 directions and +/-.) hopefully someone out there has some experience with this type of controller.

Thanks Kim
Dear amanda
do you mind if add my code for control the wheelchair ?
I decided to try this out seeing as how I have a powered wheelchair that was given to me. I'm having a problem with the Center Tap pin. On your diagram it says, "Might need 1K -2 K". I've tried practically every resistor in between with no success. Every time I turn on the chair it gives me a "Joy Stick not centered" warning and doesn't allow me to move the chair. Any luck with a particular resistance? I was thinking on trying a 3K ohm potentiometer adjusted to equal resistance and voltage balancing. Any assistance would be greatly appreciated!
Raynentye
you can solve it by using different resistors...like 1K and variable resistor for the center

1K====>--(measure voltage here)--<==== variable resistor

then change the value of the variable resistor until get 2.5v

I pulled apart my breadboard in a tiresome rage last night and took a nap. I then decided to attempt a "parallel re-engineering" attempt. Took some measurements on the main joystick and viola! I came up with this:

I have two joysticks for my wheelchair: the primary for the person who is in need of the wheelchair and an attendant joystick for someone that's accompanying the driver for a "walk". Seeing as how I only need one joystick on the chair itself, I figured I could keep it there! I don't need to worry about "balancing" the center pin voltage because the joystick will never leave the system, let alone the center. I removed the attendant joystick for my remote Arduino/Xbee set up and soldered a wiring harness in parallel to the primary joystick. In order to move the chair in either direction, put a 100 ohm resistor in series with the positive, and another 100 ohm resistor in series with the negative. I combined the left/right pins with eachother and the forward/backward pins with eachother. then its pretty much just a simple H bridge wiring from here! Apply the 100 ohm resistor-in-series positive to the forward/backward pins and it goes forward, apply the 100 ohm resistor-in-series negative to the forward/backward pins and it goes backward!
Apply the 100 ohm resistor-in-series positive to the left/right pins and it goes left, apply the 100 ohm resistor-in-series negative to the left/right pins and it goes right!

This simple circuit/joystick combo can easily be stashed behind the seat where the victim, I mean player, will not be able to reach it while the game is being played!
Or you could just really freak out Grandpa before the Holiday feasting begins!

Thanks for the awesome Instructable by the way!
if i donot use the xbee ...what are the changes in the code pls???
if i donot use the xbee ...what are the changes in the code pls???
On the receiver side, are pins 4,5,6 and 7 the arduino pins that control the relays?
Also, the 2K resistors are connected to + and -. I assume this is the 5v supply on the arduino?
dear Xagormax ...i think those pins are for serial comuncation between the arduino and the xbee .....
for the 2K ..yes
dear amanda
i got arduino-mega2560 without Xbee,and i wanna configure it to accept signal from EOG device (EOG == Joystick)....to which port i connect it? and can i use same code?
i think it need some changes right?
can u help me pls
More Comments