Rideable Segway Clone - Low Cost and Easy Build

543,137

2,221

1,096

Published

Introduction: Rideable Segway Clone - Low Cost and Easy Build

About: I'm an Electrical Engineer with "engineer disease." I need to always be making, fixing or learning about something.

This Instructable will show you how to build a ride-able Segway clone. Here are its features:

  • Easy to build with no welding, no complicated steering linkage and minimal soldering.
  • Uses a readily available $3 digital MPU6050 accelerometer/gyro IMU board.
  • Total parts cost is under $400 (including shipping). A real Segway is $5000!
  • No salvage, dumpster diving or Craigslist parts.
  • A detailed parts list and ALL purchasable sources are included.
  • Well documented with over 50 minutes of HD how-to video, pictures and a detailed plan.
  • Uses the very common Arduino UNO processor board.
  • All Arduino processor code is included. NO additional Arduino libraries need to be installed.

This is a great learning project. It involves:

  • wood working
  • metal working
  • plumbing techniques
  • wiring from schematics
  • micro controller (Arduino) C like coding
  • accelerometer/gyro basics


I would say that a motivated middle schooler (12+ year old) with a parental figure could tackle this project. If the motivation isn't in the technical learning and assembly, it will be in the riding fun!

----------------------------------------------------------------------------------------------------------------------------

UPDATE 12/24/2014: There is a separate Instructable here to strengthen the Segway Clone PVC to Wood junction.

Step 1: Introduction Video

This video shows some action shots of the Segway clone!

Step 2: How to Ride the Segway Clone

  • With the Segway clone leaning forward, it's front edge touching the ground, toggle the power switch on.
  • The LED will glow red. Wait about 8 seconds for the MPU6050 Accelerometer/gyro to calibrate.
  • Lift up the board so it is parallel to the ground.
  • Hold in the deadman switch. The LED will turn green.
  • Step on the board.
  • Lean forward to go forward and lean back to go backward.
  • While you are moving, you can press the steering rocker switch to go left or right.
  • You can press the tilt rocker switch to adjust the neutral balancing position of the board.

Step 3: How to Build the Segway Clone Video

This video is over 50 minutes long and includes detailed instructions on how to build this Segway clone:

Step 4: Electrical Schematics

This is the electrical wiring schematic. It was drawn in MS Visio and saved as a .PDF here.

Step 5: Parts List, Cost and Tools Needed

Parts List and Cost Breakdown
The parts cost is under $400.  The attached .PDF file below  includes the sources, cost and HTML links.

Step 6: Tools Needed

Tools Needed:
Wood saw, hack saw, drill, drill bits, hammer, screwdrivers, wrenches, wire strippers, soldering iron, files, metal punch

Optional tools:
table saw, drill press, Dremel tool, VOM (Voltage Ohm Meter), WD40 (for drilling)

Step 7: Plans and Dimensions

These are the mechanical plans.   I designed this in MS Visio and saved off the .PDF here.

Step 8: The Arduino Code


The Segway Clone Arduino code is below:

The Arduino code development took the longest amount of time to get right in this Instructable. It could still be improved. Any ideas would be appreciated. It was influenced by the following authors of self balancing device projects and MPU6050 development:

Jeff Rowberg: https://github.com/jrowberg/i2cdevlib
XenonJohn: https://www.instructables.com/id/Self-balancing-skateboardsegwy-project-Arduino-S/
ScitechWA: https://www.instructables.com/id/Self-Balancing-Scooter-Ver-20/
Geekmom: http://www.geekmomprojects.com/mpu-6050-dmp-data-from-i2cdevlib/
Julian Arnott: https://www.youtube.com/watch?v=q29MMfLRFYM
and Eric Wang

Installation:

  • Install the Arduino software (http://arduino.cc/en/Main/Software#.UxiP2BCmZU0)
  • Download the .zip file BELOW with all the code (note that Instructables MAY corrupt the name)
  • Unzip the file (this is a good freeware unzip program: http://www.7-zip.org/download.html)
  • Open the Arduino software
  • Connect a USB cable to the Arduino board
  • To ensure your Arduino is working, get your Arduino to "load" the "blink" program (file->examples->basics->blink)
  • Open the file hartway_digital.ino
  • Compile and "load" to the Arduino board

You can search on YouTube to learn about the Arduino. This guy does a good job explaining everything about Arduinos:
http://www.youtube.com/watch?v=fCxzA9_kg6s


notes:

1) Instructable user fgastald posted the following note. This library code change seemed to help him and some others with stability issues. Most people do not experience these issues but you may want to make the following changes if you have vibration in your final design:

"For those who are experiencing some MPU6050 issues (weird behavior.....motor that suddenly goes to 100%.....) i suggest this : Go to the library file MPU6050_6Axis_MotionApps20.h find the line 0x02, 0x16, 0x02, 0x00, 0x01 // D_0_22 inv_set_fifo_rate Modify the last number (0x01) to something higher, i'm using 0x02 right now and it works fine."

2) There is a bug in the code that will show up if you hit and release the deadman switch about 250 times. User rtreffkorn reported this and suggested the following solution. I have not tested it but it sounds reasonable.

"The fix is to change set_motor() from void to int.
In the normal case return 0. When the deadman button was released return 1;
Then in loop() do: "if (set_motor()) break;" "



The Segway Clone Arduino code is below:

Step 9: Step by Step Instructions Start Here

The following are step by step instructions of how I built this Segway clone.  You may decide to copy this exactly or just use this for inspiration in your own variation.

Step 10: Lawyer Stuff and Safety

  • This project includes cutting, drilling and soldering.  Please wear safety gear and be careful.
  • Riding on a 2 wheel device that is inherently unstable is dangerous.  You will fall off it and crash into things.  You are responsible for your own safety.   Wear protective gear. 
  • The real Segway device can be dangerous even though it has safety shutoffs and error detection.  This Segway clone has NO safety detection or elegant shutdown.  Ride at your own risk. 
  • This Segway corporation video clip shows some of the dangers riding the real Segway device may have.  I found it useful to watch before riding this Segway clone: http://www.segway.com/flash/video/safetyvideo.php
  • Putting your fingers inside a chain and gear drive while the motor is running will remove your fingers.
  • Lead Acid batteries should be recycled and not thrown in the trash.

Step 11: Cut and Prepare Wood Riding Platform

We'll start this by cutting our plywood base.  I used birch plywood.  Any 3/4" plywood piece that can finish to 29" by 17 1/4" will do.  I cut the piece on a table-saw.  If you do this, use eye protection and watch your hands.

You can use a hand saw as well.  Accuracy in cutting is not critical but if you applying plywood edge tape, it needs to be smooth.

Optional: Use a coffee can or something with around a 3" radius to mark curves on the corners.  See video.  A compass set to 3" will work as well.  Cut the corners with a jigsaw or a coping hand saw.

Optional: Sand and then apply iron on edge tape to the edges.

Optional: Sand top and bottom of board.

Step 12: Cut and Drill Brackets

NOTE: this step is not shown in the how to make video clip.  Sorry.  See plans and read this text.

Get the four 8" x 8" x 2" angle brackets.  Two of them will be outside brackets.  Two of them will be inside brackets.   See the .pdf file of the plans for a drawing of the brackets.

To make the 2 outside brackets, do this twice:
  • Use a hacksaw to cut off 1.5" from the end of a bracket arm.  Length should be 6.5" when done. Clean up with a flat file.
  • Use a hacksaw to cut off 2 1/4" off the end of the other bracket arm.  Length should be 5 3/4" when done. Clean up with a flat file.
  • Use a metal punch to make a mark centered between the end 2 holes of the 6.5" bracket arm. 
  • Drill this hole out with a 3/8" or .375" drill bit.   This will hold the wheel axle.  Use a drill lubricant when drilling metal.
  • Widen this drilled hole with a Dremel or round file to make it 0.40" and test that it will fit the wheel axle.
  • Punch and drill four 1/4" holes in the bottom of the 5 3/4" bracket arm.   See drawing for position.  It is not critical.
To make the 2 inside brackets, do this twice:
  • Use a hacksaw to cut off 1.5" from the end of a bracket arm.  Length should be 6.5" when done.  Clean up with a flat file.
  • Use a metal punch to make a mark centered between the end 2 holes of the 6.5" bracket arm.
  • Drill this hole out with a 3/8" or .375" drill bit.   This will hold the wheel axle.  Use a drill lubricant when drilling metal.
  • Widen this drilled hole with a Dremel or file to make it 0.40" and test that it will fit the wheel axle.
  • Punch and drill four 1/4" holes in the bottom of the 8" bracket arm.   See drawing for position.  It is not critical.

tips:
  • When drilling into metal, it's better to use a drill press if you have access to one.  It goes faster and the hole will be straighter.
  • When drilling into metal, it helps to use a lubricant between the metal and the drill bit.  The lubricant takes the heat away from the hole.   WD-40 is a great lubricant.   Don't run the drill bit too fast.  Stop and let the hole cool off occasionally.

Step 13: Mount Brackets Under Platform

Grab the 8x8x8 brackets, wheels, chain, 1/4-20 x 1-1/4 in. Zinc-Plated Hex Flange Bolts, nuts and washers.
  • Measure 4.5" in from an edge and mark a line.  This will be the outer line that the bracket will rest on.  See drawing.
  • Place brackets on board bottom as shown in drawing, pictures and video.
  • Mark 4 1/4" holes per bracket with a pencil.  See video.
  • Remove brackets and punch center of each hole lightly.  This is to center the drill bit.
  • Drill holes with a 1/4" drill bit.
  • Remove brake assemblies from the wheels if they are on still.  See picture above.
  • Attach brackets with wheels and chain to board with (16) 1/4-20 x 1-1/4 in. Zinc-Plated Hex Flange Bolts, nuts and washers.

Step 14: Mount Motors to Platform

The motor has a bracket attached to it with 4 pre-threaded metric screw holes.
  • Set motor up so chain is straight and motor gear is perpendicular to the wheel brackets.
  • Pull gently on motor away from the wheels and mark the 4 holes.
  • Note that you may want to use a short piece of pencil lead to mark the motor holes.
  • Repeat for the other motor.
  • Punch the 8 holes and drill with a 7/32" drill bit.
  • Insert a washer and an M6 1.0x30mm bolt into each hole and tighten it.

Step 15: Crimp on Battery Wires

Find an extension cord to cannibalize or use speaker wire for this step.

  • Cut 2 lengths per the drawing.
  • Mark the bumpy ridged side of all ends of the cords with a black Sharpie pen. This will indicate our negative side.
  • Separate the end of one side on each wire and strip it 1/4".
  • Crimp on a Battery Terminal connectors (16-14 AWG, .250 Series) to each wire.
  • Use 4 Battery Terminal connectors total.

Step 16: Connect Motor Wires

Find an extension cord to cannibalize or use speaker wire for this step.

  • Cut 2 lengths per the drawing.
  • Mark the bumpy ridged side of all ends of the cords. This will indicate our negative side.
  • Separate the end of one side on each wire and strip it 1/4".
  • optional: slide small pieces of heat shrink tubing to each extension cord wire.
  • Twist on the black motor wire to the bumpy ridged marked extension cord wire. Do the same with the red wire to the other extension cord wire.
  • Heat shrink tubing OR cover with electrical tape.

Step 17: Install Galvanized Floor Flange

----------------------------------------------------------------------------------------------------------------------------
UPDATE 12/24/2014: There is a separate Instructable here to strengthen the Segway Clone PVC to Wood junction. You may want to reference that to modify your design. A few of the parts will change.

----------------------------------------------------------------------------------------------------------------------------

The 1-1/2 in. Galvanized Floor Flange is used to connect the PVC handle bar assembly.

  • Mark the center line of the 29" long side of the board.
  • Center the Floor Flange in this line about 1/4" away from the edge of the board. see pics, drawing and video.
  • Mark all 5 holes.
  • Drill 4 1/4" holes for the screws.
  • Drill 1 1 1/8" hole (using a spade bit) for the wires to pass through this 1-1/2 in. Galvanized Floor Flange.
  • Install Four 1/4" 20 x 1-1/2 in. Flat Head Phillips Machine Screws with washers and nuts.

Step 18: Cut the PVC Pipe

Get your 10' section of 1 1/4" schedule 40 PVC pipe.
  • Measure 31.5" and cut.  This is the main vertical pipe.
  • Measure 10.25" and cut.  This is for the right horizontal hand hold pipe.
  • Measure 10.25" and cut.  This is for the left horizontal hand hold pipe.
  • Take all the parts and "dry-fit" assemble them per drawing and video.

Step 19: Cut PVC for Switches

Get the circular "deadman" switch and the 2 rocker type switches.  You should hold these switches on the dry fit to see where you want them.  The measurements I give here are for what I did.    Get switches to fit in this step.  We'll add the wires later.

Deadman circular switch
  • Mark a hole on one of the 10.25" PVC pieces 4" from the end.
  • Drill a hole in the center with a 3/8" drill bit.  Reverse the bit for a while to start the hole if need be.
  • File the hole or use a dremel tool to widen the hole to about 0.45" to allow switch to fit in the hole.  It should be snug and NOT use glue.

You may want to practice the following rocker switch hole cutting on scrap PVC first.  Also, watch the vid.

Steering Rocker switch
  • Mark a hole on one of the 10.25" PVC pieces 6" from the end.
  • around the center of the hole, mark a rectangle that is 1 1/16" by 9/16".
  • Using a small 1/16" drill bit, drill many holes INSIDE the rectangle EDGE.  Use the drill bit to "cut" through the PVC, connecting the holes you drilled to cut out the rectangle.  An alternative method is to use a Dremel tool for this with a cutter bit.
  • File the hole or use a Dremel tool to widen the hole to allow the switch to fit in the hole.  It should be snug and NOT use glue.
Steering Tilt switch
  • Mark a hole on one of the 31.5" PVC piece 4.5" from the end.
  • around the center of the hole, mark a rectangle that is 1 1/16" by 9/16".
  • Using a small 1/16" drill bit, drill many holes INSIDE the rectangle EDGE.  Use the drill bit to "cut" through the PVC, connecting the holes you drilled to cut out the rectangle.  An alternative method is to use a Dremel tool for this with a cutter bit.
  • File the hole or use a Dremel tool to widen the hole to allow the switch to fit in the hole.  It should be snug and NOT use glue.

Step 20: Harvest the Wire

If you are using Cat5 cable, you can "harvest" or remove the wire pairs like this.
  • Strip the end of the cable to remove the outer plastic insulation.
  • Put the 8 wires in a vice.
  • Go to the other end and pull on the insulation. 
  • Go back to the beginning of the cable near the vice and slowly pull the insulation down. 
  • It will come off a little at a time.  See video.
Better way from another Instructables user!:
Mar 19, 2014. 1:59 PM rmelchiori says:
There is an easier way to strip the outer jacket of cat5 cable. If you pull down on the thin nylon floss, it will cut the jacket and open it up like pulling a zipper.

Step 21: Prepare PVC Switch Wires

Measure out the switch wires.
  • Use electrical phone type wire that is about 6' long.  I used CAT5 Ethernet cable which has 4 twisted pairs of conductors.  
  • One pair is for the deadman switch.
  • To make the 3 conductor tilt and steer cables, separate out one pair into 2 individual wires:
  •  A fast way to do this is to put one end in a in a drill chuck,  attach the other end to a vice or have a buddy hold it.   Spin the drill to loosen the wires so you get 2 non-twisted individual wires.
  • Now, take one individual wire and add it to a twisted pair.  You will have 3 wires.  Put one end in a in a drill chuck,  attach the other end to a vice or have a buddy hold it.  Spin the drill to tighten the spin of the wires together.
  • Repeat for the other 3 wire cable.

Step 22: Optional: Epoxy PVC Reducer Into Floor Flange

This step is optional but recommended so the handle bars don't  twist while you are riding.
  • Take the epoxy tubes.  Squeeze out about 3/4" of each the resin and hardener on a piece of scrap paper.
  • Mix the 2 gels together until its a consistent dark grey color.
  • Apply the mixture to the white PVC threads of the PVC 1.5" to 1.25" reducing male adapter.
  • Screw this PVC 1.5" to 1.25" reducing male adapter into the Floor Flange on the board.  Hand tighten.
  • Wait 10 minutes for the epoxy to dry.

Step 23: Install Switches in PVC

Get the 2 rocker switches and deadman switch.
  • Solder the 2 wire cable to the deadman switch.
  • Solder a 3 wire cable to the steer rocker switch.
  • Solder a 3 wire cable to the tilt rocker switch.
  • Write down all the colors of the switches for reference later when you connect them to the Arduino.
  • Snake in the switch wires through the switch holes.  See picture and video.
  • Push in switch to friction fit.

Step 24: Glue PVC Parts Together

Get the PVC Cleaner and Glue.   An alternative to PVC glue is to use epoxy.  You are working around the snaked wires so lay it out on a table.

Do it in this order:
  • End caps
  • Handles to Tee. (watch the switch positions!)
  • Tee to main pipe.
  • Main pipe to Reducer PVC (floor flange)  For this last step. Make sure the Segway board is lying flat on the table.  Quickly step back and look at the handle bar assembly to make sure you twist them parallel to the table while the glue has not dried.
How to Glue PVC:
  • Use the PVC cleaner wand (purple) to wipe cleaner on both parts to be bonded.
  • Apply glue (clear color) to both sides. 
  • Push pieces together and twist to spread the glue.  The working time for the PVC glue is about 10 seconds.  Make sure the switch is where you want it!

Step 25: Mount Electronics Box to Platform

Use the 1/2" #4 wood screws:
  • Line up the box as shown in the picture.
  • Mark the holes with a punch (or screw) by tapping with a hammer.
  • Drill holes with a 1/16" drill bit.
  • Using a hand held screwdriver, attach box with #4 1/2" screws.

Step 26: Install Batteries

  • Mark Battery lines at 3/4" in from long edge of board.
  • Mark battery line 1" in from short end of board. 
  • Trace rectangle around each battery.
  • Mark 4 holes outside battery rectangle for zip ties to go through.  See pictures and video.
  • Drill a hole for each battery power wire to go through.
  • Make sure the batteries will fit but dont lock the zip ties now!

Step 27: Install the Bi-Color LED


Grab the bi-color LED and the 300ohm resistor.  Watch the video.
  • Trim the LED center conductor.
  • Trim and solder on the resistor to the LED center conductor.
  • Solder an 8" long piece of 3 conductor wire cable to the LED assembly.
  • Insulate all wires with electrical tape.
  • Drill a 3/32" hole in the project box.
  • Insert the LED into the hole.
  • Hot glue or epoxy it in.

Step 28: Install the Charging Connector and Power Switch

Get the 3pin charging connector and circular rocker power switch.  see video.
  • Drill a 5/8" hole with a spade bit in the end of the project box.
  • Insert the 3 pin charge connector and put on lock nut.
  • Drill a 13/16" hole with a spade bit centered in the top of the project box for the power switch.
  • Press fit switch in.

Optional:  Add a hole for USB access to the Arduino.  You can see white electrical tape covering mine in the pic above.
  • Place the Arduino with shield in the box aligned with the side away from the connector.
  • Mark the USB connector position on the inside of the box.
  • Transfer the center of the marks to the outside of the box.
  • Use a large drill bit to make a hole for the USB. 
  • Try to connect a USB cable to the Arduino. 
  • Trim to fit using a Dremel tool or file.

Step 29: Drill Project Box Holes and Pass Through Wires.

I didn't shoot video of this step so look at this picture.  
Get your Arduino and your Dimension Engineering Motor Driver boards.
  • Place both boards in box for test fit.   Mark edges of board to ease hole placement.
  • Mark and drill 1/4" holes for power wires on side closest to batteries.  Be sure not to hit the rubber wheels below!
  • Use a Dremel tool or files to widen holes.  An alternative is to use a bigger drill bit so wires will fit through more easily.
  • Drill a 1/4" hole 2.5" from these power wires hole.  This hole is for the control wires.
  • Push through all available wires now.   Make sure that the boards still fit in with wires in place.

Step 30: Tack Down Wires and Connect Battery Wires

Get the 1/4" wire tacks and a short piece of extension cord.
  • Flip over the segway on a few 2x4's or a small bucket so you can work on the bottom.
  • Tack down wires that are loose by hammering in the small tacks.
  • Snake the previously crimped battery cables through the battery holes.
  • Measure and tack the battery cables to arrive under the Project box.  Strip ends.
  • Make a small (8") piece of extension cord cable to pass through hole into project enclosure.  Strip all ends.
  • Twist together the batteries in "series" per the schematic under the Project box location.
  • Twist in the connector cable per schematic.
  • Add in short 8" cable per schematic.
  • Secure with 3 wire nuts or just solder and electrical tape.

Step 31: Get Wires Ready


With all the wires sticking up from the project box:
  • Solder a short extension cord wire to the power switch as shown in the schematic and pictures.
  • Put electrical tape over the power switch to avoid any shorting.
  • Place the motor controller and Arduino boards in the enclosure temporarily.  
  • Find a good final length for the wires and cut them. 
  • Strip the wire ends.
  • Using a soldering iron, "tin" all the wires
  • Optional: Attach small terminals to the control wires. 
  • You can use the straight terminals that came with the MPU6050. 
  • Break them apart. 
  • Use a hemostat or cardboard to hold them while soldering.

IMPORTANT NOTE:
This is from the Dimension Engineering web .pdf for the Saber controller :
"Warning! Be very careful to wire and plug in the battery and connector correctly.
Connecting the battery backwards will destroy the Sabertooth and will void the warranty."

Step 32: Install Batteries and Quick Meter Check

Get the batteries and zip-ties.
  • Put the batteries on the board.
  • Thread the zip ties through the holes and around the batteries.
  • Pull tight on the zip ties so the batteries are secure.
  • Trim off the ends of the zip ties with wore cutters.
IMPORTANT NOTE:
This is from the Dimension Engineering web .pdf for the Saber controller :
"Warning! Be very careful to wire and plug in the battery and connector correctly.
Connecting the battery backwards will destroy the Sabertooth and will void the warranty."

Step 33: Install Electronics

Get the motor driver board, the Arduino and the Arduino shield.

  • Place each board into the box as shown in the picture.
  • Secure each board with screws through the plastic and into the wood.
  • Connect the battery wires.
  • Connect the power wires to the motor controller as shown in the schematic.
  • BE SURE THE BATTERY WIRE POLARITY IS CORRECT. If the + and - are swapped, you will burn out the expensive motor driver board.
  • Install the Arduino shield board
  • Connect the control wires to the Arduino shield as shown in the schematic. ALL WIRES MUST BE TWISTED AND KEPT VERY SHORT!!
  • Solder on the MPU6050 GY521 accelerometer/gyro board right angle pins that came with the board.
  • Insert the accelerometer/gyro right angle pins as shown in picture. Make sure that the component side faces the back of the board.
  • Wire up the pull up resistors, Vcc, GND, and I2C lines as shown in the schematic. Use twisted pair wiring for the I2C wires and keep them very short. ALL WIRES MUST BE TWISTED AND KEPT VERY SHORT!!
  • Connect the wires from the saber to the Arduino.

    Use twisted pair wiring and keep them very short. ALL WIRES MUST BE TWISTED AND KEPT VERY SHORT!!

  • Check Saber dip switches match the picture for 9600 baud. This is to match the serial communication rate set in the Arduino code for communication between the Arduino and the Saber. This is the Saber 2x12 Data sheet for your reference: http://www.dimensionengineering.com/products/sabertooth2x12

Step 34: Test!

At this point, you should be ready to test out your Segway Clone!

  • I would recommend setting the board up on a bucket so the wheels CAN'T touch the ground.
  • Turn on the power switch. Wait 8 seconds.
  • Hold the deadman switch down and move the board forward and backwards.
  • You should see the wheels spin in each direction.
  • If you see the red Error LED on the Saber flashing and the motors start to shake, you have low battery voltage. You either need to charge your batteries OR replace them because they cant hold a full charge anymore.


When this works:

  • Try out the board on the ground.
  • If forward and backward tilt are reversed, flip the pins in the Arduino code.
  • Try out the steering and tilt.
  • Pop out and flip the steering and tilt switches if they are reversed.
  • If you see the red Error LED on the Saber flashing and the motors start to shake, you have low battery voltage. You either need to charge your batteries OR replace them because they cant hold a full charge anymore.

CONGRATS!

Step 35: Optional: Debug

Before you start to debug, check the following:

    • All wiring is as short as possibleas shown in this Instructable. Long wires will get noise on them from the motors and the serial communication will fail. ALL WIRES MUST BE TWISTED AND KEPT VERY SHORT!!
    • The resistors shown in the schematic have been added.
    • The MPU6050 Accel/Gyro is installed and oriented as shown in the Instructable.
    • The tilt switch is for minor comfort adjustments. Don't use it for the tuning. Just try tilting the board back and forth while the board is balanced on a bucket or stool.
    • Make sure to wait at least 5 seconds after power up for the MPU6050 to internally calibrate.
    • Make sure your batteries are fresh. Each battery should measure at least 12V when not under load. If not, replace your batteries.

    This is optional for debug

    Arduino Serial Monitor

    Open the Arduino Serial Monitor. Set it for 115,200 baud

    The code has this line in it:

    Serial.begin(115200); // initialize I2C and serial monitor to 115,200 baud

    To enable printing to the serial monitor, set this to a 1:

    #define DEBUG_ENABLE_PRINTING 0 //normal

    If you are up on a bucket, to avoid holding the deadman switch, set this to a 1:

    #define DEBUG_FORCE_DEADMAN_SWITCH 0 //normal

    To just look at the serial monitor and not have the motors running, set this to a 1:

    #define DEBUG_DISABLE_MOTORS 0 //normal

    recompile.

    The serial monitor screen should output something like this:

    Initializing I2C devices...
    Testing device connections...
    MPU6050 connection successfulI
    initializing DMP...
    Enabling DMP...
    Enabling interrupt detection (Arduino external interrupt 0)...
    DMP ready! Waiting for first interrupt...

    NOTE:

    If you turn on DEBUG_ENABLE_PRINTING and see a message that says: "1024 mpuIntStatus: 19FIFO overflow!", don't worry about it. It is caused by the fact that printing out messages is a relatively slow task for the Arduino processor. While this printing is occurring, the control loop which is trying to pull accell/gyro data from the MPU6050 cant keep up. Eventually, the FIFO holding this data in the MPU6050 has too much data or overflows. The FIFO will recover. When you are done with debug, disable DEBUG_ENABLE_PRINTING flag.

    Oscilloscope:

    if you want to observe the "loop time" of the Arduino code, you can use an oscilloscope to do this. It should be around 10Hz or 10 times per second.

    • Hook a scope probe to Arduino pin 3. Connect the ground as well.
    • Un-comment this lines in the code: // digitalWrite(oscopePin, HIGH);
    • recompile.

    To adjust the base tilt angle in the code:

    If the board powers up and wants to sit at a strange angle, you can use the tilt switch to tweak it OR, you can make a code change to permanently tweak it:

    Look for this line in the code and modify the 80 number to whatever you want:

    // Sensor tilt number below is Determined experimentally. Bigger is more tilted forward. It needs to change if you adjust ANGLE_GAIN. x_accdeg = (float)((SG_filter_result - (80 + balancetrim)) * (1.0));

    Step 36: Optional: Chain Tensioning Block

    If your chain is coming off or it's loosened up, you can add chain tensioning blocks as shown in the above pics.
    • Cut out a pice of 2" x 4" plywood.
    • Drill a 1/4" hole 1 1/8" from one end.
    • Drill a 13/16" hole 1 3/8" from the other end.
    • Press fit a 2 1/4" piece of 1/2" PVC into the larger hole.
    • Secure the other hole with a 1/4" nut, washer and bolt to each bracket as shown in the picture.

    Step 37: Final Notes:


    Low Cost Goal:
    My main goal in this project was to make it low cost and easy to build. A number of design decisions would have been different if the goal was long term reliability, range, power etc.

    Batteries:
    The 12V sealed lead acid batteries used in this project were ONLY chosen because they are very low cost. They are really made for starting gas motors. They are not the best choice for a long life, deep discharge, rechargeable battery. They are prone to failure if they are discharged below 20% capacity. They must be charged after use to keep them from failing. I went through 2 sets of batteries before I learned this.
    Some reading on batteries:
    http://batteryuniversity.com/learn/article/can_the_lead_acid_battery_compete_in_modern_times
    Deep discharge batteries will work better but cost more.
    http://auto.howstuffworks.com/question219.htm

    Weak Point:
    I have found that one weak point of the design is at the interface between the PVC and the board. If you push too hard on the PVC handle bars let's say in a crash, the PVC at that fulcrum may crack. A design improvement would be to use a threaded metal pipe coming up from the board. The top threaded metal pipe would join the PVC at the handlebars. The PVC would have the switches in it.

    Motor Controller:
    The Dimension Engineering Saber motor controller was one of the most expensive parts of this project. I tried two cheaper ebay motor controllers using PWM driven by the Arduino. They both failed to work well and so we needed to use the Saber part. It would be great to find a lower cost alternative to the Saber which is very well designed.

    Future Enhancements (as of 3/2014):
    Here are some future enhancement ideas I would like to see made to this Segway clone:

    1. Voltage monitor circuit. This would be a pair of resistors set up as a voltage divider. They would bring the 24V range down to a 5V range and be monitored by an ADC input on the Arduino. If the voltage dropped below a preset threshold for a certain period of time, the LED would flash at a 2Hz rate to let you know to recharge the battery.
    2. More work to smooth the control algorithm. This Segway clone control is just OK. I think there could be more refinement to the gain adjustment and steering.
    3. Battery research to replace the $32 lead acid batteries with cheap LIPO or LiFePO4.
    4. Find cheap encoders and add them to the wheels.

    ----------------------------------------------------------------------------------------------------------------------------
    UPDATE 12/24/2014: There is a separate Instructable here to strengthen the Segway Clone PVC to Wood junction.

    Step 38: Conclusion

    I hope you enjoyed this Instructable.  This Segway clone could not have been done without the work of others in the Instructable community. 

    If you make one of these Segway clones, please add a picture or video clip to the comments!

    I will end this Instructable with a final safety warning:
    • Riding on a 2 wheel device that is inherently unstable is dangerous.  You will fall off it and crash into things.  You are responsible for your own safety.   Wear protective gear.
    • The real Segway device can be dangerous even though it has safety shutoffs and error detection.  This Segway clone has NO safety detection or elegant shutdown.  Ride at your own risk.
    • This Segway corporation video clip shows some of the dangers riding the real Segway may have.  I found it useful to watch before riding this Segway clone: http://www.segway.com/flash/video/safetyvideo.php

    32 People Made This Project!

    Recommendations

    • Casting Contest

      Casting Contest
    • Make it Move Contest

      Make it Move Contest
    • Oil Contest

      Oil Contest
    user

    We have a be nice policy.
    Please be positive and constructive.

    Tips

    4 Questions

    Hi I Hart !
    Hope you are fine.
    Recently I made my Segway using 250 W dc brushed motors and sabertooth 12A.
    I followed your instructions and finally I have done my project with proper response in steering , backward and forward. But I have one problem when I try to ride on it It doesn't response properly and not stable. I am unable to ride on the Segway ....can you suggest me.?
    I m using 16" wheel

    IMG_20180513_124859.jpg1526202014842-1094521416.jpgIMG_20180507_104130.jpg

    0

    Nice build! I would guess your batteries are not charged or need to be replaced. They should both measure over 12V when you are starting out. These batteries can never be run down too low without charging or they will fail.

    Hi i.Hart
    When i uploaded the code to arduino sometime the light always turn red even i push the deadman switch , but sometime it work (turn green) but the motor always go forward at full speed . Can you help me ?

    0

    It's great you are building this. This problem is probably caused by I2C noise or connection errors. Check the debug section. Check the schematic connection. Twist the wires. Check the resistors are correct.

    Send a video of the behavior and the board if you still have issues.

    0

    Hi I.Hart i want to discuss something about the code..
    when ever i burned the code on arduino and checked the output on serial monitor its gives an error that fifo overflow and goes into halt condition and it shows nothing in the output there.
    if you something about this kindly tell me please that would be very much helpful for me .
    i am using arduino uno, mpu6050, and the other details are the same..

    0

    Please check the debug section. The FIFO message is not a problem.
    The Arduino is not getting any interrupts from the mpu6050. This is either because you have miswired the I2C or the interrupt wire is not hooked up right. Correct pull-up resistors? Check the schematics carefully.

    1 more answer

    0

    MPU6050 connection successful

    Initializing DMP...

    Enabling DMP...

    Enabling interrupt detection (Arduino external interrupt 0)...

    DMP ready! Waiting for first interrupt...

    fifoCount: 1024 mpuIntStatus: 19FIFO overflow!

    this error comes whenever i run the code.

    0

    ihart reply please i will be very thankful to you.

    1,096 Comments

    MPU6050 connection successful

    Initializing DMP...

    Enabling DMP...

    Enabling interrupt detection (Arduino external interrupt 0)...

    DMP ready! Waiting for first interrupt...

    fifoCount: 1024 mpuIntStatus: 19FIFO overflow!

    4 replies

    the same happens to me. and i have #define DEBUG_ENABLE_PRINTING 0 //normal

    in the code!

    please tell me if u know any solution regarding the fifo overflow issue

    help me solving this issue please i would be very much thankful to you..

    @SafetyfirstS Did you happen to find solution for this problem or found out what was causing this issue?

    HI I.Hart
    I need suggestion. I am using 250W brushed motors (MY1016 B) so what sabertooth driver is better "sabertooth dual 25 A" or "Sabertooth Dual 12A".
    Thanks

    1 reply

    the 25A version will allow you to get full power to the motors. The 12A version should work too for demonstration purposes. If you try to go fast or up a hill, the Saber could current limit and vibrate to let you know it is doing that.

    hello I. hart.
    I am currently working on my project that is Segway .I follow your instruction of 38 steps and I have one question can I use sabertooth dual 25 A driver instead of sabertooth 12 A as you used if yes then is any change need in code or hardware ?

    15167786414771539472144.jpg1516778785081-2008783174.jpg
    1 reply

    You can use the 25A Saber. I believe that there is no change needed to the code or HW. A number of people have done it. Search through all the comments. Check the 2 data sheets to be sure.

    Sir can i used sabertooth 2X12A Motor Driver for weight around 80 kg or sabertooth 2x25A is better option.

    1 reply

    You should be able to balance with 80kg. I am about 75 kg and it was fine. Good luck with your project! Post a video when it's working.

    Hi ihart, I have a question, what happens is that I buy another dual driver of the same v, will there be problems with the code? is a Pololu Dual VNH5019 Motor Driver Shield for Arduino (ash02a)

    tank you, great project.

    1 reply

    It might work. The voltage and current handling is fine. You would have to re-write the Arduino code to talk to this part instead of the Dimension part used in the Instructable. Also, this part uses a lot of pins on the Arduino. I count 10pins instead of the 2 with the Dimension Saber part. I think you would need an Arduino Mega to use this part. Good luck!

    Hi...ihart.

    I liked your design and the way you describe it.

    i just followed your instructions to build up mine.

    but the problem i am facing is that mine motor 1 is running to its 100% directly no deadman switch works their. just as soon as the 24v supply is given the motor runs in its 100% and yes i used a sabertooth 2x32A motor driven rest all is the same.

    please suggest me the proper solution ?

    thanks.

    1 reply

    What have you tried in the debug section? Check your connections vs. the schematics. Check for the I2C pullups and their value. Make sure wires are short and twisted.

    Hi Ira,

    I almost gave up the construction, but I think I spent a lot
    of time on it, and it would be a shame.

    So here's a new question:

    I read in the instructable that the geared motors were
    sensitive to the back slashs. In addition, the gears generate a free play which must disturb the proper functioning of
    the gyroscope. Also, I intend to remove the gearbox and replace it with a
    sprocket and a wheel as you did.

    With a sprocket with 11 teeth and a wheel with 66 teeth, the
    ratio is 1/6.

    Your engine runs at 2650 RPM, so 440 rpm per minute on the
    wheel.

    The engine I use runs at 4900 RPM

    With the 11-tooth sprocket and the 66-tooth wheel, the wheel
    will run at 816 RPM.

    We go from 440 RPM to 816 RPM.

    The difference is quite significant.

    Can it be taken into account in the Arduino code, or is it
    necessary to choose another ratio with the number of teeth for the sprocket and
    the wheel?

    If we can act in Arduino code, what is the parameter to
    modify ? (could be the ACC_GAIN ?)

    Best regards,

    Jean-Claude.

    1 reply

    You can try to adjust the gain settings. Play with these values in the code. Start with the ACCEL_GAIN:

    //Variables for GYRO_GAIN and ACCEL_GAIN

    #define ACCEL_GAIN 18.0 //

    #define GYRO_GAIN 5.0 //

    Hello ihart !!!

    I followed the instructable as you mentioned and build the segway.

    But finally my gyro didn't work. I build the same design.

    Also motors only move forward as I press deadman switch. They didn't move backward.

    Kindly tell me the problem as soon as possible.

    Thanx.

    Hi ihart,
    I wonder what each switch is intended for. And, We followed you exactly. However, the gyro sensor doesn't seem to work properly. The motor rotates to the maximum output from start to finish. What seems to be the problem?

    1 reply

    Go through the debug section please. Make sure your wiring matches the schematic exactly. Wires should be twisted. Pullup resistors correct.