I have had success with getting PiBBOT to balance.
When I saw my first two wheel balancing robot I was very fascinated. And after receiving my Raspberry Pi, I decided to build one myself.
PiBBOT (PiBalancing roBOT) is my first successful balancing robot. And it has room for improvement and extra functionality.
When building PiBBOT, I had a few roadblocks I needed to overcome;
I originally had the Anker as the power source for both Pi and the motors, however the amperage was too low.
Original H-Bridge not powerful enough for my motors
Gyro calculation off by 15 degrees
The TFT displays the angles from the accelerometer, gyro, complementary filter and power to the motors.
The buttons are to turn the motors on and off and to reset the gyro.
Incorporate the wheel encoders for better balance
Build a sturdier frame
Implement direction control
The able to self right itself after falling over
Retrieve a can of beer from the fridge
PiBBOT consists of these components;
Adafruit: TFT; 2.2" 18-bit color TFT LCD display RF Receiver :RF M4 Receiver - 315MHz
Pololu; Motors; 9.7:1 Metal Gearmotor 25Dx48L mm with 48 CPR Encoder Wheels; Pololu Wheel 90x10mm IMU; MinIMU-9 v2 Gyro, Accelerometer, and Compass (L3GD20 and LSM303DLHC).
Anker; Battery; Anker® Astro3 10000mAh 5V / 9V / 12V 2A Dual USB Output External Battery
Tenergy; Battery; 7.2V Tenergy 3800mAh Flat NiMH High Power
I'm using a shield from Texy to attach my TFT to my Pi.
This is soooo much easier then connecting up the cables individually, which requires me to always refer to the wiring diagram... and it always takes me two or three goes to get it right.
This just requires a quick snap onto the top of the GPIO pins. It also includes wiring to use 3 buttons on the GPIO pins not being used by the TFT.
If you have multiple Raspberry's or even multiple Unix hosts , you will start to get frustrated at constantly having to enter a password every time you copy files between them or access these devices from another Unix host.
There is an easy way to disable this with RSA key pairs.
On each host, enter ssh-keygen
Hit enter to keep the default directory.
Passphrase. Leave blank and hit enter
Your keys are created under .ssh/
Now you need to copy over your key to all the other hosts with; ssh-copy-id -i .ssh/id_rsa.pub username@serverip
Once this is done, you should now be able to copy files or access each device without having to use passwords.
You still need to enter a password when trying to connect from a host that hasn't got a key.
Notro has done some great work with developing drivers for different models of TFT displays for the Pi.
He successfully created one for the Adafruit 2.2" TFT . This is a great little display and is very clear.
Here is my first attempt at getting PiBBot balanced.
This is a very early prototype, confirming that all the hardware works and the I can get the time of the main loop down to 20ms, which was easy.
This prototype also helped me get my head around the code and math need to balance.
I am waiting on the delivery of some hardware to build my final and larger version. Which will have a battery pack placed up high, this will help a lot with the balancing.
The main components used to balance this prototype;
MinIMU-9 v2 Gyro, Accelerometer, and Compass (L3GD20 and LSM303DLHC Carrier)
Solarbotics GM6 120:1 Mini Gear Motor Offset Output
Dual H-Bridge Motor Driver
315MHz RF M4 Receiver
The receiver allowed my to change the PID values in real time.
Below is some information on how to get an 8x8 led matrix working on your Raspberry Pi using C.
I have also included the code needed to get text scrolling.
The matrix I am using is this one from Adafruit. This matrix uses a HT16K33 controller chip and communicates with the Pi via the i2c bus.
Adafruit has very good and detailed tutorials on how to solder it up and get i2c working between your Pi and the Matrix.
Scan the i2c bus for your device.
Download the code needed.
1. Scan i2c bus
Adafruit have some great instructions in the links above on how to do this.
When using i2cdetect to scan my bus, 0x70 was returned for the address of my matrix.
I am using a Rev B board and my bus is 1. If you get nothing back, check bus 0 with i2cdetect -y 0.
Below is some detail regarding the latest project I have been working on. Which is near completion.
I plan to wire it up permanently, place within a case and wall mount it.
Some of the images don't come up too great in the video, I have included the actual images used here;
I created a simple one line bash script that polls for the temperature every 5 mins.
The main python program uses pygame to write to the TFT via a framebuffer and Matplotlib is used to create the Graphs.
The display can be changed by either the button on the breadboard or via the remote FOB.