Let's Make Robots!

Micro Magician robot controller - I can finally tick the project complete box!

I started designing this controller in December 2011. After 4 months and 2 previous revisions it will finally be shipping out April 2012. I think this is DAGU's best Arduino compatible robot controller yet!

Designed for small robots using small batteries, the Micro Magician is a 3.3V controller running at 8MHz.
Working from 4.5V to 9V means this constroller can run from a single LiPo cell or 3x NiMh batteries.
Reverse polarity protection means no blue smoke if you get your power wires crossed (reverse polarity diode rated at 3A).

The Micro Magician is small (60mm x 30mm) and yet is has many features you won't get on big boards.

Dual FET "H" bridge with charge pump:

  • Drives 2x DC motors or 1x stepper motor.
  • Low voltage opperation from 2.5V to 9V.
  • Low "ON" resistance of just 1.1Ω with a supply voltage of 3V for better motor torque.
  • Electronic brake is ideal for small robots that need to stop quickly.
  • Current limit set to 910mA to prevent accidental damage due to stalled motors or short circuits.
  • Motor stall flags allow your code to determine if a motor has stalled.
  • Sleep mode to reduce power consumption when not used. Allows control pins to be re-used.
  • Arduino library includes commands to simplify use with DC motors and stepper motor.

3-axis accelerometer:

  • Defaults to ±1.5G full range sensitivity. Can be changed to ±6G if required.
  • 0G detect can be used with external interrupt pin to shut down servos or motors when the robot falls to protect gears.
  • Can measure the angle the robot is sitting at to prevent falling over or aid in self righting manuvers.
  • Arduino library includes commands to detect direction / magnitude of an impact, eliminating the need for bumper switches.

IR receiver with status LED:

  • 38KHz IR receiver hardwired to digital pin 4 allows low cost remote control using a TV remote.
  • Status LED indicates when a signal is received to aid program debugging.
  • Arduino library includes Sony IR Code (SIRC) decoder providing 128 virtual buttons.
  • Additional IR receivers can be added on other pins and read using library decoder.

Drive up to 8x servos:

  • Up to 8x miniature servos can plug directly into the PCB and be powered from the battery.
  • Servos protected by reverse polarity diode.

I have attached the instruction manual and library. These will also be available on my product support site:



Micro_Magician_instruction_manual.pdf1.96 MB
microM.zip8.08 KB

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

I have the Micro Magician connected to a MacBook Pro 15" 2013 non-Retina display laptop running Mac OS X 10.8.5. I have it connected to the rearward USB port (there are two). I'm using Arduino IDE 1.0.5.

1. I connect the MM to the Mac. Some LEDs flash momentarily, then a red and green LED stay on.
2. I launch the Arduino IDE.
3. In the IDE, I select Tools>Board>Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328
4. I select Tools>Serial Port>
5. I only see Bluetooth devices in the Serial Port submenu.
6. I exit the IDE, unplug the MM, and connect an Arduino UNO, then follow the above steps for the UNO.
7. I see the UNO in the Serial Port submenu, as expected.

What do I need to do for the Arduino IDE to see the Micro Magician? I'm dead in the water for now. I don't want to buy a motor shield, an accelerometer shield, and an IR receiver shield for the UNO when I already have them on the MM.


Have you installed the drivers for the cp2102 used as a USB to serial converter?

Yes, I have. Twice, and rebooted twice. Shouldn't it show in the "Serial Port" list?

It turned out to be the USB cable. I was using one designed to only provide power and no signal. I swapped it out for a data cable, and I'm in business.

I've had similar problems before all though in my case it was a cheap cable with an internal break. If you hold the cable at a certain angle it stops working but the IDE still see's the port. Some times I get AVRdude complaining about the wrong processor being used and other times I get out of sync error.

I am trying to communicate with the IR using the MicroM library on the receiving end and the IRremote library to send.  For the transmitter I am using the following code:

#include <IRremote.h>
IRsend irsend; 
void setup(){}
void loop(){
for (int i = 0; i<3; i++){
irsend.sendSony(0xa90, 12); //Sony TV power code


"IR command:128" is always the output.  I understand that only 7 bits are being used in your rx code and so I have tried different variations: irsend.sendSony(data, bits) to (0,7) and (64,7)...and all sorts of others.

Any tips?

I admit, I have never used the IR library to send a signal. I have simply used a TV remote.

The normal SONY IR protocol is 7 bits of data followed by 5 bits of device ID. My library simply waits for the start bit, reads the seven data bits and ignores the rest until a new start bit is recognized.

Some things you should check.

  1. is the diagnostic LED next to the IR receiver on the Micro Magician lighting up when you transmit data? If not then the problem is with your transmitter. Is your transmitter LED aproximately 950nm? Are you modulating at 38KHz?
  2. Are you running any other libraries on the Micro Magician that use Timer 2? This would change the timer settings and prevent my library from working. The Tone() command for example also uses timer 2.
  3. run the example code for testing the Micro Magician IR receiver using a standard Sony remote.
  4. make sure there are no bright sources of IR light such as bright sunlight.

Nice job! I just want find a micro controller board and like your design very much!

As you are in China you can buy this directly from DAGU. Contact Claudia: claudiadagu@yahoo.com.cn

thank you for replay. I would contact him later!