NickelBot – Complete

The NickelBot is complete and it works great. The goal of the project was to create an easily portable machine that creates low cost items that could be given away at events like Maker Faires. I think it has completely achieved that goal. The nickels are purchased from Amazon and cost about $0.08 each.

Here is a video that explains the machine.


It is quite reliable and the cycle time is is just about right at 1-2 minutes per nickel. I think the engraving quality is quite good. I ran it at the Chicago Northside Maker Faire last weekend. It made about 60 nickels without any problems. Here are some of the nickels it made.


The NickelBot uses (2) NEMA14 stepper motors in a T-Bot configuration. These drive a single GT2 6mm belt. The linear bearings are (2) 6mm rods per axis with (1) LM6LUU per rod.

To handle the nickel loading and unloading, it uses a single micro hobby servo. This servo  connects via a 0.03″ brass wire to a clamp. The firmware has (3) positions hard coded for the servo for fully open, nickel support only and supported plus clamped.

All 3D printed parts are PLA printed on a Lulzbot TAZ6. The colors just represent the color that happened to be in the printer at the time.

The Laser Module

The laser module is a 3.5W peak, 450nm (blue) laser. It comes with a laser power supply that has a 12V power input and TTL laser control input. It also comes with a 12V 5A power supply. I bought it a few months ago from when it was on sale for about $70, but they are typically around $99.  I control the engraving power with a 5kHZ PWM from the microcontroller.


I used a PSoC5 development board as a plug in on a custom PCB.  I knew adding an additional, accurate PWM for the servo was going to be vastly easier on the PSoC5 vs. an Arduino.

This dev board has a built in programmer debugger that makes firmware development very easy. It is great to be able to set breakpoints and check values with the debugger. I have have a another blog post with more details on this here.


The firmware is a modified version of my PSoC5 Grbl port. The only modification needed was the code to handle the clamp servo. Rather than adding special gcodes for the clamp, I simply re-coded the M7,M8 and M9 coolant commands. I did this because all of the parsing and protocol issues were already done.  Each command represents one of the clamp positions.

I may post the source code on Github soon.


The machine has (2) home switches (X and Y). A homing sequence needs to be run each time you power up the machine.  All other locations are referenced to this location. A one time  calibration is done to locate the following locations.

  • G54: G54 is the the default work offset. I decided to use the center of the nickel as the 0,0. I jogged the machine visually until the nickel looked centered. I then set the G54 location with this gcode line”G20 L10 P0 X0 Y0″. I made a target shaped graphic that I used to test engrave this location(see above). I used a caliper to measure the centering error, jogged that amount and reset the 0,0. I did this about 5 times until I was satisfied with the centering.
  • G28: I used the G28 location as the location under the nickel hopper. You jog to the location and set it with “G28.1”.
  • G30: I used the G30 location as the position over the eject chute. This is set with the G30.1 gcode command.


I am using LaserGRBL.

This is a great program for this application. It does everything, starting with a bitmap image, to gcode sending in one application. It also has some macro (multi-line gcode) buttons that are very handy. The only drawback for some is that it is Windows only.

Here is an example of the macro to get the nickel.

G90G0X0Y0 ; rapid move to absolute 0,0
M9 ; loosen clamp
G28 ; move under nickels
G4 P0.75 ; wait for nickel to fall and settle
M7 ; close clamp
G4 P0.5; wait a bit
G0X0Y0 ; return to 0,0

Source Files

Possible Improvements

  • Interlock switch: Right now there is no interlock switch for the door. If I make a new PCB, I will add a provision for that. I’ll probably just break all power to the laser module.
  • Nickel Flip: Right now the nickel always comes out of the chute upside down. This is not the best presentation. This was a compromise to make the machine as small as possible. The nickel has to fall between the Y rods. Rather than makethe distance between the rods wider than the nickel, I designed and aligned the clamp/support system so that one side of the nickel falls first and goes between the rods closer to vertical.  There is a probably a way to design the chute to catch the nickel before flips over completely or re-flips it back.
  • Software:
    • More automation: LaserGRBL has macro buttons for the nickel feed and eject features, but it would be nice if that was automatic. They have added a gcode header and footer feature to the roadmap. Right now you can generate the gcode, save the file and paste the nickel handling code in an editor. That file is then fully automatic.
    • Customizing: It would have been fun to easily add names, etc to nickels for people.

If you want to be notified of future blog posts, please subscribe.

Share and Enjoy:
  • Print
  • Digg
  • StumbleUpon
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks

7 Responses to “NickelBot – Complete”

  1. Doug

    Great project and very cool for showing kids how these robots work( laser engravers/cutters, 3D printers, plotters, etc ).

    I recently installed a K40 laser cutter and was thinking your design could be fun as a mash-up of laser cut parts(box) and 3D printed parts(T-bot motion, chute, etc.

    Any chance of sharing the design and STL files?

    I was also thinking about ways to eliminate customization for the eject motion. Maybe something which uses a Z-axis limit switch triggered when the holder is moved forward a bit more than is needed for laser engraving. Or even Z-axis commands.

    Great work and perfect Maker Faire and school Science Faire demo device.

  2. bdring


    I have no issues with releasing the design files other than the time it takes to do that properly. I’ll see if I can find some time to do that.

    I considered using Z axis commands, but thought that might be more complicated. Be sure to reply with more info if you get that figured out.


  3. bdring


    The source files have been added.


  4. Doug

    A quick look at the ‘nickel’ release mechanism regarding the upside down nickel and it appears it is flipping on release because the servo only moves one side. You could either add a part under the release which stops it from fully flipping or change the release so both sides retract.

    I’d vote for the simplest of a mod to the chute which stops the flip before it gets to 180 deg.

  5. bdring

    Yes, the chute mod seems like the easiest approach to start with.

  6. tweepy

    About the release system, why not implementing the same as the feeding system: add a platform under the X/Y tray, with a hole over the chute, then by simply moving to the chute area, the nickel would drop.
    Adding a piece of HEPA filter would help, and maybe only drive the fans when the laser is running.
    Amazing job BTW.
    Any source code, CAD file, anything?
    Why not using an off the shelve USB stepper motor driver instead of starting from scratch?

  7. bdring


    Thanks for the suggestions.

    Nickel Release: You need a way to firmly clamp the nickels or the engraving looks bad. Your method might work if the clamp was spring loaded and changed positions by contacting things based on the location. For me, solving problems in code, is faster and cheaper.

    Filter: That helps. I used a carbon one on the Coasty laser cutter. I would need to add a relay or FET to control the fans and add a gcode command. I am thinking about a battery powered setup and that would save power.

    CAD Files: They are posted now. See the updated blog post.

    USB: Not sure what you are talking about, but the drivers I used are only $2.50 each and very good. The firmware does use USB to talk to the PC. I do regret not including Bluetooth. It is fun to control these things from a phone.