Introduction: SciChair (Balancing Electric Chair)
We thought we should build a stand-on Balancing scooter but then decided that we needed to make something original. What about a Balancing chair my boss said. Now that's cool!
We happened to have a cool looking Carbon Fibre Racing chair just sitting around not being used so we started with that. We previously ordered a couple of geared down 250W scooter motors and some wheels to suit.
Now to order the electronics! Reinventing the wheel is a waste of time, and XenonJohn had already developed the code and worked out which hardware to use so we ordered exactly what he recommended.
Power came from some Makita drill batteries. These are used for most of our travelling exhibits as they are easy to get, to charge and we have a few batteries laying around for just such a purpose.
Here is a short video of the chair being driven around. Note the 3rd build Balancing scooter too doing a drive through.
Step 1: Description of the Build
The description of this build a little bit in reverse as we built the chair fairly quickly and forgot to take build photos.
There is little or no detail about the balancing software or how it works as XenonJohn has already described this so well.
There will be details on how we built our SciChair and what you will need to do to build your own.
The electronics is nearly exactly what XenonJohn used on his skateboard but I have removed the resistors he used for the switches so therefore, the code is different. See attached code for button steer and proportional steer.
Step 2: Parts
- Chair - Any type will do. Something comfortable that you can lay back into.
- Arduino UNO - Check your local suppliers or eBay.
- Sabertooth 2x52 Motor Controller- www.dimensionengineering.com or a local supplier.
- 5 DOF accelometer www.ebay.com/itm/181004141876?sPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
- 2 scooter motors - I would recommend 200w and up. www.oatleyelectronics.com or eBay. Have a look around your area.
- Batteries - SLA batteries are good and cheap, Power drills can be quite inexpensive too.
- Wheels - Larger wheels are better for bumps. Get one with the same sprocket chain type as the motors if possible.
- We got our wheels from www.oatleyelectronics.com
- Shielded multi-core cable for the accelerometer and heavy power cable for the motors
- Deadman switch
- Toggle switch for turning. A joystick is good for this.
- Toggle switch for adjusting balance position.
- DC connector for Arduino.
- DIL pins to suit Arduino
- Double sides tape
- Screws etc
- Metal tubing for the frame
Step 3: Tools
Also, you will need someone with the equipment and skills to weld the frame.
Other tools you will need:
- Drill and drill bits
- Soldering iron and solder
- Wire cutter and wire strippers
- Heat shrink and hot air gun to shrink it
Step 4: Building the Frame
The design of the frame is quite basic (see photos).
There is a U-shaped tube over each wheel to bolt the wheel to and to hold the motors, and a bar between these as the main member. At first we didn't have the gussets in place (triangular shaped pieces) but the bottom bar started bending. Make sure that the main member is heavy duty and have reinforcing to the wheel U shape.
Then add a central tube for the two removable skids. Skids are recommended because they stop a lot of breakages and accidents. We made the seat mounts adjustable for a balance point but this is not needed. Just mount your seat in the middle.
We used a Carbon Fibre Racing Chair we just had sitting around, but most people don't. Try a school seat, car seat or whatever you can find that's comfortable and has a long back with head rest, if possible.
Step 5: Motors
The motors we used are geared 250W 24V brushed motors from www.oatleyelectronics.com
Motor RPM is about 320 RPM.
The wheels were purchased from the same place.
The fine tooth gear was removed from the wheel and a BMX gear was fitted on the thread.
The pitch of the BMX gear was the same as the motor 12.7mm.
Although this works okay, there is a bit of chain stretch and the key way on the motor gear will wear out eventually.
It is better to use toothed belts here, if possible but the cost does go up when using these!
A plate was made to hold the motors and it bolts to a piece of metal welded to the frame. The piece of metal has two slots cut into it to allow the motor to slide up/down to take up the chain slack. There are different ways of doing this. Something like how a car alternator mounts might be another way. Open the bonnet of your car and see how it's done.
Step 6: Electronics
- the motor controller 2x25 Sabertooth http://www.dimensionengineering.com/sabertooth2x25.htm
- the arduino Uno
- and, the accelerometer.
The Accelerometer needs to be mounted preferably at axle height and vertical. The four holes on the circuit board should be facing down and the chip side to the back.
We used double sided tape as it's a good insulator and sticky!!!!!!! Make sure it's in a nice waterproof area and maybe even heat shrink it water tight. A glue coated heatshrink is good for this. We used shield cable for the wiring as it will stop any added noise getting into the system.
Make sure it is held on tight. If not you will have a bucking bull chair! Believe me I know about this!
The unit has a few switches to add.
- The dead man switch. The big red button that has to be held at all times to make the unit work.
- Main Power.Cuts power to everything. Ours was built into the battery holder.
- Joystick. Allows you to turn left/right and drive forward in up coming code.
- Tilt Adjustment. Allows you to adjust your balance point
Find a good safe, easy to use spot to mount these. Connect all units together and wire these up as per the wiring diagram.
The wiring is pretty much the same as Xenonjohn's Skateboard but without the resistors.
See our circuit diagram below.
Once it is all wired and the code has been uploaded, it's time to test. Puts ome bricks underneath it to lift the wheels off the ground. Tilt it forward and turn the main switch on. Wait your four seconds for the Acceleromoter to calibrate and hold down the deadman switch. The wheels shouldn't start yet.
Slowly tilt the unit back until the Accelerometer is vertical. The motors should start up and you should be able to slowly move it back and forward to slow and speed them up. Check the rotation to make sure that the wheels are going the right way. If not, then power the unit down and swap the polarity for that motor.
Now, you should be ready to drive the unit around.
Attachments
Step 7: The Code
The main code used is XenonJohns code for his skateboard. I used the rocker steering but we removed the resistors.
So here is the code for toggle button steering but still using your tilt for forward/backward movement.
**************************************************
Code bug updated on the 24th Feb 2012.
Issue with timing routine.
**************************************************
Attachments
Step 8: Videos
Step 9: New Features (Pot Steer and Code)
************************************** New features added 24 August 2012********************************************
Well, we finally have some new features.
We have fitted a potentiometer joystick with proportional steering.
Also the forward/backward movement is still done by Joystick control too.
We have added two Li-Ion batterys instead of the single battery.
We added a status light for the gyro startup period.
And BLING. We added a strip of blue LED's underneath to make it look cheaper.
Nothing better than adding a blue LED to something to make it look cheap!
THE CIRCUIT:
We have removed all the resistors and used software pullups for ease of building.
See the circuit diagram in the pictures above.
THE CODE:
I have also posted the Code below for proportional steering but uses lean to move. The deadman switch has a lock-out, so if you release the button then you need to completely power the unit down and go through the whole start-up procedure again. (For Safety reasons)
It also has a light that flashes when you turn power on until the gyro locks on (about 4 seconds).
FUTURE CHANGES:
We will be changing the chain drive to timing belt drive. (See the expanding collets in the picture above)
Pictures coming soon!
141 Comments
11 years ago on Introduction
Hi Everybody.
Thanks for your patients waiting for the code.
Well it's finally here!
Both the switch steer and the resistor pot steer.
Wiring is quite easy. I have a simple diagram to show what goes where.
Enjoy and let me know if there is anything missing or questions.
Question 5 years ago
How does your tilt adjust me t work? Great build your very inspirational
6 years ago
Have you noticed this has now been copied (too) in China?
It is one of those hoverboards with a seat stuck on top essentially. Described as self-balancing so the nose wheel is just for starting and "landing" I assume. The levers twist each half of the hoverboard instead of doing it with your feet.
7 years ago
How i do it work with 6DOF Digital IMU MPU 6050 (
http://42bots.com/tutorials/arduino-uno-and-the-invensense-mpu-6050-6dof-imu/ )
7 years ago
they are out of the 5DOF accelometer. will a 6 DOF work with the same code??
8 years ago on Introduction
hello sir can i ask u in the diagram 12v battery working for 1 motor or both?? coz im using 1 12v 7.5ah SLA battery since in malaysia its the cheapest i can get..and can i know will it working when the IMU im using is 3dof ADXL345 thx
8 years ago
Will this work without the 5 dof accelerometer? I will be implementing 3 wheels so self balancing is not required.. Should I make any changes in the codes?? Please help.. Thanks..
8 years ago on Introduction
Hi I'd like to implement this idea in my project viz basically an automatic wheelchair. I can exclude the gyro sensors and only implement the motors, driver and the joy stick right ? help is appreciated thanks :)
8 years ago on Introduction
Hello, ScitechWA, I do not understand electronic and 5dof for Brazil is impossible to achieve. Would it be possible to post the code for the 6DOF IMU Gyro 6050? Thank you for your attention. As you can see in the photos, positioned inside the engine, and I'm using a larger wheel.
8 years ago on Introduction
hi guys.
i build the scichair but when i go to program the arduino it says that 'the keyword BYTE IS no longer supported'
how do i fix this ?
it is in the code line
SaberSerial.print(0, BYTE); //kill motors when first switched on
}
Reply 8 years ago on Introduction
Download the earlier version of arduino program Version 0023
Reply 8 years ago on Introduction
You are faced with the same problem as me.
A few posts below, I also asked about it, the reason is the version, this code only works with version 0023.
if you want ispolzovat recent version 1.0 and above you will have to spend a recoding, I now work with version 1.5
here everything is clear described https://decibel.ni.com/content/thread/11196?tstart=0
8 years ago on Introduction
Good afternoon. Collected on your grand project, there are several issues.
Why and when the authorization gyroscope impossible immediately command the movement or rotation of a joystick. Joystick it starts listening only after a small inclination.
And why the team to retain the balance comes slightly inert (in my opinion), although it is perhaps because I put on a very experiments and a small prototype. And hold the balance or does not work. I tried already to increase value to 1 (float aa = 0.005; // this means 0.5% of the accelerometer reading is fed into angle of tilt calculation with every loop of program (to correct the gyro)) but rvno balance is not maintained.
Thanks in advance for your answers.
Reply 8 years ago on Introduction
Hi,
Thankyou for your comments.
All code is an "as is" basis.
We copied the code from another project. "Balancing skate board."
So we did not write the code. We did some changes.
The code works for us fine.
Check your gear ratio. Too high will not allow you to balance.
8 years ago on Introduction
Produces here such errors
C:\arduino-1.0.2\libraries\SoftwareSerial\SoftwareSerial.cpp: In member function 'void SoftwareSerial::begin(long int)':
C:\arduino-1.0.2\libraries\SoftwareSerial\SoftwareSerial.cpp:396: error: 'PCICR' was not declared in this scope
C:\arduino-1.0.2\libraries\SoftwareSerial\SoftwareSerial.cpp:399: error: 'PCMSK2' was not declared in this scope
C:\arduino-1.0.2\libraries\SoftwareSerial\SoftwareSerial.cpp:399: error: 'PCMSK0' was not declared in this scope
C:\arduino-1.0.2\libraries\SoftwareSerial\SoftwareSerial.cpp:399: error: 'PCMSK1' was not declared in this scope
C:\arduino-1.0.2\libraries\SoftwareSerial\SoftwareSerial.cpp: In member function 'void SoftwareSerial::end()':
C:\arduino-1.0.2\libraries\SoftwareSerial\SoftwareSerial.cpp:414: error: 'PCMSK2' was not declared in this scope
C:\arduino-1.0.2\libraries\SoftwareSerial\SoftwareSerial.cpp:414: error: 'PCMSK0' was not declared in this scope
C:\arduino-1.0.2\libraries\SoftwareSerial\SoftwareSerial.cpp:414: error: 'PCMSK1' was not declared in this scope
Reply 8 years ago on Introduction
Use version arduino-0023.
That will fix those errors.
Reply 8 years ago on Introduction
Sorry for my English is not clear.
Thank you very much, I tried running without errors.
What do you think the account conversion here this way?
https://decibel.ni.com/content/thread/11196?tstart...
Reply 8 years ago on Introduction
Yes if you convert those codes it should work.
Just as easy to download the old version.
8 years ago on Introduction
Which version of the Arduino sketch written? When compiling an error.
This one will be right for a gyro? http://www.ebay.com/itm/5DOF-module-accelerometer-and-dual-axis-gyro-instrument-IDG650-ADXL335-/261488421936?pt=LH_DefaultDomain_0&hash=item3ce1ecac30
9 years ago on Introduction
Hi. I am building my own SitWay and I think your components and codes are great.
The IMU link you provided is a blue accelerometer that is way more expensive than the red one you have in the image which is around 15US. Should I order the red one? In addition, I have a Triple Axis Accelerometer & Gyro Breakout SEN-11028
do you think I can use your code directly for that?
I am a high school student and am very eager to finish this project in time. Thank you