m3pi

Finally the long awaited official m3pi is here, and it's looking good!

/media/uploads/chris/_scaled_pololu_m3pi.jpg

Its home page, with loads of linked resources are available at the offical Pololu m3pi page

The m3pi robot consists of an mbed connected to the Pololu 3pi robot

The 3pi contains a low level MCU that takes care of motor control, optical sensors and other hardware oriented functions. When the 3pi is programmed with the stock "slave" firmware, will make this functionality available through an API over a serial port.

The m3pi consists of an mbed Microcontroller running the high level functions and control algorithms, implemented by API calls to 3pi hardware. The mbed Microcontroller is then free run protocol stacks and communications interfaces (bluetooth, Zigbee, Wifi and so on) as well as control algorithms, mass storage for preprogrammed routines and so on.

Hello World!

This simple program will drive the m3pi forward, spin it left, reverse it and spin it right.

Import programm3pi_HelloWorld

Hello world program that just gets the m3pi moving

You Tube Clip

Hardware

There is very little connectivity required between the mbed and the 3pi to make it all work.

mbed3pi
GroundGround
VinVcc
p8RST to the 3pi
p9 (from mbed)RXD (to the 3pi)
p10 (to the 3pi)TXD (from the 3pi)

Library and API

Import library

Public Member Functions

  m3pi ()
  Create the m3pi object connected to the default pins.
  m3pi (PinName nrst, PinName tx, PinName rx)
  Create the m3pi object connected to specific pins.
void  reset (void)
  Force a hardware reset of the 3pi.
void  left_motor (float speed)
  Directly control the speed and direction of the left motor.
void  right_motor (float speed)
  Directly control the speed and direction of the right motor.
void  forward (float speed)
  Drive both motors forward as the same speed.
void  backward (float speed)
  Drive both motors backward as the same speed.
void  left (float speed)
  Drive left motor backwards and right motor forwards at the same speed to turn on the spot.
void  right (float speed)
  Drive left motor forward and right motor backwards at the same speed to turn on the spot.
void  stop (void)
  Stop both motors.
float  pot_voltage (void)
  Read the voltage of the potentiometer on the 3pi.
float  battery (void)
  Read the battery voltage on the 3pi.
float  line_position (void)
  Read the position of the detected line.
char  sensor_auto_calibrate (void)
  Calibrate the sensors.
void  calibrate (void)
  Set calibration manually to the current settings.
void  reset_calibration (void)
  Clear the current calibration settings.
void  leds (int val)
  Write to the 8 LEDs.
void  locate (int x, int y)
  Locate the cursor on the 8x2 LCD.
void  cls (void)
  Clear the LCD.
int  putc (int c)
  Send a character directly to the 3pi serial interface.
int  getc ()
  Receive a character directly to the 3pi serial interface.
int  print (char *text, int length)
  Send a string buffer to the 3pi serial interface.

Resources

Useful numbers

  • Speed of rotation: 720 degrees per second at half speed
  • Forward/Backward: 470mm per second at half speed

Hardware design prototype


Discussion topics

Nothing here yet!

Questions