Welcome to zapmaker.org. Learn about tools and techniques to create electronic hardware, software, and small things mechanical.

I’m Zapmaker – my day job is writing code in Java and C++, but my education is in electrical engineering and I’m a closet mechanical engineer. Put all this together and you may get some cool results. Hopefully you’ll find these pages interesting, inspiring and educational.

Trains! Check out my latest work on automating a Lionel train engine using an Arduino.

From Seattle Maker Faire, March 23rd, 2014:

Some still photos from the Maker Faire on this site credit Espressobuzz

30 thoughts on “Welcome

  1. Hello

    I downloaded your latest grbl 3.3.4 and tried to open com port 18

    I keep getting a “wait for ok failed” message

    what port settings should I use to run your controller

    Thanks in advance for any help

    Sincerly Steven G

    • Hi Steven-

      Presuming you have Grbl plugged in and are running Windows, you should see one or two COM ports in the dropdown. Assuming you have tried all your COM ports and nothing happens, you may not have Grbl properly installed on your Arduino or your Grbl is running in an incompatible baud rate (unusual).

      Plug in the arduino while watching the yellow RX/TX LEDs on the board. They should blink really fast for less than a second after plugging in and go dark. If that doesn’t happen, then you don’t have the right FTDI drivers installed. The arduino web site explains how to install them.

      If that seems ok, figure out if the arduino is reporting a COM port. First, disconnect the arduino and fire up Grbl Controller and make note of all the COM ports that appear. Close Grbl Controller and connect the arduino. Now restart Grbl Controller and look at your COM ports. The new one that appeared is the one you want. If no new port appeared, then you have a driver problem (noted above).

      If connecting to the new port is failing, did you successfully reflash the arduino using the flashing tools and flash the Grbl 0.8c hex file? I use ArduinoUploader.exe. Remember, if you are flashing the Uno, you need to change the baud rate to 115200.

      If that is good, then stop Grbl Controller and open a program like TeraTerm to the COM port in question. Set the baud rate to 9600 and open the session. Grbl should respond with a version. If you see garbled characters, try other baud rates (usually greater than 9600), hit the reset button on the arduino until you see valid output. Grbl Controller currently only supports one baud rate. If you need another baud rate let me know.

      Hope this helps,


      • Hello

        Thanks for the very informative response…:)

        I am acutally not using a aurdino board but another board with grbl installed on it

        I am assuming that your control sofware is only used with aurdino boards.

        If this is the case maybe I will use the aurdino board to run your software

        Thank for all the help as i really like your controller GUI


        Steven G

        • Yes, the software only works with the arduino, although I’ll add that to my todo list to fix. The reason is that it does some checking for a particular signature and if it doesn’t find it, you get that error.

          Thanks for the suggestion, I think it would be good to make it generic.

          • Hello

            Yes is would be great to make a generic GUI for GRBL.

            You may even want to sell it as I think there is a real need to have a GUI that reads GRBL

            Thanks again

            Steven G

      • I would really like to be able to change the baudrate, i’ve done some testning today and its working nicely, but there’s a pause between every move when streaming gcode. I also belive the three second wait while opening/closing grbl settings to be because of the low baud, and changing baud in firmware seems very straightforward, so all thats left is to also get grbl controller up to speed.

        • If you go to Tools > Options and check “Use aggressive preload…” and it will not pause. I will be changing the default setting in 3.4 to use aggressive preload as the default is off (the original version of Grbl Controller did not queue the commands, and so the old behavior persists).

          I have the baud rate change feature slated for a future release. Not sure when yet.

          • Yep, checked it and its super smooth now. I also looked through the code and changed the baudrate to 115200, but as you say the preload might have been enough for me, but im quite pleased that it runs well on a higher baud. however the delay when opening/closing settings is still there, did you code it that way or might it be due to reading the eeprom/328 being slow?

          • Glad that worked for you. I am not sure about the slowness. I measured 1.8 seconds from the time you click Open to the first response from Grbl (the version string), followed by an additional 4 seconds until all the info it requests is returned. This is at 9600 baud. I tried it with Tera Term and it takes about the same amount of time.

            I could offer an option to autoconnect to the last good port upon startup of Grbl Controller – if you think that is a good idea, let me know.

            On some platforms, like Windows, I have successfully been able to open the file dialog and pick a file while the port is opening, this is by design. Unfortunately on some Linux version when I do that it crashes the program, not sure yet why.

            I can usually finish picking a file before it is done opening, so that is one possible way to speed up your workflow.

  2. Actually I don’t mind the delay, just wondering why it was there. I’m very happy with the software as is and the only I could wish for right now would be speed limits for x and y axis just like for z, I have put a value of 450 in the XY rate field but for some reason this is only applied sometimes? I think I mostly want this because i have a reprap aswell and if I set a speed limit in marlin, it’s always enforced. No matter what crappy gcode i send at it. But I should probably just start making proper Gcode files instead of testing out my cnc build with gcode made for my reprap.. which works great btw, grbl controller cleans it up very nicely.

  3. I enjoyed talking with you at Seattle Mini Maker Faire. I and a friend are working on a design for a CNC machine inspired by the Shapeoko but with a 3×5 foot 4 inch deep cut volume.

    • Was nice to meet you also. I’ve been eyeing Openrail and the related V-slot rather than Makerslide for a larger design myself. Hope to get some new content on the site going over things I learned at Maker Faire.

  4. Hello! I hope. You don’t mind me posting this question here, but I am new to cnc and I have been using your fabulous program to get started!

    I have been trying to cut circles that I have created in Artcam express. As a test I created one circle with arcs and one without, I then set up my toolpaths, and export them as a .nc file.

    When I send the code to my zentoolworks cnc via arduino (USB), it cuts the circles out as diamond shapes, not circular at all. Both the circle created with arcs and the one without come out the same way.

    I am not sure where the problem is? Is there a setting that I am missing within grbl controller?

    Thank you!

    • Does the Grbl Controller visualizer show the circle as a real circle? If yes, then the problem is probably in the zentoolworks cnc. Let me know if you would like me to run a test on the file with my Shapeoko cnc – if yes, you can send me the file via email (it’s just zapmaker at this domain)

  5. Phil Lawrence passed on this site to me along with what software and hardware I needed for MY NICE EV project on YT.
    So far so good. I shall report back the results I get.
    Many thanks for having the software available. It is much appreciated.

  6. Hello Zapmaker,

    I really enjoy your software, I am having one problem. The problem occours when there is more than on pair of M3 and M5 commands in a Gcode file. The program run halts on the first M5 found in the Gcode file.

    So a file like:

    Will run to 100%


    Will stop executing and behaves as if the software is stuck in a loop.

    Am I doing something incorrectly?


    • As noted in my email to you, the problem could be with computers that are too fast for grbl – I have confirmed that grbl can get overloaded if data is sent too fast (there is no flow control possible). Version 3.5 solves this by slowing down the sending of data.

      When I run the failing example above on GrblController 3.5 on Windows 7 64 bit it runs fine for me.

      It is possible the problem may be with something else.

  7. A few photos from Maker Faire.

    Really enjoyed the trains!


  8. Would like to use the grbl controller software for a smoothie-board (http://smoothieware.org/), but it does not work. Could support be added? since smoothie also accepts basic gcode, but does has a toolpath display.

    • Sorry, but I can’t provide help on supporting smoothieboard, although someone versed in Qt and C++ could potentially branch the Grbl Controller code providing such support. I’m guessing it wouldn’t take much work – replace the grbl-specific code with smoothieboard-specific code and leave the gcode-specific code in place.

      • Smoothie was ported from GRBL, it should be extremely compatible.
        I think you should get pretty far simply by being less restrictive about what you accept as a welcome message.
        If you could point me at a file where I can change this so I can try it out ?

        • I’ll take a look at offering a “generic” startup. In the meantime, what you need to do immediately is return true from the checkGrbl() method inside gcode.cpp. You may need to add a SLEEP(1000) or equivalent right before emit enableGrblDialogButton(); in the else clause to allow the smoothie code to settle.

  9. I have set up a pi with an Adruino to drive an X Y Z system, your software is brilliant.
    I am looking for a way to continuously repeat a block of G code and I don’t think , LOOP, or , GOTO, are supported in your G code set. Is it possible to add some code somewhere to bring the BEGIN button out to a pi I/o pin and then I could Use M8 in the code and Adruino A3 to trigger a reload of code. I am on a steep learning curve here so apologise if this is to simplistic.

  10. Sorry if I don’t understand – You can repeat a file by clicking Begin after the file has finished, but it sounds like you want finer-grained control over the block of code. I’ll add a request to the Grbl Controller issues list in github to provide scripting support via programmable buttons, but not sure when that would get finished (not high on my list because I have more pressing issues to deal with in the project at the moment).

Leave a Reply to Petter Cancel reply

Your email address will not be published. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>