Raspberry Pi RoboPi User Manual

RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Using RoboPi
Copyright 2014 William Henning
RoboPi User Manual v0.60
The most up to date documentation will always be available at:
http://www.mikronauts.com/raspberry-pi/robopi/
http://Mikronauts.com 1 2014-01-27
Photo 1: Fully assembled RoboPi v1.00
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Table of Contents
Introduction................................................................................................................................................3
RoboPi Printed Circuit Board....................................................................................................................4
RoboPi I/O Pin Definitions........................................................................................................................5
P0-P7: SERVO 1 – SERVO 8................................................................................................................5
P8-P15: SERVO 9 – SERVO 16............................................................................................................5
P16-P23: SENSOR 1 – SENSOR 8......................................................................................................5
P24-P27: SPI port for MCP3008/MCP3208.........................................................................................5
ADC1-ADC8: 0-5V Analog inputs.......................................................................................................5
Programming RoboPi with RoboPiLib......................................................................................................6
Using the Raspberry Pi serial port with RoboPi....................................................................................6
RoboPiLib Constants.............................................................................................................................7
RoboPiLib Functions.............................................................................................................................7
Programming RoboPi with RoboPiObj......................................................................................................8
RoboPiObj Constants............................................................................................................................8
RoboPiObj Methods..............................................................................................................................8
RoboPiObj Resource Utilization...........................................................................................................8
How to use Digital Inputs..........................................................................................................................9
Reading Bumper Switches....................................................................................................................9
How to use Digital Outputs......................................................................................................................10
Using LED's to show which bumper is pressed..................................................................................10
How to use Servos....................................................................................................................................11
Controlling a Continuous Rotation Servo...........................................................................................11
Controlling a Standard Servo..............................................................................................................11
How to use PWM to control Gear Motors...............................................................................................12
EN/A/B Three Wire Driver.................................................................................................................12
A/B Two Wire interface.......................................................................................................................12
EN/DIR/PWM Three Wire Driver.......................................................................................................13
DIR/PWM Two Wire Driver...............................................................................................................13
Why the ENABLE signal of three wire drivers is useful....................................................................13
Reading Analog Distance Sensors...........................................................................................................14
Reading Digital Ultrasonic Range Sensors..............................................................................................15
Ultrasonic Sensors to be supported:....................................................................................................15
Stand-Alone Operation............................................................................................................................16
Appendix A: Software..............................................................................................................................17
Appendix B: Data Sheets.........................................................................................................................17
Appendix C: Support...............................................................................................................................17
Appendix D: RoboProp Software Compatibility:....................................................................................18
Appendix E: Frequently Asked Questions...............................................................................................19
http://Mikronauts.com 2 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Introduction
RoboPi is the most advanced robot controller add-on board for the Raspberry Pi available at this time. RoboPi adds an eight-core 32-bit microcontroller running at 100Mhz to the Raspberry Pi in order to off-load hard real time I/O and allow more precise timing than Linux running on the Pi allows.
RoboPi stacked on top of a Model A Raspberry Pi
RoboPi can also be stacked on top of Model B Raspberry Pi's
RoboPi Features
Parallax Propeller P8X32 eight core 32 bit Risc microcontroller running at 100Mhz
Each of the eight cores provides up to 25MIPS as most instructions take only 4 clock cycles
three ten-pin Mikronauts I/O module expansion connectors (P0-P7, P8-P15, P16-P23)
24 servo compatible headers on P0..P23
P0-P7 jumper selectable power from Pi's 5VDC supply or external servo power supplyP8-P15 jumper selectable power from Pi's 5VDC supply or external servo power supplyP16-P23 is powered by 5V from the Pi expansion header for sensors
Screw terminal for providing external power for Servo connectors P0-P15
8 servo compatible headers for an eight channel 0-5V analog to digital converter with choice of
MCP3008 for 10 bit A/D conversionMCP3208 for 12 bit A/D conversion
Choice of 256Kbit or 512Kbit boot EEPROM for the Propeller
On-board voltage regulation providing 3.3V with power on LED from the 5V on the Pi header
4 pin I2C expansion header for the Raspberry Pi
4 pin I2C expansion header for the Propeller
5 pin HCOM connector for use with PropPlug in stand alone operation (optional)
Mikronauts EZasPi prototyping board can stack below RoboPi
Mikronauts Pi Jumper can stack on top of RoboPi
Mikronauts SchoolBoard ][ and other Propeller products are compatible with RoboPi
http://Mikronauts.com 3 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
RoboPi Printed Circuit Board
Here is a top view of where parts are located on the RoboPi printed circuit board:
You can refer to this image while wiring your robot after assembling your RoboPi.
PLEASE NOTE
The “PROPPLUG” connection is for stand-alone RoboPi operation (where RoboPi is NOT stacked on top of a Raspberry Pi. Pins 1-4 are the same as PropPlug (Pin 1 is GND), Pin 5 adds 3.3V for SerPlug.
Plugging in a PropPlug while RoboPi is stacked on the Raspberry Pi may damage your Raspberry Pi and/or RoboPi.
http://Mikronauts.com 4 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
RoboPi I/O Pin Definitions
Before you can write programs for your RoboPi based robot, you have to learn what resources are available for you to connect to sensors, motors and other devices or boards.
P0-P7: SERVO 1 – SERVO 8
10 pin EXP1 connector connected directly to processor pins, 3v3 I/O only
connects to signal pin on SERVO1-8 through a 2k4 current limiting resistor, 5V I/O safe
For the servo header, SV2 selects between the Pi's 5V and VBat from the screw terminal
P8-P15: SERVO 9 – SERVO 16
10 pin EXP2 connector connected directly to processor pins, 3v3 I/O only
connects to signal pin on SERVO9-16 through a 2k4 current limiting resistor, 5V I/O safe
For the servo header, SV3 selects between the Pi's 5V and VBat from the screw terminal
P16-P23: SENSOR 1 – SENSOR 8
10 pin EXP3 connector connected directly to processor pins, 3v3 I/O only
connects to signal pin on SENSOR1-8 through a 2k4 current limiting resistor, 5V I/O safe
the Pi's 5V is used for SENSOR1-8 to provide cleaner power to Ping's etc
P24-P27: SPI port for MCP3008/MCP3208
P24 is MISO, connected to DO on ADC through a 2k4 current limiting resistor
P25 is MOSI
P26 is CLK
P27 is /CS
ADC1-ADC8: 0-5V Analog inputs
connects to the signal pin on ADC1-8 servo style header
the Pi's 5V is used for ADC1-8 to provide cleaner power to Ping's etc
http://Mikronauts.com 5 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Programming RoboPi with RoboPiLib
Using the Raspberry Pi serial port with RoboPi
The Raspberry Pi has 3.3V serial RX and TX signals available on its 26 pin header.
Normally this port is configured to display boot messages, after which it becomes a serial console.
My favorite small text editor is 'joe', which you can install with
sudo apt-get install joe
then
sudo joe /boot/cmdline.txt
remove “console=ttyAMA0, 115200 kgdboc=ttyAMA0, 115200”
sudo joe /etc/inittab
Find the line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
and insert a '#' in front of T0:23
For the changes to take effect, type
sudo shutdown now -r
http://Mikronauts.com 6 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
RoboPiLib Constants
Digital pins can be configured for one of the following four modes:
INPUT pin mode for a digital input
OUTPUT pin mode for a digital output
PWM pin mode for a PWM output (0..255)
SERVO pin mode for a servo output (0..2500)
RoboPiLib Functions
void RoboPiInit(char *device, int bps) use RoboPiInit(“/dev/ttyAMA0”,115200)
void RoboPiExit() close the serial connection with RoboPi
int readMode(int pin) returns INPUT/OUTPUT/SERVO/PWM
void pinMode(int pin, int mode) set pin to one of INPUT/OUTPUT/SERVO/PWM
int digitalRead(int pin) returns 0 or 1 state of pin
void digitalWrite(int pin, int val) sets pin to 0 or 1
int analogRead(int chan) returns 0..1023 from specified channel
int analogReadRaw(int pin) returns 0..4095 from specified channel
void analogWrite(int pin, int val) write 0..255 to PWM pin (off to full on)
int servoRead(int pin) return last servo value written to pin
void servoWrite(int pin, int val) set servo on pin to val (0..2500 us)
In your program, include “RoboPiLib.h”, and add RoboPiLib.o to your command line as follows:
gcc -o myprog myprog.c RoboPiLib.o
http://Mikronauts.com 7 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Programming RoboPi with RoboPiObj
RoboPiObj Constants
INPUT pin mode for a digital input
OUTPUT pin mode for a digital output
PWM pin mode for a PWM output (0..255)
SERVO pin mode for a servo output (0..2500)
RoboPiObj Methods
start Initialize RoboPiObj, start service cogs
pinMode(pin, mode) set digital pin to specified mode
readMode(pin) read current mode of digital pin
digitalRead(pin) read current value (0 or 1) at pin, regardless of mode
digitalWrite(pin) write 0 or 1 to digital pin
analogRead(chan) read analog input channel, scale to 0..1023 return value
analogReadRaw(chan) read analog input channel, return raw 0..4095 value
analogWrite (pin, value) write PWM value to pin, 0 is off, 255 is fully on
servoWrite(pin, value) write servo position to pin , 0 to 2500 microseconds
servoRead(pin, value) return last servo position written to pin
delay(ms) delay for ms milliseconds
delayMicroseconds(us) delay for us microseconds
RoboPiObj Resource Utilization
RoboPiObj uses 4944 bytes of EEPROM/RAM and two cogs for drivers,
ADC_INPUT_DRIVER MCP3208 driver object
PWM_32_v4 PWM/Servo driver object
http://Mikronauts.com 8 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
How to use Digital Inputs
Reading Bumper Switches
Probably the simplest digital input possible is a switch.
<insert schematic of two bumper switches, 10k pullup to 5v, shorts to ground when closed>
#include “stdio.h” #include “RoboPiLib.h”
#define LEFT_BUMPER 0 #define RIGHT_BUMPER 1
#define PRESSED 0
int main(int argc, char *argv[]) {
pinMode(LEFT_BUMPER, INPUT); pinMode(RIGHT_BUMPER, INPUT);
while (1) {
if (digitalRead(LEFT_BUMPER)==PRESSED)
puts(“Left Bumper Pressed”);
if (digitalRead(RIGHT_BUMPER)==PRESSED)
puts(“Right Bumper Pressed”);
sleep(1); // only check once per second
}
}
http://Mikronauts.com 9 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
How to use Digital Outputs
The simplest way of demonstrating a digital output is to use it to light an LED.
Using LED's to show which bumper is pressed
<insert schematic of two LED's connected to EXP pins through 470R resistors>
#include “stdio.h” #include “RoboPiLib.h”
#define LEFT_BUMPER 0 #define RIGHT_BUMPER 1
#define LEFT_LED 2 #define RIGHT_LED 3
#define PRESSED 0
int main(int argc, char *argv[]) {
pinMode(LEFT_BUMPER, INPUT); pinMode(RIGHT_BUMPER, INPUT);
pinMode(LEFT_LED, OUTPUT); pinMode(RIGHT_LED, OUTPUT);
while (1) {
digitalWrite(LEFT_LED, ~digitalRead(LEFT_BUMPER));
digitalWrite(RIGHT_LED, ~digitalRead(RIGHT_BUMPER));
}
}
http://Mikronauts.com 10 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
How to use Servos
#include “stdio.h” #include “RoboPiLib.h”
#define LEFT_SERVO 8 #define RIGHT_SERVO 9
#define SERVO_MIN 500 // may vary between different servos #define SERVO_MAX 2500 // may vary between different servos
int main(int argc, char *argv[]) {
int pos;
pinMode(LEFT_SERVO, SERVO); pinMode(RIGHT_SERVO, SERVO);
while (1) {
for(pos = SERVO_MIN; pos <= SERVO_MAX; pos += 100) {
servoWrite(LEFT_SERVO, pos); servoWrite(RIGHT_SERVO, 3000-pos); sleep(1);
}
for(pos = SERVO_MAX; pos >= SERVO_MIN; pos -= 100) {
servoWrite(LEFT_SERVO, pos); servoWrite(RIGHT_SERVO, 3000-pos); sleep(1);
}
}
}
Controlling a Continuous Rotation Servo
If you are using continous rotation servos, the above code will cause the two servos to be running in the opposite direction ramping the speed down to stopping, then ramping up in the other direction.
Controlling a Standard Servo
If you are using standard servos, the above code will turn the servos as far as possible in one direction, then sweep in the other direction, then repeat in the opposite direction.
http://Mikronauts.com 11 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
How to use PWM to control Gear Motors
Standard motor drivers normally are controlled by two or three digital signals per motor.
EN/A/B Three Wire Driver
The popular L293D and L298 motor drivers are often configured for EN/A/B three wire control.
Some driver boards permanently tie EN high in order to use only two pins, however I do not recommend this practice as it is harder on both the motors and batteries (more later).
EN Function
0 Disable the motor driver, motor coasts 1 Enable the motor, motor turns in direction specified by A or B
Note:
Some motors have an active low input, in which case 0 enables the motor, and 1 coasts. Check the data sheet for your motor controller (or motor controller chip) for details.
A B Function 0 0 Break 0 1 Rotate in one direction 1 0 Rotate in opposite direction 1 1 Break
A/B Two Wire interface
The inexpensive low current L9110S h-bridge is one example of a two wire A/B interface, however many L293D and L298 boards tie EN high to effectively become two pin drivers.
A B Function 0 0 Break 0 1 Rotate in one direction 1 0 Rotate in opposite direction 1 1 Break
http://Mikronauts.com 12 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
EN/DIR/PWM Three Wire Driver
Some motor drivers will have an EN signal, but use extra logic to to use one pin as motor direction, and another as a PWM input to control the motor speed.
DIR/PWM Two Wire Driver
Other motor drivers use extra logic to to use one pin as motor direction, and another as a PWM input to control the motor speed.
Why the ENABLE signal of three wire drivers is useful
Most motor drivers will actively break the motor if the A and B inputs are at the same level.
When PWM speed control is used, both inputs are guaranteed to be driven low during the “off” period of the PWM signal – which will short the two motor leads, actively breaking.
This is less than ideal for the motor, as it will get short spurts of power, then break, repeatedly.
The practical effect of this is that low speed motor control will not be linear, and the motor will sound like it is grinding.
http://Mikronauts.com 13 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Reading Analog Distance Sensors
The Sharp GP2Y0A02YK0F is an excellent infrared distance sensor that uses a 5V supply and typically draws only 33mA and can present a new reading every 50ms.
You can find the data sheet at:
http://www.sharpsma.com/webfm_send/1487
It has a very useful range of 20cm to 150cm, and is extremely easy to use. There are other sensors in the same family covering 10cm-80cm, and even 100cm-500cm – but neither are as useful as the 20cm-150cm GP2Y0A02YK0F.
Please note that the analog output of the sensor is incorrect at ranges shorter than 15cm
Unfortunately the output voltage is not linear with respect to the distance to the object, however it is easy to construct a table of voltages corresponding to the distance to object in 10cm increments.
Finer distance measurement can be approximated by using linear interpolation as the line segments between the 10cm data points can be reasonably approximated by straigt line segments.
Dist = analogRead(IR_Channel)
As analogRead returns 0 for 0V and 1023 for 5V, we can scale its output to 1/100th of a volt by
Dist = (500 * Dist)/1024
Giving us Dist as 0 for 0V, and 500 for 5V
Of course, you could do the reading & scaling in one step:
Dist = (500 * analogRead(IR_Channel))/1024
Please see page 5 of the data sheet for the graph of voltage vs. distance.
http://Mikronauts.com 14 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Reading Digital Ultrasonic Range Sensors
The initial release of the RoboPi firmware does not support ultrasonic range sensors.
We are currently working on an addition to the RoboPi API that will allow using any of the following three sensors interchangeably.
All supported ultrasonic distance sensors will use a generic interface
RoboPiLib:
int readDistance(int sensor_type, int ch)
RoboPiObj:
readDistance(sensor_type, ch)
readDistance(ch) will return the distance to the nearest object in millimeters.
Ultrasonic Sensors to be supported:
PARALLAX_PING SEEDSTUDIO_136B HC_SR04_1 HC_SR04_2
NOTE:
HC_SR04_2 uses two pins
ch for trigger
ch+1 for echo
HC_SR04_1 has experimental support for using a single pin for an HC_SR04 sensor
http://Mikronauts.com 15 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Stand-Alone Operation
Supply 5V to RoboPi via one of:
pins 2 & 4 of the 2x13 pin Pi Header
“Pi5V” terminal of power selection header SV2 or SV3
Supply GND to RoboPi via one of:
pins 9 & 14 of the Pi Header
GND terminal of the external motor power screw terminal
If you will never mount your RoboPi on a Raspbery Pi, you could mount a two pin screw terminal on pins 2 (5V) & 6 (GND) for supplying 5V.
Use a PropPlug to program your stand-alone RoboPi.
http://Mikronauts.com 16 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Appendix A: Software
Raspbian Wheezy or later
SimpleIDE 0.8.4 or later
propeller-load3 or later
RoboPi API v1.0 or later
RoboPiLib v1.0 or later
Appendix B: Data Sheets
http://www.parallax.com/sites/default/files/downloads/P8X32A-Propeller-Datasheet-v1.4.0_0.pdf http://www.parallax.com/sites/default/files/downloads/P8X32A-Web-PropellerManual-v1.2.pdf
http://ww1.microchip.com/downloads/en/DeviceDoc/21298c.pdf http://ww1.microchip.com/downloads/en/DeviceDoc/21754M.pdf
You can find the data sheets for the listed Digikey part numbers at Digikey.com by typing in the part number and clicking on the pdf icon on the resulting page.
Appendix C: Support
For Raspberry Pi support, including Raspbian, please see the Raspberry Pi forums at:
http://www.raspberrypi.org/forum/
For Parallax Propeller support, see the Parallax forum at:
http://forums.parallax.com/forumdisplay.php/65-Propeller-1-Multicore-Microcontroller
For RoboPi support, please visit the RoboPi thread in the Propeller forum at:
http://forums.parallax.com/showthread.php/153275-Propeller-add-on-for-Raspberry-Pi-RoboPi..-the­most-advanced-robot-controller-for-Pi
http://Mikronauts.com 17 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Appendix D: RoboProp Software Compatibility:
use the supplied 6.250Mhz crystal for 100Mhz operation
use 24LC512 EEPROM
use MCP3208
While there is no motor driver on RoboPi, if you connect a two channel motor controller as follows it will be RoboProp compatible:
Tie EN1-2 and EN3-4 high
P8 to IN1
P9 to IN2
P10 to IN3
P11 to IN4
If you want to have a uSD card compatible with RoboProp, attach it as follows:
P12 to MISO
P13 to MOSI
P14 to CLK
P15 to /CS
http://Mikronauts.com 18 2014-01-27
RoboPi v1.00 User Manual v0.60 Copyright 2014 William Henning
Appendix E: Frequently Asked Questions
Q: Where can we buy RoboPi?
A: Currently you can buy RoboPi:
Directly from us – please email us at mikronauts@gmail.com with desired quantity and postal address, we will be happy to send you a quote. We accept PayPal from verified buyers.
From our Ebay store – please visit us at out Mikronauts Ebay store!
<add actual URL>
Distributors and dealers are welcome to contact us for quantity discounts – we would love to have you on-board!
Q: Are quantity and educational discounts available for RoboPi?
A: Yes! We are happy to offer quantity based discounts to our educational users and distributors. Please contact us for a custom quote.
Q: Can we make our own RoboPi printed circuit boards?
A: I am afraid not. While RoboPi is an open platform in that it is fully documented, with source code available for its libraries and demo applications, RoboPi is a commercial product, and may not be copied.
Q: Can we use the less expensive MCP3008 10 bit analog to digical converter instead of the MCP3208?
A: Yes, you can – but the driver needs to be modified, and the RoboPi libraries and demonstration programs assume that an MCP3208 is used. We intend to offer a merged MCP3208/MCP3008 driver soon which will allow a common code base.
Q: Do you have any distributors in <name of country>?
A: We are working hard to set up our distribution network. Please email your favorite web stores and have them contact us if they are interested in RoboPi.
http://Mikronauts.com 19 2014-01-27
Loading...