ULF, the Amazing LEGO Autoloader
Allow me to introduce ULF. ULF changes CDs. That's what he does. He sits in front of CD drives and waits for the tray to protrude. Then, ULF uses his evil red eye to look at the tray from beneath. If he senses a CD, he will eject it with his spiny long finger. Then he'll open his broad mouth and spit out a new one from between his narrow, bloodless lips. And lurk for the next CD, until he runs out of batteries...
Ok, enough of that :) ULF is actually a CD autolader for batch burn processes. Programs such as Astarte Toast or Jam can burn a batch of CDs from the same source without intervention of the user. Usually, Toast/Jam talks directly to a so-called autoloader: "Hey, pass me the next CD", "CD ready, eject it!" "Oops, ruined that one. To the dump with it!". But Toast/Jam also offers a "Generic" mode. In this mode, T/J just burns one CD, extends the tray and waits for someone to exchange it for an empty CD. So instead of sitting next to my burner and changing CDs for hours on end, I built ULF to do that for me (you know, kind of like VCRs that watch those boring TV shows for you).
ULF is built from LEGO. To be exact, it's built exclusively from parts that come with Mindstorms 1.5 set (aka RIS - Robotics Invention System). No additional bits and pieces (and no modifications to the CD burner or LEGO stuff - no cuts, no soldering). Ok, you'll actually need a CD burner :) And I had to use empty CD Trays and some books to get everything to the correct height.
The tricky thing was to get everything done with just the two motors that come with the set. A sophisticated arm that moves the CDs around gently was impossible. So the ride gets a bit rough, but as every CD only moves through the process once, all the discs should come out fine, without scratches.
One cycle goes like this:
The ejecting tray (with a CD) triggers the light sensor, which catches the strong reflection from the 'data' side of the disc. CD-Recordables don't reflect light as good as pressed CDs, but the contrast between ambient light and the reflection from the disc is strong enough even in bright surroundings (as long as the sensor doesn't look straight into a lamp). Black CD-Rs (PlayStation-style) may not work, though.
When the machine detects a CD, it raises an arm that's tipped with a crude ramp. The arm raises the disc until it's clear from the tray, so the CD can slide down that ramp and slide down a longer ramp to the floor (at the moment, it just drops into a box).
The stack of empty CDs sits on a conveyor belt - the whole stack, right off a spindle. To insert a CD, the conveyor belt moves forward, pushing the whole stack against a wall. The wall has a narrow slit at the bottom that's just wide enough for one CD, so only one CD slides through and lands on the tray, triggering the light sensor.
The robot stops the conveyor belt and closes the tray. I would have loved to have the computer close the tray, but for that, the robot has to tell it when it's time to do so. But the RCX can only talk via IR commands. As LEGO uses its own IR protocol, you won't get anywhere without the LEGO IR tower, you would need a driver for that, it all gets pretty complicated. So I gave up for now: ULF just presses the eject button. (I could have soldered a relais over the pins of the eject button to trigger it with a motor output on the RCX. But, as I said before: No tampering with the CD burner.)
As you may have noticed, I have run out of motors. One moves the finger that raises the CD, one gets the conveyor belt rolling. Fortunately, somebody else tought about this problem before - and invented directional transmission. This amazing mechanical trick moves one of two output shafts depending on which direction the input shaft is turning. For a detailed description with nice illustrations, see David Baum's site. In my case, one direction moves the stub that presses the eject button, the other one raises the CD.
Old CD ejected, new CD in the drive, end of cycle.
The program for the thing is extremely simple. It justs waits for the right things to happen und starts the motors accordingly. I wrote the program in NQC.
If you have any comments or suggestions, just mail them to me.
(Oh, and in case you were wondering: ULF is short for Unloading/Loading Facility ;)
||The whole setup from above. To the left is the stack with the empty CDs, sitting on the conveyor belt. To the right is the CD burner, at the bottom the box for the completed CDs. The wretched heap in the middle is the Eject/PushButton-thingy. The small blue box just below the RCX is the light sensor.
||The part with the conveyor belt. The motor is on the right, driving the belt with a minimum of gears.
||A closeup of a CD sliding out from beneath the CD stack.
||The Eject/PushButton-combination fixed to my CD burner. The yellow loops are the plastic tubes from the RIS, the only part from that box fits through the holes on that SCSI case. Usually, the front bezel snaps into those holes. The front bezel was ugly anyway - one of these disgusting taiwan "designs" with a lot of useless curves.
||The tubes are fixed inside the case, I opened it for this shot. I had tried rubber bands before, but after I cut two of them on the sharp edges inside the case, I switched to the yellow tubes.
||A plain vanilla eccentric, converting the circular motion of the motor into in linear motion.
||Another eccentric, only that it moves to the side. The stub that pushes the button (connected to the blue arm at the top) only has to move a few millimeters.
||The stub in closeup.
Watch the video: ULF removes a CD and inserts a new one. 3 different views. DivX format, 320*240 pixels, 25 fps, 30 seconds, 1 MB. No sound.
- Positioning the conveyor belt is a bit tricky. Because the CD drops a few centimeters, it's always possible that it misses the exact center of the tray and gets stuck on the way in. But with careful positioning, I managed to get it right each time. Advancing the conveyor belt in small steps also helps.
- No quality control. At the moment, good and bad, incomplete (or empty) discs are dumped to the same pile.
- The last disc in the stack usually doesn't get through the slit. As the light sensor isn't triggered, the motor runs till the batteries run out. Slightly tilting the whole stack towards the slit helps, but causes other problems (occasionally, two CDs get through). Workaround: Put a dummy CD on top of the stack and stop the motor when the sensor is not triggered after a few seconds.
- Make the 'bot talk to the computer. This eliminates the need for pressing the button. The computer could also say useful things like "Hey, the CD is not inserted correctly. Try again." or "Blew this one. Trash." which could be used for quality control.
- Stick cloth to all surfaces the CDs slide over.
- Add an AC input to the RCX so the machine never runs out of batteries. The batteries should last for several hundred cycles, though. So this isn't really a problem.
- Add a ramp so the finished CDs don't drop that far.
- Add a proper CD basket for the empty CDs.