Rideable Segway Clone - Low Cost and Easy Build

566,909

2,238

1,131

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 I2C wires should be twisted and the power/ground wire should be in the twist.
    • 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

    34 People Made This Project!

    Recommendations

    • Box Challenge

      Box Challenge
    • Arduino Contest

      Arduino Contest
    • Explore Science Challenge

      Explore Science Challenge

    1,131 Comments

    0
    YinDreamX
    YinDreamX

    Question 4 months ago

    Hello sir, this is my work after returning to school.My device uses 2 250W motors + 12V 3.5Ah battery, I weigh 60kg, when standing up the device seems very difficult to move forward, I think it is due to insufficient drag.Could you tell me if the 12 V 3.5Ah battery or the 250W motor is too weak?Is it possible to improve if I replace it with a 12V 7Ah battery?Thank you very much!
    Here my youtube video: https://youtu.be/dNR2k6zuUKs

    1
    ihart
    ihart

    Answer 4 months ago

    Hi YinDreamX,
    That build looks great. You are almost there!

    Yes. The design calls for fresh/new fully charged 12V 7Ah batteries.

    Another small thing to check that I cant see from your video is the tire pressure.
    I have found that the segway will be slow if the tire pressures are not high and firm when you push on them.

    0
    YinDreamX
    YinDreamX

    Reply 4 months ago


    Thank you, today I tried recharging the battery fully and it seems to be getting better. However, I tried using Arduino's Serial Monitor to debug and found that the ang_Y value did not reach 0 or 90 degrees but was hovering at 60 degrees at the initial time when the device was still placed parallel to floor. Meanwhile as I understand after reading the code, we will get the value angle_Y. And it seems that when the start button is pressed without doing anything, the vehicle gear accelerates continuously. Can you answer it for me? Thank you again!

    Screen Shot 2021-01-15 at 10.07.04 AM.png
    0
    ihart
    ihart

    Reply 4 months ago

    I'm not sure exactly what the issue is that your having. I suggest putting in the larger batteries when you ride it. The video looked like it was fine but needed more power.

    It is a possibility that a noisy or bad accelerometer reading will make the motors run when they shouldn't. This can happen if there is a voltage drop due to a heavy load that the batteries cannot support.
    It can also happen from motor noise that will couple into the control electronics. Twisted wires helps with this. Make sure the pullup values are correct per the schematic.

    0
    n7dkq
    n7dkq

    Question 1 year ago on Step 25

    What axis is the Gyro/Accel using for front/back determination ? X or Y and which is Forward?

    Mike

    0
    YinDreamX
    YinDreamX

    Answer 1 year ago


    As you can see, in the Arduino code, only the angle_Y variable is used to calculate the front / back tilt angle of the device. You can search for keyword "yaw pitch roll mpu6050" and view photos to better understand.

    download.png
    0
    n7dkq
    n7dkq

    Reply 11 months ago

    I have built the unit, have it up on blocks to check out before putting it on the ground, seems to work fine for a couple of minutes and then the left motor goes full speed forward and the right motor about 1/4 speed, it gets locked into the mode and will not recover unless I reset the system (power cycle)

    I have extensive background on I2C, I wrote the testplan for Intel on this technology, the lines are less than 1-inch long, I have pull-up resistors on both SCL and SDA, the waveforms look good on the scope.

    I think there is something wrong with your code

    Mike Boyd

    0
    ihart
    ihart

    Reply 11 months ago

    Hi Mike.
    It sounds like with your extensive background in I2C, you should be able to easily debug this simple project. 33 people have completed it with the referenced Arduino code over the last 8 years. You can see their posts in the "33 People have Made This Project" section above.

    Since you have said multiple times: "I think there is something wrong with your code", maybe you have found a SW bug that they have all missed?
    Please feel free to share the debugged code with us.

    0
    n7dkq
    n7dkq

    Reply 11 months ago

    I have a nice PCB for the project that brings the steering/control buttons to a RJ45 connector (normal Ethernet connector) and has the Accelorometer soldered in, it seems to work - I am 3D printing up a new case for it/batteries and hopefully will be taking a test drive with it later this afternoon

    IMG_3311.JPGIMG_3310.JPG
    0
    ihart
    ihart

    Answer 1 year ago

    Hey Mike,
    Check the arduino code .ino file.
    The Y axis is used for front back determination. Forward with this code is determined by mounting the accelerometer as shown in the picture.
    Let us know if you make one.

    0
    YinDreamX
    YinDreamX

    Question 1 year ago

    Hello sir, i really like your project. But i don't know what happend with my Arduino when i complie your code. Can you help me? Thank you, sir!

    Screen Shot 2020-03-10 at 1.57.09 AM.png
    1
    ihart
    ihart

    Answer 1 year ago

    It looks like a library problem. Try deleting and adding the library again?

    0
    YinDreamX
    YinDreamX

    Reply 1 year ago

    I'm very happy when you reply my question. I am trying to move the library files to the Arduino's libraries folder. Leave only one file hartway_digital.ino in a folder in Desktop. Then I open the Arduino IDE and open this file, compile and get the error as in the picture. I tried to follow exactly what you instructed: download, extract, open the Arduino software, and compile (I have not connected to the board yet, is this an error due to this?). Look forward to the help. Sorry because i'm not good at English :(

    Screen Shot 2020-03-10 at 11.13.14 PM.pngScreen Shot 2020-03-10 at 11.13.36 PM.pngScreen Shot 2020-03-10 at 11.14.23 PM.png
    1
    ihart
    ihart

    Reply 1 year ago

    Hi,
    Your english is fine! You dont have to connect to the board to get past this problem but you should verify that you can flash an LED on the Arduino board to prove you have end to end control of the Arduino.

    It's been a few years since I worked on this project. I think you can leave all the files in one directory. You dont need to put the library files in a library directory. The Arduino IDE will look in the directory that contains the .ino file
    It definitely seems like it is not seeing the library.

    Also, can you verify that you are compiling for an Arduino Uno?

    0
    YinDreamX
    YinDreamX

    Reply 1 year ago

    This is a detailed video of what I've done. At this time, the Arduino IDE displays an error (or warning) as shown in the picture with the "Done Compiling" message. In the right corner of the screen, it seems that I'm compile for the Arduino Uno board. Currently I don't have the conditions to try with a real Arduino board due to some medical isolation regulations in my country, I just want to check if the file you provided can work.
    Here is my video:
    Thank you so much, sir!

    1
    ihart
    ihart

    Reply 1 year ago

    I think your compile works fine. I see this line in your video which indicates that it worked:

    Sketch uses 18878 bytes (58%) of program storage space. Maximum is 32256 bytes.
    Global variables use 812 bytes (39%) of dynamic memory, leaving 1236 bytes for local variables. Maximum is 2048 bytes.


    It's unfortunate that the library produces so many warnings. THose are not errors.
    Grab an Arduino UNO when you can and try to upload to it. Let me know how it goes!

    0
    YinDreamX
    YinDreamX

    Reply 1 year ago


    Hello sir, until now I am able to return to school after a period of social isolation because of COVID-19. First of all, hope you and your family are always healthy. I just ordered a Sabertooth Motor Driver, which took about a month to arrive, so I can only do the chassis of the device now and can't test the software. I have 2 questions to send to you as follows. Firstly, during the device operation, do we need to hold the deadman switch? Second, is the type of switch used here a form of press-hold or press-release? Thank you very much for taking the time to answer my questions.

    0
    ihart
    ihart

    Reply 1 year ago

    Hi,
    We are all fine here. I'm glad you are back at school.
    You do need to hold the "deadman" switch while riding the segway or the motor will stop.
    The switch is a "press and hold" momentary SPST switch.
    Make sure you use fresh and fully charged batteries.

    0
    LienSnik
    LienSnik

    Question 1 year ago

    when i start there is no light on red/grn led.
    the motors work when board tilted but there is no balance.
    you can't stand on board unless you can balance it yourself.
    other than that i give you 6/10.HMMMMMMM!!!!!!!!!
    That's not very nice it's worth 9 could be worth 10 if i could get it going.
    Can't feel motors jumping between fwd & rev to stabilize the board???

    0
    MakarandR
    MakarandR

    Question 1 year ago

    Hello Sir,
    *I've made a prototype of this project and I m using sabertooth 2*32A model For sometime it works and it goes haywire after that and I have turn off the whole system then turn it back on.
    *My debug enable printing flag is off but it still prints "fifoCount: 1024 mpuIntStatus: 19FIFO overflow!" on the serial monitor.
    *If I kept the circuit on for sometime idle, then it does nothing even if I press the deadman switch (it kind of freezes)