Despite being the oldest of the three Mindstorms programmable bricks, the RCX remains my favorite. I love its simplicity, small size, and its relative reliance on traditional LEGO® studs, rather than Technic beams. However, using an RCX is in some ways harder and more complicated than when it was first released in 1998. This article will attempt to summarize some of the equipment, software, and techniques necessary to use an RCX in 2017.
There are several reasons you might want to use an RCX instead of an NXT or EV3:
The RCX brick comes in 3 hardware revisions:
1.0 - The original. The only revision to include a power input jack, so that in addition to 6 AA batteries, it can also be powered by a 9-12V AC power supply. (Yes, you read that right: It's an AC input).
1.5 (also called 1.1) - Included with the Robotics Invention System (RIS) 1.5 set.
Identical to the 1.0 brick except that the power input jack has been removed. Officially,
the 1.5 brick is also called an 1.0 brick, but with a serial number
greater than approximately 300000.
2.0 - Identical to the 1.5 brick except that the IR interface operates at twice the frequency (76 kHz instead of 38 kHz). This has the effect of slightly reduced range, but enables the 2.0 brick to talk to Spybotics products.
Update 11 July 2020: The "serial number greater than 300000" thing seems to not be quite true - and in fact any reference to it seems to have been removed from the stackexchange thread linked above. Leonardo Verde has been doing some research on RCX serial numbers, and is collecting data about the type and serial number of many RCX bricks in this form. He's also shared the results with me; here's a snapshot at the time of writing:
Total Responses | 126 |
---|---|
Number of 1.0 bricks | 66 |
Highest 1.0 serial number | 990439 |
Lowest 1.0 serial number | 284 |
Number of 1.5 bricks | 21 |
Highest 1.5 serial number | 585813 |
Lowest 1.5 serial number | 356161 |
Number of 2.0 bricks | 39 |
Highest 2.0 serial number | 996764 |
Lowest 2.0 serial number | 514846 |
The infrared tower is used to send programs from a computer to the RCX, and data from the RCX back to
the computer for logging. There are two models of infrared tower. One connects via a
DE-9 serial port and requires a 9-volt battery, while the
other connects over USB, and can get enough power from that so as to not require a battery. The USB model
is more convenient to use (due to the lack of additional battery), and seems to be more readily available
online.
📷: Brickipedia
(USB/Serial)
A general-puspose Windows driver for the USB tower is only available for 32-bit Windows. For 64-bit Windows, there is this driver available, but it's only compatible with "ROBOLAB for LabView". Note that "ROBOLAB for LabView" requires an existing installation of LabView, and is not the same thing as "ROBOLAB".
If you want to program an RCX brick from 64-bit Windows using any other software (ROBOLAB, ROBOTC, NQC, etc.), you can do so with a serial IR tower (and a USB-to-DB-9 adapter cable, if needed).
RCX-compatible motors come in 2 shapes, which I'll call "rectangular" and "cubic".
The cubic motors appear in more sets, and are in my opinion easier to work with.
Lots more technical info about RCX motors (and other LEGO motors) can be found here.
The first-party sensors available for the RCX are Light, Rotation, Touch, and Temperature. In addition, a number
of third-party sensors are available, and LEGO® also produced a "DCP Sensor Adapter" which converted the
RCX connector to a 7-Pin DIN socket compatible with LogIT Microsense scientific sensors made by
DCP Microdevelopments.
The wires used for connecting motors and sensors to the RCX brick are terminated at either end with a 2x2x2/3
brick with electrical contacts on the top and bottom. Wires are available in lengths of 15, 17, 20, 21, 26, 36,
46, 69, 162, and 378 studs (1 stud = 8 mm = 0.315 in). Every first-party
sensor except for the touch sensor comes with a short wire permenantly affixed to the sensor.
There also exists an infrared remote
control, which can control the motor outputs of the RCX brick in real
time without the need for programming.
📷: Brickipedia
(link)
If you don't already have an RCX, you'll need to buy a brick and an infrared tower. You'll probably also want to buy some combination of motors and sensors, depending on your application.
If you're new to Mindstorms, you'll probably want to buy a set containing a bunch of parts. eBay and Bricklink are both good places to buy RCX sets online.
The following sets contain RCX bricks:
Set
Set Name
RCX Brick Version
Motors Included
Sensors Included
IR Tower Included
9790
ROBOLAB Team Challenge
Set
1.0
2 old cubic†
2 touch, 1 light
Serial
9719
Robotics Invention
System 1.0
1.0
2 old cubic†
2 touch, 1 light
Serial
9785
ROBO Technology Set
(Serial)*
2.0
2 old cubic†
2 touch, 1 light
Serial
9786
ROBO Technology Set
(USB)*
2.0
2 old cubic†
2 touch, 1 light
USB
9793
ROBOLAB Team Challenge
Set (Serial)*
2.0
2 rectangular
2 touch, 1 light
Serial
9794
ROBOLAB Team Challenge
Set (USB)*
2.0
2 rectangular
2 touch, 1 light
USB
3804
Robotics Invention System
2.0
2.0
2 old cubic†
2 touch, 1 light
USB
†LEGO changed the production method of the cubic motors with little fanfare, and in the middle
of production of various sets. Thus, it's hard to tell whether a set you buy will contain the older or
newer cubic motors, especially when purchasing a newer set (lookin' at you, 3804).
If you already have a bunch of LEGO® elements, you can save some money by buying only the electronic components you want. In my experience, Bricklink is the best place to buy individual Mindstorms components (or individual LEGO® components of any kind). Here are links to all the parts I've mentioned:
Name | Part number | Link |
---|---|---|
RCX 1.0 brick | 884a | Link |
RCX 1.5 brick | 884b | Link |
RCX 2.0 brick | 884c | Link |
IR Tower (USB) | x431c01 | Link |
IR Tower (Serial) | 9713 | Link |
Rectangular motor | 2838c01 | Link |
Cubic motor, old | 71427c01 | Link |
Cubic motor, new | 43362c01 | Link |
Light sensor | 9758 | Link |
Rotation sensor | 9756 | Link |
Temperature sensor | 9755 | Link |
Touch sensor | 9757 | Link |
DCP Sensor Adapter | 9917 | Link |
Wire (general search) | Various (most starting with 5306bc or 5306ac) | Link |
Remote control | 9738 | Link |
In my experience, programming an RCX brick is most easily done from a computer running Windows. Several languages are available. On 64-bit versions of Windows, the USB IR tower can only be used by "ROBOLAB for LabView"; see above for more info.
ROBOLAB is the best of a couple of pieces of software officially distributed by LEGO for programming RCX bricks. It's based on National Instruments LabView, and unlike later LabView-based Mindstorms software (NXT-G and EV3-G), the visual resemblence is striking. The latest version of ROBOLAB is 2.9.4c, though version 2.5.4 is similar; the primary difference is that 2.9.4c can also program NXT bricks. Unfortunately, it can be pretty difficult to get ahold of a copy of ROBOLAB these days if you don't already have one; relatively few copies are available on Bricklink, and can go for upwards of $50. Note that after installing v2.9.4 from a CD, you'll want to also install the 2.9.4c patch, which can be found here.
These days, I do most of my RCX programming in ROBOTC. As the name implies, ROBOTC is a C-based language designed for robotics; versions of ROBOTC are also available for NXT/EV3 programmable bricks, VEX IQ "robot brain", VEX Cortex/Pic microcontrollers, and Arduino. Support for the RCX is not included with current versions of ROBOTC; however, a legacy RCX version is available, and this has the added advantage of being free, whereas other versions of ROBOTC are not. ROBOTC also comes packaged with a pretty good Integrated Development Environment, and lots of help and resources are available to learn how to use it, because of the support for many popular educational robotics platforms.
Another C-based language for the RCX is NQC ("Not Quite C"). One of the oldest third-party languages for the RCX, NQC has the advantage of working on all three popular desktop operating systems, and developer Dave Baum has written several books about the RCX system, which include information about NQC and its use. Another advantage of NQC is that it uses the stock firmware on the RCX (i.e., the same as used by ROBOLAB), unlike ROBOTC or LeJOS.
For people who prefer programming in Java, there's LeJOS. Short for "LEGO Java Operating System", versions of LeJOS are also available for the newer NXT and EV3 bricks, and LeJOS has proven to be one of the most popualr languages for third-party RCX programming.
Several other languages exist for the RCX, with which I am less familiar or which are hard to find nowadays. These include:
Bricxcc is a popular Mindstorms IDE for Windows which supports programming the RCX using NQC, LeJOS, brickOS, and other languages.
As far as I'm aware, there are no GUI Linux applications for controlling the RCX. However, if you're comfortable with the command line (and if you're a linux user, you probably are), there are several choices. These include:
It's worth noting that drivers for the USB IR tower are included with essentially all versions of the Linux kernel released in the last 10 years or so.
If you have a modern Mac, the easiest thing to do is to program your RCX in a Windows virtual machine (using a piece of software like VirtualBox, VMWare Fusion, or Parallels). I've run various versions of ROBOLAB and ROBOTC in a virtual machine on various Macs, with no apparent loss of functionality.
Mac software for programming RCX bricks does exist, but is generally either classic Mac OS software or OS X software compiled for PowerPC, meaning that it won't run on modern Macs. However, if you have an older Mac running Mac OS 9 or an older version of OS X (10.5 or older for running PowerPC software, 10.4 or older for running classic Mac OS software), it is often still possible to program an RCX natively on a Mac.
LEGO released versions of ROBOLAB for the Mac, and versions 2.5.4 and 2.9.4 are available as native OS X software compiled for PowerPC. As far as I'm aware, the functionality of Mac versions of ROBOLAB is identical to the corresponding version on Windows, though I've never used v2.9.4 for mac. ROBOLAB for Mac is even harder to find online than ROBOLAB for Windows, although it appears that later versions of the software were distributed on a single disc containing both Windows and Mac versions of the software.
NQC, LeJOS, and brickOS all have varying degrees of compatibility with OS X. Sometimes, compiled versions of the software are available for the Mac; other times, it's necessary to compile the software yourself. I'm not aware of any Mac IDEs for any of those languages; the NQC website links to a Mac NQC IDE called MacNQC but the link is dead at the time of writing.
Since pbForth compiles and runs code on the RCX itself, all that's necessary to use it on a mac is the ability to send plaintext files from the mac to the RCX, which can be accomplished with NQC.
If you know of any other resources that should be added to this list, feel free to let me know by dropping me an email.
I haven't read these books, and they were published near the time of release of the RCX, so some of the information may now be obsolete or irrelevant.
The RCX's programs and firmware are stored in RAM. This made the brick cheaper to manufacture, because RAM was much cheaper than flash storage in the 1990s. However, a downside of RAM is that it needs to be continuously powered to retain the data it's storing. Thus, when power is cut to the RCX, such as when batteries are removed, its memory is erased, and it reverts to the default firmware and programs.
Happily, inside the RCX there is a small capacitor, which maintains power to the RAM for approximately 20 seconds after the batteries are removed. Thus, if you change the batteries within that time, the brick's memory will be preserved. Changing the RCX's batteries within 20 seconds sounds difficult, but is actually not too hard with some practice.
For most applications, yes. See above for more information.
From a TV remote, probably not, since the RCX doesn't understand data TV remote-control protocols (but you may be interested in the first-party remote control, which provides similar functionality).
But if you have direct control over what the IR LED does, yes! James Hagerman reports replicating the functionality of the LEGO IR tower with an Arduino and an IR LED and reciever, and posted a writeup about that here.
Probably the best thing to do is to sell them on eBay or Bricklink. If for some reason you don't want to do that, send me an email -- maybe I'll take it off your hands.
This is a surprisingly common thing to want to do. The easiest way I know of is to find or compose a piece of music in the Ring Tone Text Transfer Language, and then use ROBOTC for RCX, which includes a tool (only visible if using menu-level "superuser") for transferring RTTTL tunes to ROBOTC commands which cause the RCX to play the described tune.
A converter cable is available which converts the connector used by RCX motors and sensors to the RJ12 connector used by the NXT and EV3. The NXT was designed to be backwards-compatible with RCX motors and sensors, and it's easy to do this in ROBOLAB 2.9 or NXT-G (with the download of some additional sensor blocks for NXT-G).
Unfortunately, due to the EV3 using a slightly different pinout for the sensor ports, the LEGO converter cable will not connect RCX sensors to the EV3 (more info in this stackexchange thread). Others have produced homemade converter cables which connect the sensors to the correct pins on the EV3, but in any case RCX sensors are unsupported in the official EV3 software, so use of such converters would have to be in conjunction with a third-party firmware such as LeJOS or ev3dev.
To drive RCX motors & sensors from an Arduino or RPi, there are a couple of options. First, you could use a Dexter Industries BrickPi, which adds some NXT/EV3 ports to a Raspberry Pi, and use the appropriate converter cables to connect the RCX-era devices. Alternately, the RCX motors and sensors are simple enough that it would probably be pretty easy to drive them directly. The motors expect 0-9V, and the sensors should return an analog voltage from 0-5V.
In my experience, the most common cause of communications failures is interference from bright room or outside light. When downloading firmware or large files to the RCX, I find it helpful to place a box or other opaque structure over the RCX and IR tower in order to prevent visible light interference.
Further discussion of other causes of communications failure can be found in this stackexchange thread.
From time to time, I update this page to correct errors or add new information: