The Baby Orangutan B-48, B-168, and B-328 robot controllers are complete control solutions for small robots. The small module includes a powerful Atmel ATmega48/168/328P microcontroller, two channels of bidirectional motor control, a user potentiometer, 18 user I/O lines (16 of which can be used as general-purpose digital I/Os and 8 of which can be used as analog input channels) that can be used to expand the system. A battery, motors, and sensors can be connected directly to the module to create simple robots.
Note: This user’s guide applies only to the most recent Baby Orangutan B revision. The older, discontinued Baby Orangutans have green solder masks while the new Baby Orangutan Bs have blue solder masks.
You can check the Baby Orangutan B-328 robot controller page for additional information, including pictures, example code, and application notes.
We would be delighted to hear from you about any of your projects and about your experience with the Baby Orangutan Robot controller. You can contact us directly or post on our forum. Tell us what we did well, what we could improve, what you would like to see in the future, or anything else you would like to say!
The basic schematic of the Baby Orangutan B is identical to that of the larger Orangutan SV-328 and Orangutan LV-168 robot controllers. You can effectively build your own Orangutan SV-328 by adding a buzzer, LCD, and pushbuttons as indicated in the Orangutan SV-328 schematic. This design means software can be written for one device that will work on the other, provided the Baby Orangutan is given matching hardware connections.
The Baby Orangutan contains a programmable ATmega48, ATmega168, or ATmega328P AVR microcontroller, a TB6612FNG dual H-bridge for direct control of two DC motors, a 10k user trimmer potentiometer (connected to ADC7), a green power LED, a red user LED (connected to PD1), a 20 MHz resonator, and a reverse-battery-protection MOSFET, all containted in a tiny 1.2" x 0.7" 24-pin DIP package. Power pins, one of the motor outputs, and several I/O lines are all accessible from one side to enable use of the Baby Orangutan as a single in-line pin (SIP) package for applications that do not require all of the I/O lines.
The pinout diagram, combined with a pin assignment table, is also available as a downloadable pdf: Baby Orangutan B pinout and pin assignment table (285k pdf).
Warning: Pins PB4 and PB5 are used as ISP programming pins in addition to digital user I/O lines. Be careful not to connect anything to these pins that might interfere with programming (e.g. large capacitance or an external device that could drive those lines during programming). Similarly, don’t connect anything to those lines that might behave unexpectedly when they are driven during programming (e.g. if you use these lines as inputs to a motor driver IC, it could drive your motors in strange and potentially dangerous ways during programming) .
You can tap into the Baby Orangutan’s regulated 5V Vcc line using the pin labeled “Vcc” or either of the two pads on the bottom of the board directly to the left of this pin. You can tap into the Baby Orangutan’s ground using the two pads on the bottom of the board directly to the right of the “GND” pin.
The Baby Orangutan ships with 0.1" header pins as shown in the left picture below: two 12×1 strips and one 3×2 ISP programming header. Both 12×1 strips can be soldered in to allow the module to be used as a DIP component on breadboards or prototyping boards, or a single 12×1 strip can be soldered in to allow the module to be used as a single in-line pin (SIP) component (since power pins, one of the motor outputs, and several I/O lines are all accessible from one side). The header pins can be left off and wires can be directly soldered to the Baby Orangutan for space-constrained installations.
If you solder in the 3×2 ISP header pins, the solder connections should be made along the bottom side of the board so the pin connections are available from the top side of the board, as shown in the right picture above. If you solder the ISP pins to the wrong side of the board, your programmer’s ISP cable will not be able to connect correctly to the Baby Orangutan.
The Baby Orangutan is powered via the VIN and GND pins, which are located at the top-right corner of the board. The device is protected by a MOSFET against accidental reverse-battery connection. The supply voltage should be 5 – 13.5 V, with an absolute maximum of 15 V, so a 5- to 9-cell NiCd or NiMH battery pack is a good choice. This Orangutan can work with a 10-cell NiCd or NiMH battery pack or a 12V lead-acid battery, but you should be aware that such a power source might exceed the controller’s maximum voltage rating if the batteries are freshly charged. When the Orangutan is powered, the green power LED is illuminated. The RESET pin can be brought low to reset the controller, but it can otherwise be left disconnected (it is internally pulled high).
Please see the Pololu AVR Programming Quick Start Guide for tutorials on how to get started programming the Baby Orangutan in Windows, Linux, and Mac OS X. That guide also covers the Pololu AVR C/C++ Library and the Pololu USB AVR Programmer.
This pin assignment table, combined with a pinout diagram, is also available as a downloadable pdf: Baby Orangutan B pinout and pin assignment table (285k pdf).
Motor 1 is controlled by pins PD5 and PD6, and motor 2 is controlled by PD3 and PB3. These pins are connected to the ATmega48/168’s four eight-bit hardware PWM outputs, which allows you to achieve variable motor speeds through hardware timers rather than software. This frees the CPU to perform other tasks while motor speed is automatically maintained.
The suggested procedure for using hardware PWM outputs to control the motors is as follows:
Using these PWM settings, OCR0B = 255 is equivalent to holding PD5 low while OCR0A = 0 is equivalent to holding PD6 high. As you can see from the truth table above, in this state M1B connects to your battery’s positive terminal and M1A connects to ground. Decreasing OCR0B to something less than 255 decreases the percentage of time PD5 is low, causing M1B to alternate between VIN and GND (and hence causing motor 1 to alternate between drive and brake). Similarly, OCR2B = 255 is equivalent to holding PD3 low while OCR2A = 0 is equivalent to holding PB3 high. In this state, M2B connects to your battery’s positive terminal and M2A connects to ground.