spacer The Fitzy and Carraldo Project

Fitzy and Carraldo are twin robots. In this project post I summarize the hardware plans that I set out in my March 2012 Robot Project Post.

My first robot in 2011 was fun but deficient in many respects. The drive system was unreliable, the sensors limited, and the batteries had too little capacity. Given its simplicity however, I count that robot as a moderate success.

In early 2012 I planned a new robot that would have much better capabilities and could serve as a platform for more advanced projects. I got stuck on a mechanical issue and the project stalled. I've finally resolved that problem and the project is progressing.

Before delving deeper into specific parts of the design in future posts, I wanted to summarize the main components and my reasoning behind them.

Overview of the Plan


This robot will use three Li Ion batteries which will provide about 11.1V nominal with a capacity of 2000mAH. A cheap switching regulator will drop this to 6V which will drive the motors. Finally the 6V will power a 3.3V LDO regulator to power the microcontroller and all related circuitry.

Because I want the robot to be fully autonomous this means that the robot should also be able to charge itself. To this end, I've arranged that microcontroller can monitor the three cell voltages using voltage dividers. This will allow the robot to know when it's hungry or full, when it's parked on a smart charger, and even to know when any of the Li Ion batteries are starting to fail.

H-Bridge Motor Drive

The design uses two gear head motors to drive the robot's wheels. To control speed, a PWM H–bridge is used for each motor. My early robot had no way to sense whether the wheels were rotating as expected and drove curves instead of straight lines. Often it would begin to slowly creep along when the robot thought it was motionless.

The microcontroller I chose has two quadrature encoders. By placing two optical sensors on each wheel the quadrature encoder can tell you the direction of rotation and the total rotation that has occurred. We can use this information to also determine the speed of each wheel. This will allow the robot to estimate its current position and adjust the motor speeds to follow a planned path.


Initially I have incorporated three sensors into the design. The simplest are LED/phototransistor pairs. These are useful for very short range (~10cm) object detection. They measure reflected light by sensing the change in phototransistor signal when an LED is turned on.

The Sharp 2Y0A21 range finder works in the intermediate distance range (~10-80cm). Although it does not provide the most reliable data, it is nonetheless better than nothing.

Finally I am incorporating a 38KHz sensitive sensor for detecting beacons. This will allow the robot to reference its position to beacons it discovers in its environment.

By combining the information from these sensors and the robot's dead-reckoning position estimate I hope to give the robot a more robust sense of position.


I've included an I2C LCD display plus 4 buttons in the design. This allows some simple control of the robot during setup and testing. Ultimately the LCD will be removed and the robot will function completely autonomously.

So that I can monitor what the robot is doing and 'thinking', I'm adding a Microchip wireless Mi–Wi module that can communicate with my PC via a ZENA USB Dongle. The MRF24J40MA is small (1.1" x 0.7"), remarkably cheap (~$12 from DigiKey in 1's), has a decent range(~100ft indoor), and interfaces to the microcontroller via SPI. There's also a long range version of this module.

I2C Bus

Finally, by exposing the I2C bus, it becomes possible to add daughter boards for entirely new functionality. I'd like to add a gripper in the near future, and some kind of low-resolution vision sensor in the long term.

So there you go. These are my plans for Fitzy and Carraldo. In the next article, I dive into the drive system and explore the H–Bridge implementation and my misadventures with optical sensors.

Next Section: H-Bridges and Quadrature Encoders