Introduction: GoBabyGo: Make a Joystick-controlled Ride-on Car
Founded by a University of Delaware professor, GoBabyGo is a global initiative that shows laypeople how to modify toy ride-on cars so they can be used by young children with limited mobility. The project, which involves swapping out the foot pedal for an easily pushed button, costs about $200 and requires little technical skill.
The result is more than just a fun ride. Children with limited mobility are often at risk of social isolation simply because they can’t easily approach playmates. These cars help children become independently mobile, allowing them to more easily explore their world while attracting the positive attention of peers.
Inspired by GoBabyGo, and with input from physical therapists, we developed a design for controlling a ride-on car that can be fully controlled with a joystick. A joystick has several benefits compared to a button and steering wheel. Some kids don't have the motor control required to use a steering wheel, so they have limited control over where they go. The buttons have two speeds – off and full power, making them difficult for younger kids to manage. And with a car-style steering wheel, the car can’t make sharp turns in confined indoor areas.
The joystick cars function as a kind of powered wheelchair. This is especially important because few motorized wheelchair models exist for small children, and those that do exist cost thousands of dollars. They can also be off-putting to other children – the opposite of the toy cars, which are enticing.
Joystick-controlled GoBabyGo cars can also help prepare children to control a larger motorized wheelchair when they're older. This is of particular importance because insurance companies often won't pay for a powered wheelchair unless a child can demonstrate competence using a joystick – a Catch-22 situation the joystick car can help solve.
These benefits do require more of a financial investment (they cost about 50% more than the push-button car, less if you have some parts on hand), and they will require a bit more time and skill to put together.
In this project, a joystick replaces the pedal and steering wheel that were originally used to control a battery-powered Jeep. The front wheels are replaced with casters, and two motor-controllers and an Arduino microcontroller control the two motors. These instructions are step-by-step for this Jeep, but here's a generalized circuit diagram for those interested in the big picture. We also have instructions for a firetruck model. The design in these instructions enables the child to go forwards, backwards, and spin with a zero turn radius – and we firmly believe that every kid should be able to spin in circles!
Note that this project uses 3D printed parts. If you lack a 3D printer, printing services can be found online, at libraries, or at a maker-space. The project also includes lots of soldering, though some of the splicing could be replaced with crimp connectors.
If you have any questions, comments, suggestions for improvement, or need help troubleshooting your joystick-controlled GoBabyGo Jeep, comment here, or email us at firstname.lastname@example.org.
Small phillips screwdriver
Small flat head screwdriver
PVC pipe cutter or saw
White duct tape
Soldering iron (with sponge) and fume extractor
Rotary tool (Dremel)
Computer with a usb port and access to the Internet
Mini USB cable for Arduino
Step 1: Parts List
2. Arduino nano microcontroller (Find the best deal with good reviews. The headers should not be pre-soldered.)
4. 8x 3/4" PVC elbow
5. joystick holder pt1 (3D printed)
6. joystick holder pt2 (3D printed)
7. joystick ball 1.5” (3D printed)
8. joystick ball 2.0” (3D printed)
9. 8x wood screws (about 1 ½”)
10. 7x #0 1/2" screws
12. 2x 5” caster
13. Big (~4mm) heat shrink
14. Small (~1/16”) heat shrink
15. 2x ½-13 nut
16. 4x washer with ½” I.D.
17. 2x quick release tee (3D printed) and 2x 1.25" piece of .125" diameter dowel or skewer
18. 2x 14-16 AWG (blue) female spade connectors
19. Four-wire ribbon cable
20. 16 gauge red wire
21. 16 gauge black wire
22. ¼” split loom plastic wire tube
23. ⅛” rubber gasket sheet (small)
24. 2x 4-40 flat head 1 ¼” bolt
25. 2x 4-40 nut
26. 4x wood chunks (about 1-2 inches on each side)
27. 10 feet of ¾” schedule 40 PVC pipe
Step 2: Unpack the Jeep (Parts to Keep)
28. Back wheels
29. Back axle (zip tied to front bar)
30. Front bar (zip tied to back axle)
31. Grey reinforcement pieces
33. Little plastic wrenches
34. Bags of nuts, bolts, and screws
35. Back motors
36. Motor covers
40. Auxiliary cord for music
Parts of the jeep not shown in the image can be discarded.
Step 3: Back Wheels
1. Remove all nuts and washers from the back axle (29).
2. Slide the back axle into place as shown below.
3. Install back motors (35), back wheels (28), spacers (34), nuts (34) (tighten the nuts on the two ends of the axle (29) simultaneously), and hubcaps (34) as shown in the manual (image below). Use the provided plastic wrenches.
Step 4: Front Caster Wheels
1. Unscrew the front steering motor.
2. Unplug and remove the front steering motor.
3. Use a clamp to hold the front bar (30).
4. Remove the tubes on the front bar (30) by using the dremel and a cutting wheel to cut through the welds that hold the tubes in place. After the welds are cut, use a hammer to tap the tube out if necessary.
5. Place the casters (12) into the holes in the bar (where the tubes were), with washers (16) on both sides of the hole. Bolt the casters to the bar using ½-13 lock nuts (15). Make sure that the casters are not installed upside-down; mounting tabs on the bar should be on the wheel side.
6. Use screws (34) found in the jeep parts to screw the front bar to the jeep.
Step 5: Wiring
1. Unplug all the wires connecting to the original motor controller board and unscrew and discard the board.
2. Put tape over the unconnected battery terminal. This prevents an accidental discharge of the battery.
3. Cut the black wire off of the main power plug and leave the red wire connected to the plug (for now). Strip the end of the black wire.
4. Cut all the wires from the small six-wire cable in the jeep. Discard the plug, and strip the black and red wires.
5. Cut the plug connected to the red and black wires off of the ESCs (1), making sure to cut as close to the plug as possible. Strip the ends of the black and red wires.
6. Connect the black wire from the battery (from step 3), the small black wire from the front of the jeep (from step 4), and the black wires from the ESCs (from step 5). Solder and cover with the big heat shrink (13).
7. Connect the two big red wires from the ESCs (from step 5), and the small red wire (from step 4) to a two foot piece of 16 gauge red wire (20). Solder and cover with the big heat shrink (13).
8. From the underside of the Jeep, remove the black cover that protects the wires that attach to the High Speed/Low Speed switch and the Forward/Stop/Reverse gear knob (5 screws).
9. Cut the wires that go to the foot pedal.
10. Cut the small zip ties holding wires together near the power switches.
11. Pull all the wires off of the switches using pliers. Be sure not to cut these wires. When using pliers, try pulling up and to the sides to pull the spade terminals out easily.
12. There is a switch connector with two black wires and a brown wire connected to it. Cut the brown wire, but leave it connecting the two black wires. Put tape over the metal part of the terminal.
13. Cut the white wire off of the plug.
14. Discard the disconnected wires (the ones not connected to anything else).
15. Thread the two foot long 16 gauge red wire (20, previously used in step 7) through the hole in the compartment under the seat to the underside of the Jeep near the plugs, strip the end and crimp to a spade connector (18), and plug the spade connector as shown in the picture. Strip the end of the 16 gauge black wire (21) and crimp to another spade connector (18), then connect that spade connector to the same switch as shown in the picture. Thread the other end of the black wire into the compartment under the seat.
16. In the compartment under the seat, remove the plug from the red wire of the charging port (the plug left on in step 3), strip the end and solder to the 16 gauge black wire (21) connected to the switch in step 15, covering with heat shrink.
17. Strip the ends of the red wires from the motors. Cut the plugs from the yellow wire from the ESCs, strip the wires, and solder the yellow wires from the ESCs to the red wires of the motors, covering with heat shrink. Now strip the ends of the black wires from the motors. Cut the plugs from the blue wire from the ESCs, strip the wires, and solder the blue wires from the ESCs to the black wires of the motors, covering with heat shrink.
18. With a number 0 sized Phillips head screwdriver (very small), unscrew and remove the screw from the joystick (3) as shown in the figure.
19. Unscrew and remove (with a number 1 size Phillips head screwdriver) the four screws circled in blue in the image below. Remove the attached metal bands and discard.
20. Carefully bend down the metal prongs (on the side of the joystick) in the direction shown below so that the joystick will fit in the holder.
21. Cut the little white plug off of the six wires of the joystick.
22. Slide the metal piece and piece of heat shrink off of the joystick’s wires, and unbraid them.
23. Put a 4-40 nut (25) into each of the two hexagonal holes of joystick holder pt1 (5), one near the top of the "cup" and another at the bottom. It may help to screw a 4-40 bolt (24) into the nut from the outside and turn the bolt until the nut has been pulled all the way into the hexagonal hole.
24. Put one end of the four-wire ribbon cable (19) through the hole on the side of joystick holder pt1 (5).
25. Separate the four wires of the ribbon cable for about an inch.
26. Strip about ¼” of insulation off of the black wire of the ribbon cable and off of the green and black wires of the joystick. Solder and heat shrink these wires together. Use the small heat shrink (14).
27. Strip about ¼” of insulation off of the red wire of the ribbon cable and off of the orange and yellow wires of the joystick. Solder and heat shrink these wires together.
28. Strip about ¼” of insulation off of the blue wire of the ribbon cable and off of the blue wire of the joystick. Solder and heat shrink these wires together.
29. Strip about ¼” of insulation off of the green wire of the ribbon cable and off of the brown wire of the joystick. Solder and heat shrink these wires together.
30. Pull as much of the ribbon cable out of the joystick holder as you can, but stop at the heatshrink (leave it in the holder).
31. Line up the joystick above the joystick holder and gently push it into place.
32. Screw the joystick into the joystick holder with 7 very small (⅜” #0) screws (10).
33. Twist the two red metal pieces off of the stick of the joystick. Screw the joystick ball (7 or 8) onto the stick of the joystick (where the red parts were).
34. Unscrew the dashboard and route the four-wire cable through the dashboard (where the steering wheel would attach), along the underside of the Jeep (with the wires to/from the plugs) and through to the back compartment under the seat, and then screw the dashboard back on.
35. Push any extra ribbon cable into the dashboard, leaving enough to allow the joystick holder’s position to be adjusted.
36. Put a wire tube (22) around the ribbon cable to protect it from being yanked, and to make it look more clean. Duct tape or hot glue one end of the tube to the joystick holder (it should fit in the hole in the side) and the other end of the tube to the dashboard.
37. Screw the motor covers (36) on over the motors in the rear compartment.
38. Finally cover the back of the switches (on the underside of the Jeep) with the black switch cover that you removed from step 8.
The result of the changes to the wiring made here will cause the High Speed/Low Speed switch to become an On/Off switch (which will be labelled in the Finishing Touches section), and the Forward/Stop/Reverse gear knob will become nonfunctional (its function will be replaced by the joystick).
Step 6: Wiring the Microcontroller
1. Remove the setting jumper (the one closest to the red heatsink) from each ESC to put it into forward/reverse (F/R) mode as shown in the picture. Turn the switch on each ESC to the ON position.
2. Cut off the servo plug from the three signal wires of both ESCs (see photo). Separate the three wires for about an inch.
3. Separate the four wires of a four-wire ribbon cable (19) at one end for about an inch.
4. Strip about ¼” of insulation off of the negative (black) wire of the three-wire cable on both ESCs and off of the black wire of the four-wire ribbon cable (19). Solder these three wires to the ground (GND) pin (or hole, if no header is attached) of the microcontroller. It may be easier to solder the three wires to a small extra piece of wire, and then solder the piece of wire to the microcontroller, but in this case, you would need small heatshrink.
5. Strip about ¼” of insulation off of the positive (red) wire of the three-wire cable on the ESCs. (It doesn’t matter which. One ESC’s red wire remains unconnected.) Also strip about ¼” of insulation off of the red wire of the four-wire ribbon cable. Solder these two wires to the 5v pin of the microcontroller.
6. Strip about ⅛” of insulation off of the signal (white) wire of the three-wire cable on the left ESC. Solder this wire to pin 10 of the microcontroller.
7. Strip about ⅛” of insulation off of the signal (white) wire of the three-wire cable on the right ESC. Solder this wire to pin 9 of the microcontroller.
8. Strip about ⅛” of insulation off of the green wire of the four-wire ribbon cable. Solder it to pin A1 of the microcontroller.
9. Strip about ⅛” of insulation off of the blue wire of the four-wire ribbon cable. Solder it to pin A2 of the microcontroller.
10. Now that all of the wiring is complete, it's time to plug the battery into the circuit. Take off the tape on the battery terminal, and plug the loose red wire with the green plug into the battery terminal.
Step 7: PVC Frame
1. Cut the PVC pieces to length
- 2x 26.5" pieces
- 2x 15" pieces
- 2x 7.5" pieces
- 2x 3" pieces
- 1x 5" piece
- 1x 14.5" piece
2. Assemble the saddle tees (17) by pressing the wood piece through the hole in the small flap piece, and then glue or "friction spin weld" the two big pieces together with the wood “axle” in the two small holes of the big pieces so the flap is trapped but can turn.
3. Attach the quick release tees (17) to the ends of the 14.5" piece (push them on to the ends, rotated at the same angle), and then slide the saddle tees onto the two 26.5" pieces. When the flaps are in the locked position, they should point towards the floor.
4. Assemble the frame as shown using cut PVC pipe and 8 PVC elbows (4). DO NOT GLUE THE TOP PART OF THE JOINTS CIRCLED IN GREEN (MAKE SURE THE TOP PART – THE BACKREST – IS REMOVABLE BY LIFTING UP). Other joints can be glued with PVC glue after verifying that the elbow angles are appropriate.
5. Use four screws (9) to secure the frame. Make pilot holes first using a small drill bit, then use screws. Screw the front two screws in from the side. Screw into wood chunks (26) on the inside of the jeep (one chunk for each screw). Tip for the back screws: if you remove the taillights (their screws can be accessed by reaching up from under the jeep you can hold the wood blocks through the holes, and then you can replace the lights.
6. Cover screws with white duct tape.
7. Drill four pilot holes through the kickboard (11) and the PVC (two at the PVC elbows and two below)
8. Screw the kickboard to the PVC pipe using four screws, with the kickboard centered horizontally and high enough to clear the top of the seat. Drill pilot holes before putting in each screw. Put the screws in tight enough that the heads are just below the surface of the kickboard – so they aren’t uncomfortable for the kid, but not so far in that they might go all the way through the kickboard.
10. Cut a 19mm x 45mm piece of 1/8” rubber gasket (23).
11. Put the piece of rubber into the recessed rectangle of joystick holder pt2 (6). (You may have to trim the piece of rubber slightly).
12. Put the two parts of the joystick holder on the crossbar of the PVC frame. The larger part goes closer to the back of the jeep than the smaller part. Put a 1 ¼” 4-40 flat head bolt into each of the bolt holes of joystick holder pt2 (6), and thread them into the nuts of joystick holder pt1 (5). Tighten them until the holder is secure, tightening the top and bottom bolt equally.
Step 8: Code
1. Download and install the Arduino IDE software
2. Download the code for the jeep, unzip the folder and open the Arduino file with the Arduino software.
3. Make sure that the Jeep is turned off. (Remember, the High Speed/Low Speed switch on the right side of the Jeep is now an ON/OFF switch, with High Speed = ON and low Speed = OFF. ) Plug one end of the USB cord into the port of the Arduino Nano microcontroller (2) in the Jeep, and plug the other end of the USB cord into your computer.
4. Sniff for smoke; there shouldn't be any! (If there is smoke, unplug the Arduino and check your wiring – you may have a short or incorrect connection. If so, you may need to replace the Arduino.)
5. Under the Tools menu of the Arduino application, click Board, and select Arduino Nano.
6. Look under the Tools menu again, and click Port. If there is only one available port, select it; Otherwise choose the bottom one.
7. In the Arduino application, upload the program by clicking Sketch->Upload.
8. If the program doesn't upload, and you saw more than one port, try a different one. (You can also try the different Arduino Nano board types)
9. Open the Serial monitor to see the information that the Arduino is sending, by going to the Tools menu and clicking Serial Monitor. If you don’t see scrolling text after a couple seconds, or if all you get is random symbols, the “baud rate” might not be set to 19200. Change the baud rate if necessary by selecting 19200 in the menu at the bottom right as shown in the photo.
10. At the top of the code there are some values that need to be adjusted for your Jeep. Push the joystick to the right (oriented as if you are sitting in the Jeep) as far as it goes, and enter the X joystick value (displayed in the serial monitor) for the CONTROL_RIGHT variable at the top of the Arduino code.
11. Let the joystick center itself, and enter the X joystick value for CONTROL_CENTER_X.
12. Push the joystick to the left and enter the X joystick value for CONTROL_LEFT.
13. Push the joystick forward and enter the Y joystick value for CONTROL_UP.
14. Let the joystick center itself and enter the Y joystick value for CONTROL_CENTER_Y.
15. Push the joystick backward and enter the Y joystick value for CONTROL_DOWN.
16. Re-upload the program.
17. Unplug the Arduino, and turn on the Jeep! You should hear a couple of high-pitched beeps, a pause of a couple seconds, and then a lower pitched beep which tells you that the jeep is ready to drive. Try moving the Jeep by pushing the joystick!
18. Four values in the Arduino code change how long the Jeep takes to get to a new speed, either accelerating or decelerating (speeding up or slowing down). Each of the four values controls the rate of change of speed in a different situation (see table). The values should be between .05 (very slow acceleration) and 3 (the motors can’t accelerate much faster). The values have to be positive. If the acceleration needs to be altered (e.g., slowed down for very young children, or sped up for older children), try adjusting the values in the Arduino code accordingly.
19. If you alter the acceleration/deceleration values in the code, they can be uploaded into the Arduino by turning the jeep off, plugging the Arduino in to the computer, and uploading the program. Then unplug the Arduino and turn the jeep back on. See how the jeep drives, and repeat the as needed until you get an acceleration that is suitable for the child.
20. Change the next three values to change the maximum speed of the jeep. The range for FASTEST_FORWARD is 1500 (not moving at all) to 2000 (max speed), and this value changes how fast the Jeep can go in a forward direction.
21. The range for FASTEST_BACKWARD is 1500 (not moving at all) to 1000 (max speed), which changes how fast the Jeep can go in a backward direction.
22. The range for TURN_SPEED is 0 (not turning at all) to 1 (max speed), which changes how fast the Jeep spins in a circle.
23. The range for SLOW_TURNING_WHEN_MOVING is 0 (no turning allowed when moving forward) to 1 (as much turning when going forward as when stopped), which changes how much less to turn when moving forward or backward to help the Jeep make a smoother turn.
24. Re-upload to make speed changes take effect.
25. There are comments (grey text after “//” that don’t affect the code) in the program to explain what is happening. For more information on the commands used in this program check out the Arduino site here: https://www.arduino.cc/reference/en/
Step 9: Finishing Touches
1. After you are happy with how your jeep drives, you can cover all the electronics with the seat. Make sure to secure it with screws found in the Jeep box (34).
2. Install the grey reinforcement pieces (31) using screws (34) as shown in the figure below.
3. Make sure to clarify which switch is the ON/OFF switch by using a permanent marker to write ON/OFF by the switch labeled HIGH SPEED/LOW SPEED, or cover the switch with a small piece of white duct tape and write on/off on that.
4. Find the plug that goes to the front of the jeep (the one that isn’t the four-wire cable) and label it “UNPLUG TO DISABLE MUSIC”.
5. If you want, find any remaining jeep parts/accessories (i.e. headlights, toolbox, etc.) that you want to add to the Jeep.
CONGRATULATIONS! YOU'RE DONE!
If you have any questions, comments, suggestions for improvement, or need help troubleshooting your joystick-controlled GoBabyGo Jeep, comment here, or email us at email@example.com.
Step 10: Tips
Below are some important tips for the recipients of the jeep. It may be helpful to print them and include them with the jeep. (printable version)
1. When you turn on the jeep, wait for three beeps (about 5 seconds) before the jeep will drive.
2. Turn off the jeep when it’s not in use; the battery will get run down even when the jeep is not driving.
3. Charge the batteries for 12 hours after every use.
4. Never charge the batteries for more than 24 hours.
5. Pick up or push the jeep by the original plastic body (not the PVC frame because it can break).
6. There is a labeled plug under the right front side of the jeep that can be disconnected to disable the music function if it gets too annoying.
7. The jeep is not waterproof, do not use it in the rain, or leave it outside.
8. If you have any questions, comments, suggestions for improvement, or need help troubleshooting your joystick-controlled GoBabyGo Jeep, please comment here, or email us at firstname.lastname@example.org.
Second Prize in the
Assistive Tech Contest