One-night No Budget CNC Machine

The Hackerspace Kraków in Poland hosts a weekly event on Fridays called NightHack. The idea is simple. It’s late Friday night, all the stores are closed — something needs to be hacked.

Just this past Friday night, they decided to try making a CNC machine using only what they had in the space. And gosh darn it, did they ever succeed! The build makes use of an Arduino Mega, broken Playstation 3 drives, a few spare L293D ICs, some hot glue, and wood. The resulting CNC machine is an awesome example of what can be done in a night with the right group of people working together.

It might not be powerful enough to do milling, but works quite well as a small CNC drawing plotter with its massive 5x5cm work area, with a resolution of 0.16mm. Next week they hope to modify it to allow for PCB drilling, which at the right feed rates, might just be possible!

We think the concept of this meetup is awesome — every hackerspace has oodles of old junk piled up, perhaps never to be used. This is a great way to force projects to be completed and old components to be used up. Let us know in the comments if you plan to start scheduling a similar meetup — we love to share these kinds of projects! 

[Thanks Jakub!]

44 thoughts on “One-night No Budget CNC Machine

  1. An interesting exercise, however some amateur radio groups have been doing something similar for years. The easy one one is to build functional antennas with materials that can be expected to be laying around in the aftermath of a disaster. The more advanced exercise is to build radio transmitters and receivers. Modern consumer electronics is making using them to make receivers and transmitters more difficult. Yea it gives us devices to make experimenting with Software Define Radio easier, but such SDR would be impractical to dig out of the debris.

  2. yeah, a plotter is just a 2-axis CNC machine with a pen on the carriage. Replace the pen with a Dremel and you have a CNC router. Add a third axis and you have a 3-axis CNC mill. Replace the Dremel with an extruder and you have a 3D printer. It’s all the same family….

  3. @Yarr – aren’t you late for your YesMan Club? They’re called OPINIONS and at least Fartface can make his without making it personal and calling people names – you on the other hand do nothing but make personal attacks – if anyone needs banned, it’s you.

    1. Sorry wrong again. CNC means what CNC means regardles. If i said green was black in my opinion would i be correct? Doubt it.

      I realise your just some spoiled 12yo without a clue in the world but please troll eslewhere, unlike youself some people would like to learn and improve themselves without your negative and pointless drivel.

    1. – Get some stuff with linear motion elements
      – Strip it down to just the moving parts (or leave frame if you don’t want to make one yourself)
      – Extend motor cables, connect to Arduino
      – Bolt it together in whatever way you want it to move (looks like they used intermediate plates, you can use whatever you like)
      – Tweak the Arduino sketch you wish to use so it works with the motors
      – Use whatever software is compatible with your sketch
      – Enjoy!

      1. What do you use to send the gcode to the arduino. I’ve put the software on the arduino and run some basic commands from the serial monitor, but is there any program that will automatically send multiple lines of gcode, as requested by the arduino?
        I’ve tried writing a processing sketch, but it’s got some problems and required altering the arduino program.
        Is there a simpler alternative?

        1. Take a look at Grubl or Some of the smaller firmwares like Teacup will work on Uno or other Atmega328 ‘inos. I ran it on Nano just fine. There’s a bit of an issue with Teacup (the version I had played with a year ago anyway) – G-code arcs (G02, G03) were not supported, so you’ll have to interpolate them with small linear moves (G01). Could be an issue if you’re using an existing Gcode, I could not run some of my own models from (and was too lazy to go back to SVG and export again without arcs :) ) I kind of wander if there’s already a firmware that does support arcs and works on smaller ‘inos since I last looked at it.

          1. Actually, I’ve tried using all of those, but all have one common feature: step-dir control, not phase drive, as this code does. I prefer phase because I don’t feel like buying ~$40 worth of stepper drivers when I’ve got a half a dozen l293s sitting around.
            I initially tried using the software I used for grbl, but that didn’t work.
            I haven’t tried any other gcode uploaders (which is what I’m looking for, not another step-dir gcode interpreter), so I’ll see if any use this syntax.

            If not, I’ve got at least a few more hours to go with a stepper and processing (it does kind of work…)

          2. Actually, I believe there’s still enough space in Atmega’s flash left after Teacup to implement phase control. It does not take a whole lot of programming space. You are basically just flipping through a 4 or 8-elements array with I/O bits in one direction or another. Obviously, have to ditch microsteps but they don’t work on these little motors anyhow.

            Also, an even better way would be to simply relieve the ‘ino of G-code processing and do only phase control on it while feeding the actual step/direction commands from a PC running Linux CNC. I eventually settled on that approach – lets me use all the might of LinuxCNC for G-code processing and simplifies the hardware part. You obviously need a PC with a parallel port, so that’s a downside. If you want to go that route, there’s a schematic and an Arduino sketch here: (a post towards the bottom of the page) – it runs on a bare Atmega328P, no Arduino board is needed.

  4. This is why I hoard “broken” electronics :-)

    Also you can recycle broken drive controllers, I’ve done this too.
    Older CD writers are best as they all use the same chip and have breakout pads so a bit of Dremelling and you have a ready made “controller”.

  5. Inspirational (well, just a little). I’ve been hoarding steppers and precision ground shafts from laser printers for ages and a couple of weeks ago I finally sucumbed to the siren call to build a CNC router after seeing SO many hacks that begin “I started by laser cutting these parts…”. I doubt I’ll post my build log on here as perhaps one more CNC device build will crash the site. Saw some nice cheap linear bearings from China that I think I’ll use – they might be a little crap but gotta be better than making my own. This will sit very nicely next to my mini-lathe :)

  6. The workarea of a CD/DVD based CNC machine is 38mmx38mm (1.5″x1.5″) not 5cm x 5cm Does not sound like a lot different until you realize what little space you have to deal with and extra 12mm would be absolutely marvelous! Also, the (theoretical) resolution is 0.15mm – a 20SPR stepper on a 3mm pitch lead screw (almost all CD/DVD drives are the same these days except for Apple’s, so this is almost a guarantee) – that works out to 0.15mm per step.

    1. Man, You absolutely right! CD/DVD rom SLED travel distance is max 38 mm. Just finished something similar – a pseudo CNC mini table from CD/DVD roms sleds. Inspired by this and others topics about mini pocket laser engraver. I plan use it for micro 3D liquid printing.

      I’m wondering, how did you know the lead screw pitch? As far I saw so called “coarse lead screws”. But one SLED lead screw was more fine than coarse – the pitch is definitely smaller.

      Second question: if thereotical resolution is 0.15 mm, how stepper is controlled by MCU when is needed go from one to another CD track i.e. exactly for CD pitch 1.6 µm, and DVD 0.74 µm. I know, that MCU uses an PID algorithm and focusing VCM and lens, then reflected laser beam from pit is projected by optical pickup on to PDIC. By laser beam form is derived so called S curve. But how stepper is controlled? Possibly by microstepping regime? Actualy I tried study CD rom’s motor driver(e. g. M56784FP, BD7902CFS) for sled, tray etc. So far I’ve not tumbled this question. Maybe any thoughts? Thanks!

      1. I simply measured the pitch. I also built a tiny machine similar to this so I had a chance to measure the actual travel, so it’s definitely 3mm for desktop drives and 2mm for laptop (again, Apple drives are different) .

        As far as positioning accuracy of the actual CD/DVD/Bluray – the stepper only gets to the vicinity of the actual piece of record, the fine positioning is done by moving a tiny plastic focusing lens left-right and up-down using two voice coils in the sled. That’s why the stepper screw pitch is so large – it helps to move the sled very fast when needed to increase search speed, accuracy is not what they are going for here, that’s why it’s so terrible (for such a small mechanism).

        Microstepping does not improve accuracy, sadly. It only adds uncertainty because some of the microsteps result in an actual movement and some don’t.

        I wrote some more about accuracies of such machines here: (which is one of the recent Fails of the Week, LOL)


  7. Does anyone know what they used to send the gcode? I’ve got the arduino code, but can’t find anything stating the computer-side of it, unless it’s foobar or GcodeCNCDemo.
    Is it either of those?

    1. software can send code, I did it in a similar project. You would also need their firmware on the Arduino used as a controller, I imagine, because it’s listening for a control character back when a previous command is completed before sending the next. Actually, I think Grubl works on the same principal, I just never got to play with Grubl. It might actually be possible to send from on the PC to Grubl on the Arduino for as long as they agree on the control character(s).

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.