Getting Started with the BrickPi
This Tutorial is Retired!
This tutorial covers concepts or technologies that are no longer current. It's still here for you to read and enjoy, but may not be as useful as our newest tutorials.
Introduction
If you're familiar with Mindstorms ®, then you are probably aware of all the cool projects that you can make and the educational value of such an easy-to-use robotics platform. Enter the BrickPi.
The BrickPi is a RasbperryPi add-on that lets you control Mindstorm parts. The BrickPi stacks on top of the Raspberry Pi and accepts Mindstorms motors and sensors.
The BrickPi allows you to control Mindstorms parts using any number of languages including C, Python, and Scratch.
Covered in This Tutorial
In this tutorial, we will cover how to get started with the BrickPi. We will show you how to connect the BrickPi to a Raspberry Pi, attach building blocks, connect motors/sensors, and write a simple Python script to control the motors/sensors.
Required Materials
- BrickPi
- Raspberry Pi
- SD Card
- Monitor of some sort
- HDMI Cable or Composite cable
- Wall Adapter Power Supply - 9VDC
- DC Barrel Jack Adapter - Female
- 9V Snap Connector
- Keyboard and mouse
- Mindstorms Servo Motor
- Mindstroms Touch Sensor
NOTE: The servo motor and touch sensor can also be found within the Mindstorms NXT set.
Suggested Reading
Configure SD Card
IMPORTANT: You need to use Dexter Industries' custom Raspbian build to get the BrickPi to work.
Required Downloads
- Download Dexter Industries' Raspbian build
- Download Win32DiskImager
- 7-Zip to unzip the .rar Raspbian image
Flash the SD Card
- Insert the SD Card into your computer
- Install Win32DiskImager
- Unzip Dexter Industries' Raspbian build (use 7-Zip if the image is in .rar form)
- Run Win32DiskImager with administrative privileges
- Select the unzipped Dexter Industries' Raspbian build as the Image File
- Select the location of the SD Card
- Click "Write"
BrickPi Assembly
You will need to build the hardware around the BrickPi in order to connect it to the Raspberry Pi and your building blocks.
Build the Case
1) Unpack the BrickPi hardware and remove the protective paper from the case.
2) Screw the two small standoffs into the holes in the bottom piece of acrylic.
3) Screw a Raspberry Pi onto the two bottom standoffs.
4) Screw the four long standoffs into corner slots of the bottom piece of acrylic.
5) Attach the BrickPi to the Raspberry Pi by mating the BrickPi's header to the Raspberry Pi's GPIO header.
6) (Optional) Now is a good time to label the motor and sensor ports on the BrickPi. I recommend S1, S2, and so on for the sensor ports and MA, MB, and so on for the motor ports.
7) Attach the top piece of acrylic to the four posts using the remaining screws.
8) Insert the SD card.
Attaching the Building Blocks
Beams can be attached to the top and bottom pieces of acrylic in order to secure the BrickPi and Raspberry Pi to your building block creation.
Any of the Mindstorms sensors can be attached to the ports labeled with an "S" followed by a number. You will need to remember the port number that you plugged your sensor into.
Motors can be attached to the ports labeled with an "M" followed by a letter.
For this example, connect a single touch sensor to S1 and a single servo motor to MA.
Connect Peripherals
Similar to the setting up the Raspberry Pi tutorial, we need to connect a keyboard, mouse, and monitor. Plug a keyboard and mouse into the USB ports, and connect a monitor using an HDMI cable.
Powering the BrickPi
Dexter Industries recommends a few different ways to provide power to your robot.
However, we will do things differently. In order to get unlimited run time and the ability to power a couple of motors, we will hack a wall power supply to attach to the BrickPi.
1) Cut the 9V battery connector off of the 9V Snap Connector and strip the ends.
2) Attach the red wire to the positive (+) and the black wire to the negative (-) screw terminals of the DC Barrel Jack Adapter.
3) Plug the connector into the BrickPi.
4) Plug the 9V wall adapter into the other end of the DC Barrel Jack Adapter.
5) IMPORTANT: Make sure your monitor is connected to the Raspberry Pi and turned on!
6) Plug the wall adapter power supply into a wall outlet.
WARNING: The large power regulator (TO-220 Package) gets hot! Be careful when plugging or unplugging the power adapter.
7) Your Raspberry Pi should come to life!
Configure the Raspberry Pi
Once the Raspberry Pi has booted, you should be presented with the Dexter Industries desktop. If you are ever asked for a username or password, the defaults are:
Username: pi
Password: raspberry
If you would like to configure the Raspberry Pi, open up a terminal:
and enter the following command:
sudo raspi-config
You will be presented with the Raspberry Pi configuration screen. It is recommended that you expand the filesystem. Have a look at the other options (descriptions for the various options can be found here).
Programming
Open a terminal (if you do not already have one open) and create a new file for our motor and sensor test. Open that file with Leadpad (Raspbian's default text editor).
leafpad motor_sensor.py
Enter the following code into the text editor:
language:python
from BrickPi import *
BrickPiSetup()
BrickPi.SensorType[PORT_1] = TYPE_SENSOR_TOUCH
BrickPi.MotorEnable[PORT_A] = 1
BrickPiSetupSensors()
while True:
result = BrickPiUpdateValues()
if not result:
if BrickPi.Sensor[PORT_1]:
BrickPi.MotorSpeed[PORT_A] = 200
else:
BrickPi.MotorSpeed[PORT_A] = 0
time.sleep(0.01)
Save and exit out of Leafpad. In the console, enter the following:
python motor_sensor.py
Now, whenever you press the Touch Sensor, the Servo Motor should move!
Press ctrl+c to end the program.
Resources and Going Further
The BrickPi opens up many opportunities to expand on the Mindstorms kits. To learn more about Dexter Industries and the BrickPi, check out their website: http://www.dexterindustries.com/BrickPi/.
If you are looking for some ideas, Dexter Industries updates their BrickPi site with interesting projects: http://www.dexterindustries.com/BrickPi/projects/
Resources
- BrickPi hardware GitHub repository: https://github.com/DexterInd/BrickPi
- BrickPi Python GitHub repository: https://github.com/DexterInd/BrickPi_Python
- BrickPi C GitHub repository: https://github.com/DexterInd/BrickPi_C
- BrickPi Scratch repository: https://github.com/DexterInd/BrickPi_Scratch