GOduino III Robot Controller

UPDATE

Oct 8, 2012: I have made a small PCB adapter to complement the GOduino III to enable 90 degree positioning of directional sensors such as ultrasonic and IR proximity sensors.  I have posted the details here: http://www.instructables.com/id/Plug-your-sensors-on-the-breadboard-at-90-degrees-/

INTRODUCTION

This is my first PCB project so I would appreciate the feedback.

The GOduino III is an Arduino compatible Open Source Hardware robot controller. It's a simple and inexpensive robot controller (appx. $25). I built this controller for my robotics workshops as well as for my personal projects.  The GOduino III can be inserted into a breadboard for easy prototyping. The GOduino III comes with a software library to support motor functions. 

The GOduino III is based on the ATmega328p microcontroller and the L293D dual h-bridge. It's built with DIP ICs and through-hole components for ease of assembly and repair.  This robot controller can handle 2 small servos and 2 DC brushed motors (max 1.2A for each motor with 2 X L293D).  

The GOduino III can be programmed with a standard Arduino IDE via an FTDI USB/UART programmer or via the ICSP header using programmers such as AVR-ISP, STK500, or parallel programmers.   

This is a 3rd generation GOduino. The one before was the prefboard GOduino II.

SPECIFICATIONS 

  • Based on the ATmega328p microcontroller @ 16 MHz (the heart of the Arduino Uno DIP model)
  • Size:  5cm X 2.5cm. 
  • Plugs into a breadboard with the help of 0.1" (2.54mm) male headers or you can solder female headers.  
  • Arduino standard digital, analog, and special purpose pins exposed. 
  • Digital I/O Pins: 14 (of which 6 provide PWM output) - Analog Input Pins: 6 
  • 2 X LED: one for power and another for pin 13.   
  • Reset button.
  • 2 X 3-pin 0.1" (2.54mm) headers (5V) for small servos. 
  • 2 X 2-pin 0.1" (2.54mm) header for brushed DC motors. 
  • 6-pin 0.1" (2.54mm) ICSP male header. 
  • 6-pin 0.1" (2.54mm) male header to accommodate FTDI USB programmer. 
  • Flash Memory: 32 KB of which 0.5 KB used by bootloader 
  • SRAM: 2 KB
  • EEPROM: 1 KB   

PROGRAMMING 

  • The GOduino III can be programmed with the Arduino IDE via an FTDI USB programmer
  • It can also be programmed via the ICSP header using programmers such as AVR-ISP, STK500, or parallel programmers.
  • The FTDI "FT232RL USB to Serial adapter" can be purchased for less than $10 from Ebay.
  • Also, you can use an Arduino Uno DIP to program the GOduino III ATmega328 microcontroller then insert it back into the GOduino III.
  • Auto-reset capability for FTDI programmers via the DTR pin.   

POWER 

  • Logic Voltage: 5V supplied by the T7805CV regulator.  
  • Input Voltage (recommended): 7-12V. (limits): 6-20V 
  • Motor Voltage: While the L293D motor driver IC is rated for 4.5V to 36V, we are bound by the recommended/limit  voltage ratings of the power regulator.  
  • 1N7001 diode protects against reverse voltage from the external power source.
  • The L7805CV regulator provides 1.5 A which is enough to power the GOduino III and 2 small servos.
  • You can swap the 7805 with pin-compatible low-drop out voltage regulators with higher current such as the LM1084-5V which can source 5A with a maximum dropout voltage of 1.5V. 
  • The 5V regulator also powers the servos but not the motors. 
  • For the motors, the L293D h-bridge gets its power from the DC jack or from the VIN pin directly.  
  • You can select to power the GOduino III from USB or External power with a pin jumper. Please note that USB power may not be enough to operate servos and motors. 
  • The L293D h-bridge can supports 2 DC motors @ 600mA continuous current each. You can piggyback two L293D to double the current to 1.2A per DC motor.   

PARTS

Part Qty
Capacitor ceramic 0.1uF 5
10uF/25V 1
100uF/16V 1
100uF/6V 2
Diode 1N4007 1
LED Red 3MM 1
LED Green 3MM 1
ATMEGA168P Microcontroller
1
7805 5V regulator 1
L293D dual h-bridge 1
DC Jack female 1X2-3.5MM 1
40-pin male header (0.1" 2.54mm) 1
Resistor 10K 1
Resistor 1.0 K 2
Reset button 1
16.00MHz Ceramic resonator 3-pin 1

I am considering replacing the 3.5mm DC power jack with a terminal block for the next patch of GOduino PCBs. 

You can get the EAGLE schematics for the PCB from Github along with the library. The board layout is being modified but I will post it to Github soon as I am done. 

BACKGROUND

This is a 3rd generation of GOduino robot controllers which I began in March 2012 with the breadboard version, then the pref board version, and now this PCB version.    

SOFTWARE LIBRARY 

There are 4 functions in the Goduino library:

  • motorSpeed(mot1speed, mot2speed)  Sets speed for both motors
  • motorStop(motorNum)  Stops a motor
  • motorForward(motorNum)  Spins a motor in one direction
  • motorBack(motorNum) Spins a motor in the reverse direction. 

The 2 servos are controlled by the standard Arduino servo library.

The pins between the ATmega328p and the L293D are mapped in this manner:

Motor 1 Pole 1 ---> Arduino Pin 4
Motor 1 Pole 2 ---> Arduino Pin 2
Motor 2 Pole 1 ---> Arduino Pin 7
Motor 2 Pole 2 ---> Arduino Pin 8

Motor 1 Enable ---> Arduino Pin 5
Motor 2 Enable ---> Arduino Pin 6

NOTE: I have avoided using Arduino Uno pins 3 and 11 because they are used by the Arduino tone() function. So now I can build a robot that makes noise.  (applause).

https://github.com/techbitar/goduino

VIDEO

http://youtu.be/J35O-gT7Asw

CREDITS

Special thanks to my good friend Jafar Quttaineh for his invaluable suggestions. The GOduino III form factor was inspired by Adafruit's Boarduino which is an Arduino clone that can be plugged into a breadboard. Using this form-factor for the GOduino III makes prototyping robots for newbies much simpler. (adafruit.com) 

GOduino3-a-1-lowres.jpg

https://www.youtube.com/watch?v=aS2T6JtMGKg?version=3

Congrats on a nice board.

I am curious why you are using the 293 instead of the 754410?

h-bridge

There was a good discussion on this issue when I published the GOduino II. It’s a toss up. But since I had plenty of L293D chips which I got from ebay for almost $1 a piece I thought wjy not use them :slight_smile:

https://www.robotshop.com/letsmakerobots/node/32041

Fantastic answer! :slight_smile:

Because you have them is probably the best answer anyone can have. :slight_smile:

It is right up there with “Because it’s there.” :slight_smile:

Not exactly

I was convinced by Adafruit’s Limor Fried analysis of both ICs which came in favor of the L293D (see link to past discssion) so I decided to stock up on L293Ds. And since there’s no compelling argument (for me at least) that tilts the scale in favor of the other IC, I decided to stock up on the L293D for the GOduino projects. I will have to pick another IC of course for future smd controllers. 

SN754410

Opps…I just noticed the previous dicscussion did not have a link. Here’s what Limor Fried says about the SN754410:

"On using the SN754410: Some people use the SN754410 motor driver chip because it is pin-compatible, has output diodes and can provide 1A per motor, 2A peak. After careful reading of the datasheet and discussion with TI tech support and power engineers it appears that the output diodes were designed for ESD protection only and that using them as kickback-protection is a hack and not guaranteed for performance. For that reason the kit does not come with the SN754410 and instead uses the L293D with integrated kickback-protection diodes. If you’re willing to risk it, and need the extra currrent, feel free to buy SN754410’s and replace the provided chips."

http://www.ladyada.net/make/mshield/use.html

Mount for adding Heatsink,

I usually use L293D for all my robotic projects. I have tried to interface both DC 12V geared motors and the smaller BO geared motors, Havn’t fried any. The one istance I fried them is when i directly connected a DC toy motor(without any gears).You can probably provide a mount for placing heatsinks, which will definately prevent your IC from frying. There is also an Note on the data sheet, which talks about providing large ground planes around the ground pins on teh IC. This will definately help . . :slight_smile:

My Robot Controller -M1 board. No its not a DIY.

Hey Bitar, 

Nice work on the board, Looks very simple and easy to build.

I have made a similar product for conducting workshops on robotics in India. here is  the link: http://www.mlees-robotronics.in/home/robotronics-products/robot-controller-m1, I will try to add the project here in LMR. 

I have built couple of libraries as well for using them with AVR studio/ winavr. 

Nice looking board. It looks

Nice looking board. It looks like a nice base for robot prototyping.

Thanks

That’s exactly the idea. Cheap and easy to build. 

**Thermal shutdown **

Good suggestion. The nice thing about the L293D is the thermal shutdown. It seems to provide a resonable meaure of protection when a motor’s peak/stall current exceeds the 293’s specs. BTW, you did a nice job with your motor controller.