Introduction: Solidoodle 2 (2nd Gen) to CNC Mill Conversion
This Instructable is to demonstrate the procedure I used to convert my Solidoodle 2 (or 2nd Gen Solidoodle) to a desktop CNC mill. I took the minimalist approach and changed only those things necessary to complete the expected outcome. As a consequence, there is no additional hardware required. The process requires some disassembly of your Solidoodle (mainly removing the extruder head from the carriage) as well as printing a custom part to facilitate mounting your rotary tool (designed for a Dremel brand rotary tool - I imagine other brands would work, assuming the head mounting threads match the Dremel threads).
Another assumption of this process is that all Solidoodle 2's are built identically. Since I only have one, I can't speak to the validity of this assumption.
This started as a discovery project, as I was looking to purchase a desktop CNC mill. I noticed that most of the DIY mill kits used many of the same components included in the Solidoodle. I also discovered that most CAM programs will export GCode compatible with the Repetier firmware already loaded on the Arduino board that ships with the Solidoodle.
In a nutshell, this process outlines the printing of the rotary mount, dismantling of the extruder head, attachment of the rotary mount, mounting of the rotary tool, and some guidance on how to successfully complete a project using MecSoft FreeMill and Repetier-Host.
Tip: The question will probably come up about why I didn't use AutoDesk 123D CNC (123D). It's very simple. I wasn't able to get 123D to export the GCode in a flavor that Repetier-Host understood. Repetier-Host expects spaces between each component of a GCode line. 123D writes GCode lines without spaces. I did like the all-in-one calculation that 123D provides, but writing a GCode re-parser/converter was outside the scope of this project. If anyone from AutoDesk happens to read this, please give us a 'Machine' option in 123D that generates verbose GCode (with spaces between line components).
1 - Solidoodle 2 3D printer and appropriate accouterments
1 - An STL (or compatible) file containing the design you wish to mill
1 - MecSoft FreeMill or similar CAM package (available for free from the MecSoft web site)
1 - Repetier-Host Solidoodle edition (available for free from Solidoodle web site - but you should already have this installed if you're actually using your printer)
1 - 1/4" or 6.5mm end wrench
1 - Small Phillips head screwdriver
1 - Rotary tool (I use a Dremel brand tool)
1 - Milling bit (1/8" flat end mill used for this procedure - Ball end milling bits will provide smoother results)
1 - Milling Stock (block of wood, plastic, wax, or soft metal)
1 - Sense of adventure
1 - Ounce of patience
Step 1: Download and Print the Rotary Tool Mount
You will need the rotary tool mount .stl file from Thingiverse. It looks kinda like a weird spaceship, huh? This concept is based on a model by LaserNipples. Basically, I just stole his (or her) thread component and created my own mount components. I didn't want to replace the entire carriage, as would be necessary using the original design.
Add this into Repetier-Host and slice it up. You may want to print with 100% infill (solid) for maximum sturdiness. I printed my prototypes at 50% because I'm always in a hurry and they seemed ok. Can't have too much sturdiness, though. I also printed at 0.3mm layer height. This seems to be the best trade-off between speed and accuracy.
Tip: If you're new to 3D printing, I also recommend spraying your kapton-covered (or glass-covered) build plate with a thin layer of hairspray before printing (not every time, about once every few prints or so). Also, add a wide (5-7mm) Brim to the print settings. This helps with adhering the part to the build plate and prevents warping.
Printing the mount is the easy part (for you, took me 6 design cycles over 3 days). Honestly, it's all pretty easy, just requires some patience. Speaking of patience, something I discovered while swapping this out so many times is:
Tip: ALWAYS perform a Z-axis alignment after swapping the head. You never get everything tightened back up exactly the same and precision is key.
Step 2: Dismantle the Extruder Head
Remove the filament from the extruder head
Tip: In order to do this efficiently, I recommend heating the extruder head to extrusion temperature. Then, pull firmly, but gently on the filament while clicking the 'Retract' button in Repetier-Host. Don't pull too hard, or you'll leave filament in the extruder and make it more difficult to re-assemble. Just keep steady pressure on the filament and keep clicking 'Retract' until the filament pulls free.
Remove the filament spool and spindle and store them in a warm, dry place. Doesn't have to be warm and dry, but you get the idea.
Caution: Wait for the extruder head to cool down before attempting this step. You may be seriously burned if you're not careful. The extruder head gets up to about 215C or 420F. You could bake biscuits on this thing.
Once the extruder head is sufficiently cooled, locate the two mounting bolts at the bottom of the clear plastic square that serves as the extruder motor mount. Place a 1/4" or 6.5mm end wrench on the nut at the front and use a small phillips head screwdriver to turn the bolt counter-clockwise until the nut falls free of the bolt. Repeat for the other side.
Pull the mounting bolts out of the back of the carriage and place them somewhere safe.
Tip: I always re-attach the nuts to the bolts after I remove them so they don't go wandering off anywhere. There are few things worse than getting to the last step and realizing you're missing one tiny little shiny something and you have no idea where it is.
Tip: On finding lost tiny little shiny things: start looking in the most ridiculous place you can imagine. It's usually there.
Step 3: Disconnect the Extruder Head Connectors
If you want to stow the extruder head while routing, you will need to disconnect the wiring. I found that simply zip-tying the extruder head to the printer casing worked just fine.
Tip: These steps are optional. Skip to the next step if you're going to zip-tie the extruder to the printer casing.
Take a picture of your printer control board wiring connections. This will help you during the reconnection phase.
Disconnect the extruder head wiring from the printer control board. Should be 4 connectors: The motor control connector, the extruder temperature connector, the extruder heater control connector, and the fan control connector.
Remove the tape holding the harness to the back of the printer and pull the harness through to the inside of the printer. Watch those connectors, as they like to get snagged on the grommet or the other wires.
Place the extruder head off to the side (but still somewhere safe and accessible).
Step 4: Attach the Printed Rotary Tool Mount
Tip: Before you slap that freshly printed rotary tool mount onto the extruder carriage, I would check the carriage interface bolts for tightness (the ones pointing down into the bearing mount). Mine were pretty loose.
Attaching the mount should be fairly straight-forward, but could need a little finagling, depending on how much your part warped during printing, how many print errors occurred, or how much different your carriage is than mine. I found that pressing the back in first, then pulling down on the front seemed to work well. It's more important to preserve the front of the mount than the back bolt guides. You may need to grab a razor and trim a bit off of the bolt guide holes to allow enough clearance.
Slide the carriage mounting bolts into the mounting holes from the back (same way you took them out). You may need to press down on the mount a bit to align the holes properly. The bolts should slide in fairly easily once the holes are aligned.
Press the mounting nuts into the nut holders on the front of the mount. Hold them in with your finger while you turn the bolts with the small phillips head screwdriver until they feel 'snug'.
Tip: Be careful with how much torque you place on the bolts. Remember that most of your components are made of plastic and will split or crack if placed under too much pressure. You also don't want to leave them too loose, as this will significantly impact the precision. This is one of those things you'll just have to learn with practice.
Important: Check your clearance. Move the carriage around the printer and make sure it doesn't hit anything unexpectedly. You may need to trim the edges of the mount, depending on how much different your printer is from mine. Also, be sure that the axis limit switches are successfully engaging. The carriage should bump the x-axis limit switch and trigger it before contacting the belt pulleys or the y-axis carriage.
Step 5: Attach the Rotary Tool to the Mount
Tip: Before mounting your rotary tool, install the desired milling bit. This reduces stress on the mount, and ensures you get the chuck tightened down sufficiently.
Don't worry too much about how far the bit sticks out of the chuck. We'll have to manually calibrate the z-axis for every job anyway, and you want as much length as possible in order to maximize how deep we can carve into the stock.
Remove the collar from the end of the rotary tool to expose the mounting threads. Insert the rotary tool into the top of the mount and thread it down until it's snug. Again, be careful, and remember that it's plastic. Also remember that it needs to be snug and not wobbly.
Step 6: Re-attach Extruder Head Wiring Connectors
In order for your printer to function, it expects the extruder head to be connected. It just refuses to work without it. it's stubborn like that.
Tip: If you disconnected the extruder head in the previous steps, follow these steps. If you left it connected, skip to the next step.
Using the picture you took previously of your printer control board, re-attach the extruder connectors. I recommend leaving the fan control connector detached. It doesn't seem to care whether this is connected or not, and we don't want the fan running while we're routing.
Caution: Be sure to place the extruder head in a safe position or location. Because the heater is connected, it is possible for the extruder head to become very hot, if you inadvertently (by reflex in my situation) turn on the extruder heater while routing.
Step 7: Load Design and Set Up Coordinates
Open your CAM software (MecSoft FreeMill in my case).
Tip: STL and GCodes are unit-less, so don't worry about what units it's set to, just keep the units the same through-out and don't do any conversions. For example, the print bed is 150mm, so use 150in. instead and everything will turn out right.
Now, load your design file and click on your part to select it. If you don't set units first (at least in FreeMill), don't change them. It does all sorts of wonky things trying to convert from inches to millimeters that are just unnecessary and cause all sorts of unexpected results.
Using the wizard on the left, click the 'Part Bounds Stock' step. This will list the current bounding dimensions of your part. We want to make the bounding stock equal to the print bed dimensions (you'll see why later). So subtract the x and y values from 150, divide by two, and enter the result into the appropriate offset fields. I'm using 65 because 150 - 20 = 130 / 2 = 65.
Tip: The wizard acts a little strange for this step, as it doesn't properly update the values until you re-select the step. So, change back to the first step in the wizard, then re-select the 'Part Bounds Stock' step. You should see the preview change to match your entries.
Click the 'Set Work Zero' step in the wizard. This is the basis for how FreeMill calculates the coordinates of the tool paths. Select the 'Set to Stock Box' radio button. This will enable the rest of the form. Now select 'Highest Z' and 'SouthWest' radio buttons. This tells FreeMill to calculate the tool paths from the bottom left corner of the build plate and to start at the top of the stock.
Step 8: Set Tool Dimensions and Movement Speeds
Tip: The next step in the wizard is to set the tool dimensions. Most of these are irrelevant in our case, because the x-axis carriage will contact the design long before the chuck does.
First, select the type of bit you're using.
Measure the distance from the end of the bit to the lowest point on the x-axis carriage (usually the mounting bolts). Use this value for the 'flute length' parameter.
Set the tool diameter appropriately also, and just make up values for the rest.
Tip: Make sure the holder diameter is larger than the tool diameter and the 'tool length' is larger than the 'flute length' value, or the wizard will complain at you.
Click on the 'Cutting Feeds and Speeds' step of the wizard and enter the appropriate value for rotation speed. I'm honestly not sure how important this is.
I've been using 20mm/min for the cut travel speed (on wood stock - no pun intended). This will depend heavily on the stock material and the cutting bit you're using. I don't have any 'rules of thumb' to provide here. I say just start slow and adjust as necessary.
Again, not sure how important the 'Engage' and 'Retract' speeds are. I use one half of cut speed (10mm/min in this case).
Step 9: Generate Tool Paths and Export GCode
Whew... nearly finished with the CAM portion.
Click on the next wizard step and enter the step distance value. This basically translates to how much z-axis movement is between cuts. The analog in 3D printing would be layer height. Smaller the better. Start high (0.3mm-ish) for testing and crank this down as you get more comfortable with the process.
Tip: I don't usually change the cut direction. But for serious wood workers, I'm sure there's some rule about grain and cut direction that makes sense. I just don't know what it is.
Click the 'Generate' button, then the 'Simulate' button. This will show you a preview of the final cutting. Make sure it looks the way you want. This preview will help you understand the consequences of your bit choices. If you're using a large, flat-end bit, you won't see a lot of detail. If you're using a small, ball-end bit, things will look much smoother and more detailed.
Tip: If you decide to go back and change your bit settings, be sure to click through the wizard in order. FreeMill doesn't like it when you skip around. Also, always be sure to return to this step and click 'Generate' again before proceeding to 'Export'. Otherwise you get some weird cryptic error that will leave you scratching your head. Trust me, just do it.
Click on down to the last wizard step. This is the step where the GCode file gets generated. I've found that the 'DeskCNC' output generates GCode most similarly to the Repetier firmware. Granted, I haven't tried every single one of these. There may be a better one. For the purpose of this procedure, select 'DeskCNC' and click the 'Export' button. Save the file in a conspicuous location (don't just click 'Save' without reading - you'll likely never find it. Ever.).
This will result in FreeMill doing some calculations and then opening a notepad window with the resulting GCode. FreeMill assumes you're running this on an actual CNC mill, so it puts a handful of useless commands at the top and bottom of the file. While it's open in notepad, let's go ahead and get those out of there.
Delete the top four or so lines of the GCode file (down to where you see the first actual move - where the x or y coordinate is non-zero).
Scroll all the way down to the bottom and delete the last six or so lines of the GCode file as well (up to where you see the last set of x and y coordinates duplicated). We don't want any unnecessary z-axis movement, so take out the line that resets the z-axis and everything below it.
Save it! And now we're finished with CAM, finally.
Step 10: Set Up Repetier-Host for CNC Milling
We need to make a few small changes to Repetier-Host to make this work.
If you watched your printer during the mount print step, you'll notice that it reset the z-axis before it started printing and then dropped the print bed at the end. We don't want to do either of those things for milling, because we'll never be able to hit the z-axis limit switch with stock attached to our print bed. And, since we aren't setting the z-axis, we don't know how far down the bed drop command will try to send our print bed after the job completes. So we're going to temporarily get rid of those steps.
First, open up Notepad. Now, open Repetier-Host and change to the 'G-Code Editor' tab on the right.
Click the drop-down that says 'G-Code' and select the 'Start Code' entry. Select everything in there and copy it. Now paste it into Notepad and save it somewhere conspicuous as 'Printer Start Code.txt' or something like that.
Do the same for 'End Code' and 'Run on Kill'. You should have three .txt files with your printer codes backed up.
Now, go back to 'Start Code' and remove the z-axis reset commands. Or just delete everything and past this in:
G21; set mm units
G90; set absolute coordinates
G28 X0 Y0;home x and y axis
G1 X75 Y75 F4000; move Nozzle above bed
Click the 'Save' button.
Change to 'End Code'. Delete everything. Click Save. Same for 'Run on Kill'.
Important: Don't forget to restore these to the proper values when you switch back to print mode.
Step 11: Set Up the Milling Job
Click the 'Load' button in Repetier-Host and select the GCode file you exported from FreeMill. The file extensions are different, so you need to change to 'All Files' in the Open dialog.
Tip: Make sure you have both 'Show Filament' and 'Show Travel' enabled.
Verify that the light blue tool paths match what you expected. It should draw below the virtual print bed, as we will be manually aligning the print bed to the end of the milling bit, and the bed will move upward from that point. Pay close attention to the size and location of the lines, as this is exactly where the cuts will be made (relative to your print bed).
Step 12: Attach Milling Stock to Print Bed
Using small C-clamps, attach your milling stock to the print bed. Use the print bed edges as a guide to measure where the stock should be attached in order for the cuts to be well-placed.
Tip: You may want to add a thin sheet of wood between the stock and your print bed to act as a buffer and prevent inadvertent damage to the print bed if the bit plunges through your stock.
Also be sure that the rotary tool won't come in contact with the clamps during the cut job. This might be disastrous.
Tip: The work area of your print bed will be slightly reduced due to the clearance of the rotary tool in relation to the printer frame. Mine suffered a 1-inch loss at the front of the bed. Adjust your design accordingly.
Step 13: Align Z-axis With Milling Stock
Using Repetier-Host, align the rotary tool with the middle of your milling stock (approximately).
Now slowly decrease the z-axis offset until the milling bit just touches the stock. You want this to be as precise as possible. Use the 0.1mm adjustment when you get close.
Tip: I got unexpected results when I immediately started the job after this step. Sometimes it worked well, sometimes it decided to adjust the z-axis depth. The best way to ensure expected results, I found, is to reset the printer control board after the alignment. To do this, click 'Disconnect' in Repetier-Host, pull the power cord, wait 5 seconds, re-seat the power cord, then click 'Connect' in Repetier-Host.
Step 14: Turn on the Rotary Tool
Yep, turn it on.
Step 15: Start the Job
Click the 'Run Job' button in Repetier-Host to start the cut job.
Tip: You might want to do a dry-run first, especially if this is your first attempt. Remove the rotary tool from the mount (turn it off first!) and run the job to see if everything moves like you expect it to.
Step 16: Go Find Something Else to Do
Lots of great TV show collections on Netflix that should keep you busy until the job finishes. I recommend 'Psych'.