The Micro Magician V2 is the perfect controller for small robots. At just 30mm x 60mm this board is less than half the size of a standard Arduino board but is packed full of featured needed for making a small robot. The V2 controller is fully software compatible with the Arduino IDE and code can be loaded using either the ISP interface or USB.
- Compatible with Arduino IDE – Type: Arduino Pro or Pro Mini (3.3V, 8MHz) w/ ATmega328
- ATmega328P processor running at 8MHz, 3.3V with 32K FLASH, 1K EEPROM and 2K SRAM
- Input voltage from 3.6V to 9V
- Built in LDO +5V, 1A regulator (input voltage must be at least 5.5V) to power external 5V devices
- Built in LDO +3.3V, 500mA regulator
- Reverse polarity protection rated at 6A for protecting servos and motor driver IC
- Reverse polarity protection rated at 3A for logic and other 3.3V devices
- Built in USB using the CP2102 interface IC
- Built in dual FET “H” bridge with current limiting, motor stall detection and electronic braking
- Built in 3-axis accelerometer with 0G detection and selectable ±1.5G and ±6G ranges
- Built in 38KHz IR receiver providing 128 virtual buttons when using the Sony IR protocol
- 8x digital I/O pins with 3 pin male header and selectable supply voltage for logic / driving servos
- 3 pin male headers on analog inputs to provide 3.3V power for sensors
- 4 pin female communications header for 3.3V wireless transceivers (Xbee or Bluetooth)
- ISP socket for bypassing the bootloader and programming the processor directly
- Power, Rx, Tx, D13 and IR signal indication LEDs
- Software library provides functions for IR decoding, angle / impact detection, motor control
The Micro Magician V2 is designed to work on voltages as low as 3.6V allowing it to be powered by 3xNiMh cells or a single Li-ion cell. Do not exceed 9V otherwise damage to the A3906 motor driver will occur. A +5V, regulated output is also available for powering 5V devices if the input voltage is greater than 5.5V.
Two link inputs allow two battery holders to be linked in series otherwise they can be ignored. These pins only connect to each other. A female header provides power output for external devices controlled via the onboard power switch. The controller can be powered via the USB port or ISP socket for programming. In this mode the board will power up regardless of the switch position but motors and servos will not have power. Polarity protection prevents damage if the battery is accidentally connected the wrong way.
A3906 Dual FET “H” bridge
The A3906 motor driver can drive two DC brushed motors or 1 stepper motor. The FET “H” bridges have a very low voltage drop so each output has been internally limited to 910mA to prevent damage from accidental short circuits. Electronic braking is possible by driving both inputs high.
The “motor stall flags” are normally held high by pullup resistors and will go low when a motor draws more than the 910mA current limit. Connect these to spare digital inputs so your program will know if your robot gets stuck. When not in use the A3906 can be put into sleep mode and it’s control pins (D5 – D8) used for other purposes.
MMA7361L 3-axis Accelerometer
The MMA7361L detects acceleration due to both gravity and motion on all three axis’s. This feature gives robots a sense of balance and can be used to detect if the robot is about to fall over. If the robot has fallen over then this sensor can aid self-righting maneuvers. The ability to detect acceleration can also be used to determine if the robot is moving or has been involved in a collision eliminating the need for bumper switches. This sensor uses Analog inputs A0, A1 and A2. The sensitivity defaults to +- 1.5g but +/- 6g can be selected by pulling the G select pin high. If your robot falls then the 0G detect pin will go high. Use this pin in conjunction with an external interrupt pin to disable servos (pull their control pin low) and shutdown motors to reduce the chance of stripped gears.
The digital outputs D1, D2, D3, D9, D10, D11, D12, D13 can be used to drive servos. Use the V+ selection jumper to connect the V+ rail to +Bat. This will power your servos directly from the battery. Be careful not to connect any 3.3V device to V+ when powering servos. Most miniature and standard servos require 4.8V – 6V. Make sure you battery voltage does not exceed the servo voltage. The ground wire will be black or brown. Because D1 is also the TX pin, any servo connected to this pin will move unpredictably during serial communications. This can be avoided by turning the power switch off during an upload. The processor will remain powered via the USB cable but the motors and servos will be disabled.
External interrupt pins
D2 and D3 can be used for external interrupts. These pins connect to the MCU’s internal hardware and allow your program to respond quickly to external events without constantly monitoring the pins in the program. These inputs are ideal for monitoring encoders, motor stall and 0G detection flags.
38KHz IR receiver
The built in IR receiver allows the controller to receive commands from a universal TV remote. This allows you to send the robot instructions while it is on the move and can be very useful for diagnostics. This sensor is hardwired to D4 and has a status LED to indicate when a 38KHz signal is being received. The operation of the status LED is independent of the software making it an ideal tool for testing and debugging.
The Micro Magician has a header for an external communications device such as a BlueTooth or Xbee module. This header is for 3.3V devices only. Because this header shares the same serial port used by the USB device it may be necessary to unplug any devices from this port when using the USB interface for programming and debugging. Do not use D1 for servos or other devices when using an external communications device, as this pin is the TX pin.
The ISP socket is normally used for burning the bootloader into the Micro Magician. The +5V pin feeds to the 3.3V regulator via a reverse polarity protection diode allowing the board to be powered by the ISP socket when the bootloader is being written. Series resistors protect the 3.3V system from damage when using a 5V device to write the bootloader. This allows another Arduino board to act as an ISP programmer. Although a reset button is not included on the PCB you can connect one to pins 5&6 of the ISP socket (GND & RST). Pin 1 (MISO) has a small triangle printed on the PCB next to it.
The Micro Magician can be programmed using a USB cable and the Arduino IDE, which is free from the internet. The controller comes preinstalled with the Arduino Pro (3.3V @8MHz) ATmega168 or ATmega328 bootloader. To make the Micro Magician easier to use, an Arduino library “microM” has been written. This library includes functions for the on-board hardware and generates several global variables that can be accessed in your programs for reading information or changing default settings.
The microM library can be downloaded from the DAGU product support site here:
Unzip the “microM” folder and copy it into the Arduino libraries folder. Next time you run the Arduino IDE, go to File > Examples > microM to see some example code.
microM.Setup(): This function initialises Timer 2 for use with the microM library. It is only required when using the global byte microM.ircommand and microM.Impact() function. Timer 2 is also used by some other libraries and commands such as “Tone()”. Use microM.Setup() to re-initialise timer 2 afterward.
Detecting impacts with the 3 axis accelerometer
microM.Impact() This function uses timer 2 and monitors the 3 axis accelerometer at regular intervals looking for sudden changes that would indicate an impact. The global integer,
microM.sensitivity determines the minimum magnitude to register as an impact. The default value is 50. Because any object will vibrate when sustaining an impact, only the initial sensor readings will be valid. After initial impact has occurred, a timeout period determined by a global integer variable, microM.devibrate prevents false readings. This value defaults to 100 (approximately 500mS) but can be increased for large robots.
- microM.deltx: integer represents the impact magnitude along the X-axis.
- microM.delty: integer represents the impact magnitude along the Y-axis.
- microM.deltz: integer represents the impact magnitude along the Z-axis.
- microM.magnitude: integer represents the total impact magnitude vector.
Use the magnitude integer to determine if there is an impact and then use the delta X,Y and Z integers to determine the direction of impact. This allows the accelerometer to replace bumper switches on a robot. As reading the analog inputs takes a relatively long time (260uS) the raw data is also available via these global integers to save your program reading them a second time.
Reading the IR receiver
The microM ISR (interrupt service routine) initialized by the microM.Setup() function includes a Sony SIRC decoder. When using a universal remote programmed to use a Sony IR Code the receiver can be read using the global variable microM.ircommand. If you wish to use an external IR receiver connected to a different IO pin then use microM.irpin to change the input pin. This value defaults to 4.
Driving DC and stepper motors
microM.Motors(leftspeed, rightspeed, leftbrake, rightbrake) function provides a simple means of controlling speed, direction and braking of two DC motors.
- leftspeed is an integer specifying speed and direction from –255 to +255.
- rightspeed is an integer specifying speed and direction from –255 to +255.
- leftbrake non zero values engage electronic braking on the left motor.
- rightbrake non zero values engage electronic braking on the right motor.
- microM.Stepper(direction, mode) function provides an easy way to drive a stepper motor. Bi-polar and Uni-polar motors can be driven.
- direction integers greater than 0 step forward, less than 0 step reverse. A value of 0 will turn off power to the windings.
- mode full steps are the default. A non zero value indicates half steps.
Interfacing to 5V systems and devices
The Micro Magician is a 3.3V system but you can still interface with 5V systems and devices by following a few simple precautions. The new V2 controller has a built in 5V regulator for powering these devices. To use the 5V regulator, the battery voltage must be more than 5.5V.
The digital I/O pins of the micro Magician should have at least 4K7 resistance in series when connecting to a 5V device. This will limit the current through the MCU’s clamping diodes to a safe level.
When connecting 5V analog sensors to the analog inputs of the micro Magician a voltage divider should be used to limit the maximum input voltage to 3V. The diagrams below demonstrates the best way to connect 5V digital or analog sensors.
More information available HERE