Making The OneHundred

I always found it, humorous, when some Instagrammer got ‘X number’ of people and made some crazy post about it:  “LOVE you all, hugs and kisses”, etc.  I recently hit 100, and figured this would give me a good excuse to combine both my 3d-printing and newfound CNC-routing skills:

I’ve been wanting to do a piece that combined both 3d printing and CNC routing, some came up with idea of a routed background, with 3d printed text.  “The OneHundred” was thus created:


Info on the techniques used to make it:

3D Modeling

The model was created in Autodesk Maya:  I wrote a super simple tool to randomize the rotation and position of simple poly cubes that made up the background.  A 3d model of the text was generated, and Booleaned out of the background.  An stl was generated for both the background, and the text.  The piece is 12″ square, by 3/4″ deep.

3D Printing

The text model was sliced using Simplify3D, and printed on my C-Bot directly off the SD card (I recently was printing something via Octoprint, bumped the RaspberryPi, and it lost USB connection half way through a multi-hour print… don’t like that at all).  Settings:

  • Filament: Makergeeks Orange PLA
  • Extruded @ 230deg (hot for PLA, but per manufacturer recommendation), bed @ 60 deg
  • 1.2mm E3D-v6 Volcano nozzle
  • 600 micron layer heights, 1 shell, 20% fast hexagon infill.
  • Print speed is 45 mm/sec : Sounds slow, but that’s a volume of 32.4 mm3/sec extruded.  For those keeping score, a the volume extruded of a .4mm nozzle with 200 micron layer heights at 90mm/sec is 7.2 mm3/sec:  Volcano is printing 4.5x as fast, crazy.
  • Took about 1.5 hours.  (so, based on the above specs, it would have taken 6.75 hours on a ‘normal’ printer).


MeshCAM was used to generate the toolpath cut from the MDF background.  The gcode was sent via the Chilipeppr GRBL workspace.  MeshCAM settings:

  • Roughcut:
    • 1/4″ 2 flute upcut endmill
    • DOC: .0625″
    • Stepover: .125″
    • Feedrate: 60″/minute
    • Took about 1.25 hrs
  • Finish Pass:
    • 1/8″ 2 flute upcut ballnose
    • DOC: .0312″
    • Stepover: .025″
    • Feedrate 60″/minute
    • Took about 3.25 hours

The above settings are completely based on previous trial and error, and could be improved no doubt.  Things I noticed while cutting:

  • Got some chatter on the roughcut, even when I turned up my DeWalt 611 speed all the way.  Guess I was cutting to aggressive.
  • The final piece has more scalloping than I’d like:  Think I need to lessen the stepover next time.
  • Having to babysit the machine for 4.5 hours was… not fun.  But I got to read some magazines I needed to catch up on.

Final Thoughts:

Great learning experience, I’m really getting the two-cut process down using my touchplate.  Can’t wait to do more!

X-Carve : Designing a dust shoe for the DeWalt 611 Router

Disclaimer:  3d printing and/or using this material in any form releases me from any liability:  Use at your own risk.  I will not be responsible for any damage to person or property based on use of this material in digital or physical form.

(now that we have that out of the way…)


While there are a number of ‘upgrades’ for the Inventables X-Carve I’ve read about, the most important one to me is a dust collection system.  There were a couple of options I found on the forums, but none that fit the 2.5″ line I wanted to use to hook to my Rikon Dust Extractor: It actually has a 4″ hose coming out of it, which I step down to 2.5″ into my Oneida Dust Deputy, then run another 20′ over to the X-Carve.

After a couple weeks of modeling in Maya (not necessarily a CAD modeler, but I make tools in Python as I need them to suffice), printing prototypes on the C-Bot, I finally have something functional:  v.A05.

I wanted to provide this to the X-Carve community as a big thank-you to all the forum peoples that helped me along the way.

If you make one for yourself or anyone else please:

  • Give credit.
  • Make for friends, but don’t sell it for profit.
  • Please reference the CC Attribution Commercial 3.0 license.
  • Feel free to improve, but see above.

If you’d like me to print one for you, contact me (warpcat at gmail dot com) for cost & shipping.

A shot of it disassembled:



It was (as expected) quite a learning experience, and I went though a number of revisions to get to this point:


Prototypes from right to left:

  • Initial wood prototype cut on the X-Carve.  Very quickly I realized that I know a lot more about 3d printing than cnc routers.
  • Blue #1 : Rough 3d shapes, good starting point.
  • Blue #2 : More stylish, actually functional.
  • Grey #1 : I started doing two-part cuts with tool-swaps, and realized that I should have a quick release.  This one has the vertical slotted section held in place by four powerful magnets to the main body.  Technically works, but has too much play and slop.  Also has a groove in the bottom for the strip brush.
  • Grey #2 (mounted to the machine) : Current iteration.  No quick disconnect, but very rigid, and easy to remove the two screws.

Features of v.A05:

  • Connects firmly to left side of the spindle mount, using 2 bolts.
  • Tapered hole for the 2.5″ line, allowing for friction-fit of the dust-line.
  • See-through window providing visual access to the bit, and for the dual-lights of the DeWalt 611 router to shine through.
  • Groove in the base to allow for the insertion of a strip brush.
  • Allows for adjustable height to better fit your bit length.

Bill Of Materials

  • 3d Printed Dust Shoe.  Download the stl on Thingiverse here.
  • Clear acrylic for the window.
    • I bought a sheet of 2.5mm / .0975″ Lexan at Orchard Supply Hardware that worked well.  Could double that thickness and still have room.
  • 2″-ish Strip Brush.
    • I used this “Easy Cut Strip Brush” from McMaster-Carr.  You’ll need a little less than 17″ for the perimeter slot.
    •  What you get is up to you, but I’d advise on getting the softest possible bristles.  The bristles for the listed brush are too stiff IMO, FYI.
    • See specific notes below on issues with this.
  • Hot Glue
    • For strip brush and window adhesion.
  • 2 M4x12 Socket Head Cap Screws.
    • Used to bolt the print to the router bracket.
    • McMaster-Carr Link
    • I bought mine at Orchard Supply Hardware.  10mm would probably work fine too.
  • 2 washers.
    • For the above M4 screws.
  • 2.5″ Swivel cuff hose attachment.
    • I got mine at brick & mortar Woodcraft (can you believe it was cheaper than Amazon?)
    • Swivel is important to allow the hose to not bind in the shoe.
  • A bunch of 2.5″ hose to connect to your dust collector.

Build Instructions

  • 3D print the dust shoe stl file:  I would highly recommend to print this as strong as possible.  If you’re using a .4mm nozzle, I’d do 3-4 shells, 25-50% infill.

(This video was actually of one of the prototypes, but you get the jist)

  • Carve the acrylic window on your X-Carve.  Easel file here.
    • Note, as modeled, the diameter of the larger dual circular apertures is 6.5cm each.  As printed on my C-bot, they are 6.4cm each.  I designed them in Easel to be 6.3cm, and it fit perfect after cut.
    • cutting_lexan
    • I used a 1/8″ single flute up-cut bit, default Easel settings for that material, DeWalt 611 speed of 1.
  • Cut your strip brush to length, and insert into the channel on the base of the shoe.  But first, read the below notes.
    • Super important notes on the strip brush:
    • Based on the version I purchased and listed above, I found that the bristles were far too stiff, based on the number of them.  Because of this, as the toolhead would change direction, the pressure of the bristles on the head would actually lift it on z during movement change.  Not so good.
    • Suggestions:
      • I ended up cutting out 3/4 of the bristles, on the inside of the strip.  If you go this route, I advise you do this before you mount it:
      • cutting_bristles Cutting in-progress.
      • Buy much softer bristle strip.  I’ve seen horse-hair as an option, that may work well.
      • Cut the bristles shorter.
    • Based on how I designed it, the strip was easy to fit into the side channels, and I used a screwdriver to help ram it into the turns.
  • Use hot-glue to run a bead around the inside of the strip-brush & dust shoe to stick it in place.
  • Mount the window in the top of the dust shoe, and run a bead of hot-glue around it’s perimeter to stick it to the shoe.
    • Note, a heat-gun will soften the glue for removal if needed.  Just don’t damage the print.
  • Slip the shoe over the bit into the router mount, and attach with the M4 socket screws & washers.  I use two.
  • If you haven’t already, screw the swivel-cuff into your 2.5″ line.  Then press it into the hole in the shoe, slightly twisting to get a good friction fit.  Be sure to hold the shoe from the bottom during insertion, not the vertical side piece, so as to not torque the print too much.  If you have any concern of this fit, you can run a bead of hot-glue around it too.

Use Instructions

  • Raise the shoe up as far as possible to get the bristles level with, or slightly higher than the bit.  Be sure to not block the down-vents from the router with the window:  Give it some space.
  • Be sure nothing can collide with the shoe, specifically material clamps.
  • While running it, check how much pressure is being put on the bristles:  Make sure they’re not causing any binding.  Trim as necessary.  Or buy softer bristles.


These are as designed, not necessarily as printed.

  • Width : 105.5mm
  • Height : 178.4mm
  • Depth : 124.9mm
  • Strip-Brush channel:
    • Width: 6mm
    • Height: 5mm-ish
    • Note the channel is rotated 10deg, so the brush will flare slightly out.

Future Improvements:

  • I’d still like a better quick-release for swapping bits.  Removing the two screws isn’t hard, but I’d like it to be “more slick”.
  • I need to find a better solution for the bristles.  Either softer, or less of them (I may have more cutting ahead of me).

But for right now, I need to actually start making stuff on the X-Carve, rather than for the X-Carve :)

Burning an Arduino Bootloader, reflashing Grbl

X-Carve has been working great, other than the fact the limit-switches only worked for one day:  On day one, they worked as expected.  But on day two, I installed Chilipeppr (which I’ve been continuing to use successfully), and they switches suddenly stopped working.  You can see my thread on the forums here talking about the issue.

After much discussion on that thread and others, it sounded like something was wrong with the Arduino Uno that shipped with the X-Carve.  No problem, I have two other Uno’s, I’ll just upload Grbl to them.  But the problem was, via the “Compile Grbl to the Arduino” page (based on this Inventables Grbl fork), it wouldn’t load.  Note, I’m on OSX 10.10.5

I would get these errors constantly:

avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x0d
avrdude: stk500_cmd(): programmer is out of sync

And sometimes this:

avrdude: stk500_recv(): programmer is not responding

Super frustrating.  After more searching, it sounded like the bootloader on the older Uno’s was out of date, and I needed to update it.  I’ve done a lot of Arduino programming in the past, but never had to burn a bootloader.

Arduino has a tutorial here:  Arduino as an ISP  :  It shows how you can use Arduino A to act as an ISP (in-system programmer) for Arduino B.  Problem is, I couldn’t get it to work.  Followed the directions perfectly, but would constantly get errors.

After more searching online, I found reference to “Atmega bootloader program by Nick Gammon”:

I downloaded the source sketch, followed the directions, and it worked!  The only gotcha was, after I uploaded the sketch, I had to open the Serial Monitor to see all the text listed under the “Example Output for Uno” section (that wasn’t terrible obvious for me to do based on the instructions).  I was then able to issue the remainder of the commands, and complete the burn.  So a huge thanks to Nick Gammon!

Once the bootloader was re-burned, I was able to “compile Grbl to Arduino” per the above link, and it actually worked.

But, querying the default grbl values via the $$ command looked really weird.  I learned you need to issue this command to reset to factory defaults:


In addition, programs like Chlipeppr and UGS won’t send the ‘?’ command to grbl over their serial connection (which you need to print your limit switch settings) : I had to issue that via the Arduino IDE’s Serial Monitor.

I was able to test voltage on the digital pins for the limit-switches (D9, D10, D12), and they all had positive voltage, meaning they now work.

But unfortunately, it wouldn’t work in the X-Carve.  From my forum thread above:

Update on this: I checked the digital pins on the new grbl loaded uno: They all read close to 5v, which tells me they should actually support the limit switches. So that’s good…

However, the whole thing doesn’t work: Even though (on the ‘old but updated Uno’) I can query the grbl firmware vals from both the Arduino IDE & from the ‘Advanced settings’ in Easel, when I go to do the machine setup, I can’t jog the steppers at all. No sounds, nothing. I unplugged the limit-switches, but that didn’t make a difference. Swap for the ‘shipped with x-carve’ uno\gshield combo and it scoots all over. Swap back to the ‘old but updated’ uno\gshield, and dead in the water.

Comparing my ‘old but updated’ uno to the ‘shipped with x-carve’ uno, I notice the x-carve one has more header pins the gshield plugs into. At this point I’m guessing that Arduino Uno’s aren’t created equal, and the other ones I have are ‘just too old’.

Maybe I’ll get around to buying a ‘newfangled uno’ eventually, but since right now I’m cutting just fine without the limit-switches, that’ll be a future project. Thanks for all the help though!

SOOOOOooo… no limit-switches for me right now.  But at least I can still carve :)

X-Carve CNC learnings : MeshCAM, touchplates, Chilipeppr, & multi-pass cuts

It’s been great having two weeks off over the holidays, and a newly assembled X-Carve.   Following up on previous posts, this is more learning, saved on the web for my future reference.  Current CNC skill level = noob.


meshCAMWhile Inventable’s Easel ($ = Free) is great, I’ve quickly exhausted it’s capabilities.  Specifically, I want to model 3d objects in Autodesk Maya, and mill them on my X-Carve.  Currently Easel does 2D (cutouts) 2.5D (cutouts at multiple heights) but not full 3D objects.  Reading the forums there appears to be several popular software packages out there that do what I’m after, two of which include MeshCAM ($250-$500) and VCarve ($350-$700).  My issue is I’m on a mac, which is very limiting in the world of CNC as I’ve learned, so I can’t even test V-Carve :-(  MeshCam it is!

MeshCAM does give you a nice fully featured trial period (couple weeks) to check it out.  And it does exactly what I’m after:  Creates multi-pass (roughing, finish) toolpaths based on my 3d objects.  Pros is that it does that well!  Cons is that the UI feels a bit antiquated compared to most 3d software I use, and I can’t really find any robust instructions online (they do email you a tutorial a day once you get the trial though).  But it gets the job done.

List of tutorials I’ve found:

Other Links:

And, it exposed the first issue that prompted this whole post:  Since it provides for multi-pass cuts (requiring a tool change), how can I actually implement them?


To dotouchplate a multi-pass cut (as I’ve been learning), you generally use a big fat bit on the roughing pass to remove a bunch of material, then a finer bit on the finish pass to make it look all nice.  But this obviously means you need to swap bits.  And if you swap bits, how can you guarantee that the Z-height is the exact same on the finish pass as it was on the roughing pass?  Since when you remove bitA and add bitB, there’s no way a human can guarantee the tip of bitB is at the exact same location that bitA’s was.

Reading the forums it quickly became apparent that I needed a ‘touchplate’ : A chunk of metal of a known thickness you can use to effectively ‘close a circuit’ with the spindle bit:  When that circuit is closed, you know you’ve hit the top of the material you’re about to mill (with the bit a known distance above it).

I fashioned my touch-plate out of a scrap of 1/8″ aluminum my father had given me from a previous boat build:  Drilled a small hole in one end, affixed a wire to it through a bolt tapped into it.

From there, per the forums, I connected that to the Arduino Uno’s A5 pin, and another wire with an alligator clip on the end to it to the gShield’s ground.  The main issue is the analog headers on the Arduino are hard to get at because of the gShield on top, but I was able to get a small lead plugged in (see below image).


But once it was all wired up, how to test, and ultimately use?


ChiliPepprchillipeppr is something I only recently learned about:  A tool for sending gcode to your device, supporting tinyG and Grbl (which the X-Carve uses), and ‘generic serial’. The Universal GcodeSender (Grbl only?) was a close second (and I got it up and running, which required a frustrating update of Java on my mac), but honestly ChiliPeppr just looks cool while you’re using it.  While Easel allows you to send gcode to the gShield, I couldn’t actually get it to execute the (below) touchplate gcode:  The machine would just make a weird vibrating sound.  Could be my complete lack of knowledge on the subject, and I wanted to learn how to use ChiliPeppr anyway.

The first stumbling block was figuring out how to connect ChiliPeppr to my X-Carve (since there are no instructions for ‘first time users’ I could find) : As it turns out, based on the smallish screen of my Macbook Air, the menu on the bottom right that lets you “Download Serial Port JSON sever” wasn’t visible.  You need to install and run that server (a shell pops up to let you know its running) to allow ChiliPeppr to talk to the X-Carve.  Once that was done, I was in business.

One thing I’ve noted about ChiliPeppr every time I’ve used it to make a cut (total of three times now) : It seems to randomly pause.  I have to “unpause” it, and it happily goes along it’s way.  Not sure what is causing this, nor can I find any errors/warnings shown.

Other ChiliPeppr links:

Multi-Pass Cuts

Being the CNC noob that I am, since I couldn’t find any docs for this (meaning, using a combo of MeshCAM, Chilipeppr, and doing multi-pass, tool-changing cuts) anywhere.  So below is a rough outline of my experience doing just that:

  • In MeshCAM I created both a rough and finishing pass, and saved out the gcode using the “Shapeoko GRBL-Inch” postprocessor.
  • I drag & dropped that .nc file into ChiliPeppr.
  • In ChiliPeppr, I used the jog controls to move my toolhead to the bottom-left corner of where I wanted the cut to start.
  • Using the touchplate, I put it under the toolhead, connected the alligator-clip to the it, then created a ChiliPeppr JavaScript macro:
    • macro.sendSerial(“G20\n G92 Z0\n G38.2 Z-.5 F1\n G92 Z.124\n G0 z.25”);
    • The above (modified) code is thanks to a X-Carve forum post by user CharleyThomas.  The raw code on a single line looks like:
    • G20; G92 Z0; G38.2 Z-.5 F1; G92 Z.124; G0 z.25
      • G20 : set to inches
      • G92 Z0 : Zero the Z axis, I added this later:  Before I added this, there was a bug that the first time I’d run the macro, the toolhead would go up, not down.  There was some speculation that since the coordinate system wasn’t set yet, the machine thought the toolhead was too low, and would auto-raise it.  Regardless of the issue, this command solved it.
      • G38.2 Z-.5 F1 : Move the spindle down half an inch max looking for the touchplate
      • G92 Z.124 : Set the z-height to the thickness of the touchplate (mine is .124″)
      • G0 z.25 : Raise the spindle to 1/4″ above the material.
    • Note, as I was authoring this, I realized ChiliPeppr has a ‘Touch Plate’ widget, but I have yet to investigate it.
  • From there I turned on the spindle, and fired off the gcode.
  • When it paused for toolchange, I swapped the bit, then re-executed the above steps with the touchplate and macro to re-zero the z-height.  Then unpaused it to continue the work.

Worked like a charm:


In the above pic you can see the finish pass emerge from the rough.

All in all, a pretty rewarding experience.


X-Carve : Configuration & troubleshooting

This page will be an evolving repository for myself, to collect bits and pieces of X-Carve configuration, troubleshooting, etc.


Steps per mm

After I built the X-Carve and got a few test cuts in, I found it odd there was no tuning step.  With 3d printers, it’s important to make sure you get their “steps per mm” set so when you say “make this 10cm”, it really is 10cm.  I found the “Calibration Test Pattern” project and started cutting.  Immediately I noticed something was wrong:  The circle (labeled #13) it started with was an oval, not a circle.  After searching the forums, I found this great vid showing how to calculate the steps per mm (just about the exact same process as on a 3d printer), and how to update the settings via Easel:

As it turns out, my Y & Z seemed pretty spot on, but my X was way off.  Fixed!

Motor current

Just like on 3D printers, you need to tune the steppers current so it’s not too little (so that you miss steps) or too great (so you miss steps).    All three of my stepper pots were off from the factory (which is normal, really), and to get started I manually twisted the pots until they started behaving correctly.  But I figured there was a more accurate way, like tuning the stepper drivers on my C-Bot.  And there is: Again, another great vid:

I have the Nema 23’s from inventables, which are 2.8A per phase.  Using the method from the above vid I set them all to 2V.   Seems to work just fine so far.


Forum post with a variety of troubleshooting videos:

Understanding GRBL

I somehow got my limit switches broken.  Follow the thread here for the nitty gritty.  As of this authoring they still don’t work:  Worked fine for a day, and then… dead:  Those pins on the Arduino constantly read 0v.  But in the process of debugging this I learned a lot about grbl.

This forum post got me started on talking to grbl.

The easiest way for me to talk with grbl is through the Arduino IDE.  It was a little twichy at first, here’s what I had to go through:

  • Make sure your board is set to Arduino Uno (since right now grbl requires an Uno).
  • Make sure you have the right port selected (obviously).
  • When the serial monitor is up, make sure your baud rate is 115200.
  • If it connects properly, you should see it say something like > Grbl 0.9j [‘$’ for help]
  • You issue commands to grbl by prefixing them with the dollar sign: $.  If you issue the $ command and nothing happens, change the baude rate to 115200 again.  I had to connect a few times before it would let me issue commands to it.

grbl links: