Shift registers: add more digital I/O to your Arduino

Shift registers are useful chips that can add more outputs or inputs to your micro-controller. The 74HC595, for example, provides 8 additional digital outputs that can be controlled with only 3 Arduino pins. Additionally, you can “daisy-chain” multiple shift registers to multiply the number of outputs even further.

Below is a great video by Kevin Darrah explaining how shift registers actually work. He took an interesting approach demonstrating the functionality of the shift register using manual input via push buttons, rather than a micro-controller. Continue reading

An Arduino self-balancing robot: working prototype

I spent some time reading on accelerometers, gyros, sensor fusion, PID, optimized PWM motor control. I tinkered with the components I have for a while and then procrastinated for even longer. Finally, I can say that I have a prototype of a self balancing bot that shows promise.

More fine-tuning is needed, and I plan to add a Bluetooth module to get PID controller data wirelessly, possibly to adjust the PID coefficients in real time and, hopefully to steer the bot remotely someday. Continue reading

Arduino Uno and the InvenSense MPU6050 6DOF IMU

MPU6050-Arduino-Uno-Connections

A while back I bought the InvenSense MPU-6050 sensor in a “GY-521” breakout board from eBay. For a long time it sat quietly in my box of “possibly cool things to check in the future”. Recently, I decided to finally get to building a self-balancing robot and dug it out. As with almost anything from eBay, it came with no documentation.

The MPU-6050 breakout boards are quite popular in the Arduino community and information was  easy to find. Even too easy: it took me a while  to sift through many partial, or “almost” working implementations before I found a relatively easy to use, clean and reliable set of instructions and Arduino sample code. So here it is documented for future reference!

MPU-6050 Overview

According to the InvenSense MPU-6050 datasheet, this chip contains a 3-axis gyroscope and a 3-axis accelerometer. This makes it a “6 degrees of freedom inertial measurement unit” or 6DOF IMU, for short. Other features include a built in 16-bit analog to digital conversion on each channel and a proprietary Digital Motion Processor™ (DMP) unit. Continue reading

28BYJ-48 Stepper Motor with ULN2003 driver and Arduino Uno

First, lets see the little steppers in action! Our main character, StepperBot, is “instructed” to move in a square path on my coffee table, making 90 degree turns at the corners. Turning exactly at the right time and by the right angle is critical avoid falling off and crashing on the floor in an embarrassing pile of messy wires.

Continue reading

Using Bluetooth and an Android phone for debugging Arduino sketches

I bought a Bluetooth module a few months ago and never really tried to use it because in my mind it would be another module that would require hours digging the internet to find libraries, and some code sample to get me started.
Only after reading Stan’s post about Bluetooth modules I realized how easy is to get them working and how useful they can be to troubleshoot projects that require movement (like robots).
Bluetooth basically makes your serial port wireless and open a whole new set of possibilities with two way communication between your Arduino and a Bluetooth enabled device.
See more on the video below…
Arduino – Robot troubleshooting with Bluetooth module

Arduino robot controlled from an Android phone via Bluetooth

Project overview

This is a differential steering robot that can be controlled from an Android phone via Bluetooth. The robot’s “brain” is Arduino Uno compatible board (an “Arduino on a breadboard”). The robot uses a JY-MCU Bluetooth module for communication with the Android phone. A custom Android app, created with the MIT App Inventor 2 essentially acts as a remote control, sending commands to the Arduino that tell the robot to move forward, reverse, stop or rotate.

Continue reading