Click here for the video!
Stuart and I wanted to design a project that would be a good introduction to upcycling electronics, robotics, arduino, art with maths/code. We came up with a drawing robot based on an old floppy drive.
- jam jar collective
- full circle arts
- Ashish Derhgawen for this article http://www.codeproject.com/KB/system/floppystepper.aspx
- More floppy drive info: http://www.interfacebus.com/PC_Floppy_Drive_PinOut.html
Step 1: Take Apart the Floppy
We need to get at the insides, so take off the lid and have a look inside. We need to remove the loading tray which can often be lifted out when it's in the eject position. Others have a latch or springs that need to be released. Have a look and work out what works for your drive!
Remove the top of the read/write head and put the screws back in so you don't lose them!
Also, now is a good time to make the drive think that a floppy is loaded (otherwise it won't spin up the platter). So use some bluetack or glue down one of the microswitches on the left hand side. You could also bypass one by removing one and soldering a wire between the contacts.
Keep hold of all the small screws and springs because they'll be useful in other projects!
Step 2: Wire Up the Floppy
Check the "floppy drive A pin out" table on this page . We're interested in:
- 10: 0=motor enable drive 0 (when at 0v the motor will be spinning)
- 14: 0=drive select 0 (so that step and direction commands go to drive0)
- 18: direction (which direction to move the stepper)
- 20: step (pulse this to make a step)
Note that all the odd pins are ground.
Wire up the floppy cable like this:
floppy pin 14 -> floppy pin 13 (this selects drive 0 as we tie it low by connecting to ground on pin 13)
floppy pin 1 -> arduino ground (we need to connect the ground of the arduino and the ground of the floppy)
floppy pin 10 -> arduino pin 4 (platter motor)
floppy pin 18 -> arduino pin 3 (direction)
floppy pin 20 -> arduino pin 6 (step)
We also need to power the drive. I measured current draw and it peaked at 300mA. I did some research and it seems safe to power this from the 5v pin of the Arduino. USB has a maximum rating of 500mA for current draw and we're safely within that limit.
If you have a floppy power cable then connect the Arduino ground to a black and Arduino 5v pin to the red cable. Otherwise you'll need to work out which is pin 1 (it might be marked on the drive) and then use the table floppy power connector to know which pins to connect where; pin1: 5v, pin2 or 3: ground.
Turn on the power and check you get a light coming on somewhere at the front of the drive.
Step 3: Load Up the Software
Load it into your arduino
Download the floppyDrawbot.pde and timer.pde files. Open floppyDrawbot.pde with the arduino editor and then add the timer.pde file like this:
- in the sketch menu, choose 'add file'
- choose the timer.pde file
Have a look at the code to see what's going on - it's pretty straight forward.
If it doesn't work
- Is the floppy powered up? They usually have an led that will be lit with power supplied.
- Is your wiring correct?
- If the platter isn't spinning, check the microswitches are properly pressed down.
Step 4: Enlarge the Platter
Now that we've got the floppy drive under Arduino control, it's time to add drawing functionality!
The platter is a bit too small and uneven to draw on, so we boosted its size with a DVD. You need to find something tubular, about 3cm diameter and 2cm high.
Put it in place and then check that the read/write arm can move fully in and out. If your tube is too big then you'll have to remove part of the lower read/write head. We did this with the dremel's grinding attachment.
You want everything as central and level as possible so it's better to hold stuff in place and then glue it after.
Step 5: Add the Drawing Arm and Pen Holder
The read/write head's travel is only about 1.5 cm long, so we added a lever to get greater pen movement.
Drawing arm and pen holder
We used the metal from the top of the floppy and a dremel with grinding attachment to cut out an arm. Look for a piece that has a hole for your pen to stick through. You might be able to avoid drilling a hole by being clever about your reuse!
Then we held it in place with a spindle and sprung loaded it with one of the floppy's old springs.
Extend the read/write head
To give us more movement, we can extend the read/write head out with another small piece of metal. This screws on to the read/write head and has a bolt at the other end that connects with the drawing arm. By playing with the length of the metal and the position of the bolt you can make a lever that magnifies the movement of the read/write head so that the pen can cover more of the DVD's surface.
Turn everything on and check that the pen can move a good distance over the radius of the DVD. You adjust things fairly easily just by bending the metal bits.
Step 6: Draw!
Cut some paper circles using another CD as a template. Then load up some paper (we used tiny scraps of masking tape to hold down the disks of paper), insert a pen into your pen holder and make it go!
Then start hacking the code and send us your best pictures!
Step 7: Adding Platter Speed Control
We wanted to be able to slow the platter down because it moves so fast compared to the pen that only tight spirals are possible. It would be cool to be able to do spirograph style patterns too.
We checked all the signals crossing from the small "main board" to the bigger motor board. One of the signals was around a 1Mhz signal (check the photo). We cut the path and then used a signal generator to inject our own signal and it worked! So some code was added to generate a slower signal. The slowest we got the platter moving was about 120rpm before it started juddering and losing torque.
After cutting the trace on the PCB (careful not to cut any others), solder a wire onto the spot nearby and then plug this into pin 5 of the arduino.
Step 8: Add Stepper Speed Control
Wire up a potentiometer with ground and +5 on each side. Then take the central signal to analog input 0 of the arduino.
Step 9: More Ideas to Explore
- Use a small solenoid to be able to lift the pen up,
- use a diode laser from a laser printer to burn patterns on the paper (perhaps using thermal paper?) We can operate a diode at very high speeds so we could potentially do rings of dots and dashes.
- make a pen holder that can hold more than one pen,
- make the code respond to something that happens in your environment so that it becomes a funky physical data logger!
- there is meant to be an index pulse from the platter motor that we could use to synchronise the platter and the stepper, but we weren't able to get a good enough signal from it to do this. Let us know if you manage it!