Getting Started with the BrickPi
The BrickPi is a RasbperryPi add-on that lets you control Lego Mindstorm parts. The BrickPi stacks on top of the Raspberry Pi and accepts Lego Mindstorms motors and sensors.
BrickPi on top of a Raspberry Pi
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 Legos, connect motors/sensors, and write a simple Python script to control the motors/sensors.
- 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
- Lego Mindstorms Servo Motor
- Lego Mindstroms Touch Sensor
NOTE: The servo motor and touch sensor can also be found within the Lego Mindstorms NXT set.
Configure SD Card
IMPORTANT: You need to use Dexter Industries' custom Raspbian build to get the BrickPi to work.
- 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”
Don’t forget to Run as Administrator!
You will need to build the hardware around the BrickPi in order to connect it to the Raspberry Pi and Legos.
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.
Lego beams can be attached to the top and bottom pieces of acrylic in order to secure the BrickPi and Raspberry Pi to your Lego creation.
Attach Lego pegs to the holes in the acrylic
Attach Lego beams to the pegs
Any of the Lego 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.
Sensor port locations (Image courtesy of dexterindustries.com)
Motors can be attached to the ports labeled with an “M” followed by a letter.
Motor port locations (Image courtesy of dexterindustries.com)
For this example, connect a single touch sensor to S1 and a single servo motor to MA.
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 Lego robot.
Dexter Industries' guide to powering the BrickPi (Image courtesy of dexterindustries.com)
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:
If you would like to configure the Raspberry Pi, open up a terminal:
and enter the following command:
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).
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).
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:
Now, whenever you press the Lego 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 Lego Mindstorms kit. 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/