Getting Started with a MonoPrice Select Mini 3D Printer

This post documents my entry into 3D printing via Linux.  Obviously, I'm no expert.  Rather, this is where I'm recording what I learn along the way.  The intent is, more or less, just sharing my study notes.  I needed a place to write things down... might as well share.  Nothing original here, no great insights, just organising information in a way I find useful so I can find it again.  That's all.

This is a living document... Still printing, and starting to figure out the Cura settings.  I've had to replace the stock bed masking tape and that's caused some adhesion problems.

I decided to get into 3D printing with a MonoPrice Select Mini 3D Printer.  Why?  Because it's cheap, because it's getting rave reviews, and because there seems to already be a great community building up around it.

Background Info:

The Tools:

The slicer: Cura  This is the part that takes the model and converts it to printer-specific gcode.
  • Install under linux via custom PPA:
    sudo add-apt-repository ppa:thopiekar/cura
  • Update and then sudo apt-get install cura
  • Add custom printer to Cura with settings from Tyler Gibson's blog (above).
  • Add your material(s) with specifications.
  • Apparently, it's possible to import settings from a demo gcode file supplied with the printer. (never bothered).  I've learned that it will only do this if the gcode was created by Cura and the versions are compatible.
  • Cura's interface is a bit odd and takes some figuring to get the profile info to stick.  It also updates daily via the PPA, or so it seems so far.  But, it seems to do well as a slicer.
The graphics gcode terminal: Pronterface.py from Printrun.  This is used to set some parameters, upload gcode files to the SD card via USB, and can directly print a gcode file as well.
  • Linux prep:
    sudo apt-get install python python-serial python-wxgtk3.0 python-tk git-core python-pyglet python-psutil python-numpy
  • Use GIT to get the scripted app:
    git clone https://github.com/kliment/Printrun.git
  • Running via commandline:  (seems to require admin privs)
    cd Printrun
    sudo ./pronterface.py
Inventor: The very expensive CAD to gcode option.  (I can use it at work)
  • Adding a 3D printer model involves going into the 3D Print environment, Other printers, and making some change to any existing printer (like setting it to default).  This creates an xml file under %appdata%\Autodesk\Inventor 2017\3DprinterDescriptions.xml.  Manually edit that file, duplicating a line, and setting a random GUID and other values as appropriate.
  • Download and install Print Studio (a free Autodesk add-on)
  • Restart
  • At that point, using the 3D Print environment and from there running Print Studio gives various options under the media type (advanced tab).  
  • Settings do not seem to be quite as fine as with Cura, but there are more options for editing supports.
Fusion 360:  The free for hobby/student CAD to gcode option.
  • Starting to use this for a variety of reasons.  I quite like it actually.  It uses the same Print Studio that Inventor does, and I've still not figured it out.  Still using Cura.

Things to do after unpacking the box:

  1. Update firmware (seems to be 2 halves).  Mine is 24.42, newer than the blogs say.
  2. Enable and configure the WIFI settings.  Not yet.
  3. Change PID setting for printhead temp regulation and, optionally, the table heater regulation.  Used Printrun's pronterface to set them to values in Tyler Gibson's blog.
  4. Apply table covering of choice.  (I've bought tape but it appears tablet screen glass protectors are now the rage).  Mine came with tape, so I left it.  Had to trim off the corners to get at the levelling screws.
  5. Level table and set print height.  Uses the same 4 screws.  Mine appears to be slightly crowned, so I set it for the middle.  Note that using pronterface to move the table around is way easier than the printer menu and jog wheel.
  6. Lots of reports of loose screws and connectors, so a once-over may be in order.  Didn't bother, feels nice, no odd noises.
  7. Set up the printer and filament in Cura, mostly as per Tyler Gibson's blog.
  8. Print the first demo (as specified in the manual) and adjust the print height accordingly.  Didn't bother, went straight to printing a token I made in TinkerCAD, exported as an STL, sliced with Cura to gcode, then loaded the gcode into pronterface and told it to print.  Came out well.  Once it was finished, I raised the bed temperature to 70deg and popped the trinket off.  Pictures in a bit.
So, all things considered, it works way easier and better than I had expected.  It was, as intended a very easy first print, but still... 

I think I'm going to have a lot of fun with this.

Second Print

Feeling lucky, I decided to print a bigger file that I downloaded.  A smartphone stand: (3.5 hr print)
  1. I uncompressed the ZIP.
  2. Loaded the STL into Cura.
  3. Rotated to print it on its side.
  4. Chose a "grid" fill for this print as it seemed more sensible.
  5. Cura said it was nearly a 3hr print.  Good enough as a real test.
  6. Saved the gcode file.
  7. Loaded the gcode file into Pronterface.
  8. Connected the printer (in menu - printer was already connected via USB)
  9. Chose SD from the bar above the model pane.
  10. Chose to Upload (note the status bar at the bottom that shows progress).
  11. When done, I used the printer menu to print it.
  12. I disconnected Pronterface during the print.  No untoward effect on the printer.
  13. The printer is not that noisy, though it gets annoying when everything else is quiet.  I actually find it very difficult to sleep with, even in the next room.  Just something about the non-regular whistling and lower tones mixing together... no more overnight printing for me.

More Prints

Going great.  I'm still printing at what I've found is "medium" resolution, with a layer height of 0.175. No issues with adhesion at the start, and all the prints are turning out better than I had expected. Settings as follows:
  • Bed temp of 50deg to print, cranking up to 60deg to separate when done.
  • Layer height of 0.175
  • Wall thickness set to .8 (x2) for some prints.  A bit thin but works. I'd say the finish is a little rougher though.
  • Speed is 50, with a wall speed of 25.
Starting to run out of the obvious test things to print so now it's a matter of getting into the editing side.  Oh, and I created superfine to superrough profiles in Cura to match the layer thicknesses as suggested in the wiki, with other settings that seem to match (just guessing at this point).  The 0.175 seems to be about middle.  Haven't tried these alternative settings yet.

My Cura Settings

I'm not recommending these... I've no idea what I'm doing yet, but these are the settings I'm playing with at the moment and needed to write them down.  This is as good a place as any.  Note that the settings includes a page that makes these settings visible.


  1. layer height = 0.0437
  2. initial layer height = 0.175
  3. line width (all) = 0.4
  4. Wall thickness = 0.4 (1 count)
  5. Top/bot thickness = 0.6
  6. Infill = 15%
  7. Pattern = defaulting to grid but may change depending on print
  8. Printing temp = 210  (pla)
  9. Printing temp initial layer = 215
  10. Build plate temp = 50
  11. Material diam = 1.75mm
  12. Material flow = 100%
  13. Enable retraction
  14. Print speed = 30mm/s
  15. Infill speed = 30mm/s
  16. Wall speed = 20mm/s
  17. Top/Bottom Speed = 15mm/s
  18. Travel speed = 100mm/s
  19. Initial Layer speed = 15mm/s
  20. Skirt/Brim Speed = 15mm/s
  21. Number of slow layers = 2
  22. Enable print cooling
  23. Support = default to off, model dependent
  24. Build plate adhesion = default to skirt, model dependent
  25. Skirt minimum length = 350mm
  26. Print sequence = all at once


  1. layer height = 0.0875
  2. initial layer height = 0.2188
  3. line width (all) = 0.4
  4. Wall thickness = 0.8 (2 count)
  5. Top/bot thickness = 0.8
  6. Infill = 20%
  7. Pattern = defaulting to grid but may change depending on print
  8. Printing temp = 210  (pla)
  9. Printing temp initial layer = 215
  10. Build plate temp = 50
  11. Material diam = 1.75mm
  12. Material flow = 100%
  13. Enable retraction
  14. Print speed = 40mm/s
  15. Infill speed = 40mm/s
  16. Wall speed = 20mm/s
  17. Top/Bottom Speed = 20mm/s
  18. Travel speed = 120mm/s
  19. Initial Layer speed = 20mm/s
  20. Skirt/Brim Speed = 20mm/s
  21. Number of slow layers = 2
  22. Equalize filament flow
  23. Enable print cooling
  24. Support = default to off, model dependent
  25. Build plate adhesion = default to skirt, model dependent
  26. Skirt minimum length = 350mm
  27. Print sequence = all at once


  1. layer height = 0.175
  2. initial layer height = 0.3
  3. line width (all) = 0.4
  4. Wall thickness = 1.2 (3 count)
  5. Top/bot thickness = 0.8
  6. Infill = 20%
  7. Pattern = defaulting to grid but may change depending on print
  8. Printing temp = 210  (pla)
  9. Printing temp initial layer = 215
  10. Build plate temp = 50
  11. Material diam = 1.75mm
  12. Material flow = 100%
  13. Enable retraction
  14. Print speed = 50mm/s
  15. Infill speed = 50mm/s
  16. Wall speed = 25mm/s
  17. Top/Bottom Speed = 25mm/s
  18. Travel speed = 120mm/s
  19. Initial Layer speed = 25mm/s
  20. Skirt/Brim Speed = 25mm/s
  21. Number of slow layers = 2
  22. Equalize filament flow
  23. Enable print cooling
  24. Support = default to off, model dependent
  25. Build plate adhesion = default to skirt, model dependent
  26. Skirt minimum length = 350mm
  27. Print sequence = all at once


  1. layer height = 0.2625
  2. initial layer height = 0.3
  3. line width (all) = 0.4
  4. Wall thickness = 1.2 (3 count)
  5. Top/bot thickness = 0.8
  6. Infill = 20%
  7. Pattern = defaulting to grid but may change depending on print
  8. Printing temp = 210  (pla)
  9. Printing temp initial layer = 215
  10. Build plate temp = 50
  11. Material diam = 1.75mm
  12. Material flow = 100%
  13. Enable retraction
  14. Print speed = 60mm/s
  15. Infill speed = 60mm/s
  16. Wall speed = 40mm/s
  17. Top/Bottom Speed = 30mm/s
  18. Travel speed = 120mm/s
  19. Initial Layer speed = 30mm/s
  20. Skirt/Brim Speed = 30mm/s
  21. Number of slow layers = 2
  22. Equalize filament flow
  23. Enable print cooling
  24. Support = default to off, model dependent
  25. Build plate adhesion = default to skirt, model dependent
  26. Skirt minimum length = 350mm
  27. Print sequence = all at once

Super Rough:

  1. layer height = 0.3063
  2. initial layer height = 0.3063
  3. line width (all) = 0.4
  4. Wall thickness = 1.2 (3 count)
  5. Top/bot thickness = 0.8
  6. Infill = 15%
  7. Pattern = defaulting to grid but may change depending on print
  8. Printing temp = 210  (pla)
  9. Printing temp initial layer = 215
  10. Build plate temp = 50
  11. Material diam = 1.75mm
  12. Material flow = 100%
  13. Enable retraction
  14. Print speed = 75mm/s
  15. Infill speed = 75mm/s
  16. Wall speed = 37.5mm/s
  17. Top/Bottom Speed = 37.5mm/s
  18. Travel speed = 120mm/s
  19. Initial Layer speed = 37.5mm/s
  20. Skirt/Brim Speed = 37.5mm/s
  21. Number of slow layers = 2
  22. Equalize filament flow = off
  23. Enable print cooling
  24. Support = default to off, model dependent
  25. Build plate adhesion = default to skirt, model dependent
  26. Skirt minimum length = 350mm
  27. Print sequence = all at once

More Printing

Had some failures, mostly with adhesion.  I was printing a model downloaded from ThingiVerse, a Dremel nose finger guard, and part of it kept breaking free during the print.  I first tried replacing the stock masking tape with some green painter's tape and that was worse.  After much futzing around with using brims instead of skirts, adding supports, and sanding the tape, I managed to get a print that stuck.  After that, I realised that the tape is way slipperier than regular masking tape.  I replaced the tape and had better luck, though still not as good as the factory tape.  I've got a couple of iPhone 5S tempered glass screen protectors on the way from China... which are supposed to be the solution to this problem.  Time will tell.... and, no.  I had no luck with the glass and went back to regular masking tape, sanded a bit, and now with glue stick before each print.  Seems to work well enough.  I may try the glass with glue stick at some point, but I'll also see if I can find any of that fabled "blue painters tape" everyone keeps mentioning.

Another print, a whistle (another ThingiVerse download) also failed due to adhesion.  This time it lifted up on one side from warping, but I let it print through.  That was a mistake as... well... it's a whistle and compressing the tube you blow in kind of changes things.  Live and learn.  Anyway, after my initial success, I've now got a small but growing collection of failed prints.  More successful ones as well... that ThingiVerse can be quite addictive and the printer has been working hard.  The first roll of filament is noticeably down so I've ordered 2 more PLA.  I think I'll avoid ABS until it's warm enough to put the printer outside while printing.

Some Pictures

Some downloaded models from Thingiverse and PinShape:

The surprisingly hard thing to print:

And, some stuff I drew in Inventor and uploaded to PinShape
Tomy Plarail track bits...

Current Stats:

Nearly 1KG of PLA printed, with about 17% of that as waste.  Yeah, I've been keeping all my failures, and supports, in a bag so I can weight it.  Just curious.

I've also ordered a bunch more filament, a variety of types so I can experiment, and I've now spent more on filament than I have on the printer.


Notes on Using Epoxy Primer

Never used this stuff, but the information is worth filing away for when the day comes.

Note that epoxy primer seems to be a great way to prevent rust on bare metal, something regular primer does not do (and I can confirm that).

Mostly an original quote, but with a little reformatting to make it easier to read.

From: Radkins from the Home Shop Machinist forum, here.

Epoxy primer is great stuff and the first thing I do to any body panel or repair is to spray it with epoxy primer, the stuff is expensive but it can't be beat for corrosion protection!

A couple of tips for using this type of primer:

  1. It needs a rather rough surface to adhere properly. I scuff the bare metal with 180 grit paper and then apply two coats allowing it to become dry to touch before applying the second coat. If a finish is not applied within a day or so, this varies with brands, it will need to be scuffed with sandpaper and another coat applied before any topcoating is applied including conventional primers.
  2. If left for any length of time then it should be topcoated with another primer such as lacquer or one of the polyester filler primers. No scuffing needed if coated within a couple of hours. If left for weeks, never mind years, it becomes EXTREMELY hard making it very difficult to sand and causes difficulty in getting topcoats to adhere. If something like even simple lacquer primer is applied around two hours after the original application it will adhere quite well and is then easily prepped for painting even after being left for long periods of time, old uncoated epoxy primer however is a absolute nightmare to properly prep for finish painting!

Oh, and he follows up with this:  (something else I learned today).

NO, DO NOT SANDBLAST BODY SHEETMETAL!!!!! A sandblaster will warp most sheetmetal body parts beyond any hope of repair! I don't mean "Aw s#!* now I am going to have to fix that", I mean toss it in the scrap and buy new parts kind of ruined. Some parts that are stiff and well supported like door posts and some firewalls may be blasted ok but fenders, hoods, trunk lids, etc will be instantly distorted way beyond any repair. Those sand particles act like millions of tiny peening hammers and will distort the surface of the metal due to the uneven stretching (and no, heat has absolutely nothing to do with it despite the common misconception so keeping the parts cool is futile!). While it can and has been done successfully the blast operator has to REALLY know his stuff and even then it's highly risky.


Turning a Radius

A neat way to mill a radius on something with a through hole.  Just put a pin in the hole, rest the pin on the top of the vice jaw, and then rotate, clamp, and cut repeatedly.


Enduro Computer Project

WAIT!  Before you start reading and get disappointed, this is my research blog.  At this point, there is no enduro computer, it's not finished.  If fact, I'm still roughing out the design.  It may never get finished.  And, it's low priority for me.  I'm starting this now because I'm having to work through some technical issues and maybe somebody else might find my notes useful.  That's all.

Current status: Pre-Alpha, just planning at this point.

The plan: To set up a 2.4" TFT LCD display shield on an Arduino Uno with a Hall Effect sensor and some code and mount it on the handlebar of my Dirtbike for enduro racing.  Total cost should be in the $20 range (and that's probably overestimating).

So, I picked up a 2.4" TFT-LCD touch-screen from Ebay.  Absurdly cheap, in the $5 range.  It's an Arduino shield for an Uno, and it leaves enough pins for me to run a hall effect sensor, which I'll just salvage from a bicycle speedo (another stupid-cheap Ebay purchase).

Problem 1: Drivers for the TFT-LCD.  It appears there are a great many variants of these shields available, and very few come with any kind of documentation or libraries.  Most happen to have "www.mcufriend.com" printed on the PCB, so that means very little.  That website is in Chinese.

Most of the available drivers I tried for this just left a white screen, though the serial output seemed to work.  I did find one, SWTFT, that mostly works.  I can run the tftpaint example, except there is a white bar down the side.  Running the graphicstest example show that it is trying to write under that white bar, and it is trying to write with a backwards font.

Solution 1: The key is to identify which control chip you have and then get matching drivers.  Identify your chip with a utility found here.  Open the Serial Monitor in the Arduino IDE to see the information.

Solution 1a: My TFT-LCD shield uses the '4535' chip.  I found libraries for it at:  Cee'z Blog.  If you use his libraries then buy him a cup of Coffee, I did.  It's worth it.  Everything worked great with Cee'z libraries and example sketches, except the touchscreen was backwards.  No problem though... just run his example calibration sketch and copy the resulting numbers into the config section of the sketch you want to run.  Yes, the "min's" end up being bigger than the "max's" but everything's good after that.

The 'calculator' utility makes for a great example to work from.  Next thing is to figure out how I want the main display to look, and maybe a few sub-displays.

Problem 2:  Using the shield on an Arduino Uno seems to use all the pins.  I've read that A2 is not used, but my shield has a label for that pin (LCD_RS) and not using that pin (bending it out of the way... hey, it's a $5 shield) leaves a white screen.  The Ebay seller states that "you can use digital pins 2, 3 and analog 4 and 5. Pin 12 is available if not using the micro." Some of those pins are labelled. It will not work with D2 and D3 bent out of contact, so the seller's information is not correct either.

Solution 2: The D0/D1 (RX/TX) pins are not labelled on the shield, bending them out of the way left the display still working fine, along with the touch screen, but I've not yet determined if they're needed for the SDcard.  A5 (not labelled) does not seem to be used either.  A4 is labelled as the LCD_RST (reset?) and while it will work bent out of the way, I'm not sure if the library is writing to it or not.  Of course, switching to a MEGA, instead of an Uno, gives a lot of useful pins... but also left a white screen.

Solution 2a:  Using the MEGA is actually fairly simple.  Just edit LGDP4535.cpp (in Cee'z library), commenting out the Uno line and uncommenting the MEGA line.  '//' means this is a comment.
This says to use a MEGA instead:
#include "mega_24_shield.h"
//#include "uno_24_shield.h"
Don't forget to switch back if you want to use an Uno.

Background:  Enduros, for those that don't know, are races where the object is to travel at a set average speed rather than as fast as you can.  The trick to winning them is, however, not just riding at that speed but rather as fast as you can at the start of a section, then guessing how far to the next check, and then calculating what time it should be when you get there.  Parts of the section are typically very difficult to maintain the correct speed while other parts are easy.  Thus, there is a lot of guesswork involved, and math at the same time.  It's pretty easy to figure out how far you should have gone in 15 minutes if the speed is 20km/h:  20km/h * 1/4h = 5km.  Figuring that out for a speed of 17km/h over 10 minutes: 17km * 1/6h... not so easy when you're crashing through the bush and scrabbling over rocks and roots at speed.  Yeah, people actually pay to do that.  Crazy people anyway.  Even crazier ones pay big money for a handlebar mounted computer to do the math for them.  Then, there's cheap and crazy people like me that set out to build their own.

The Interface:  There are a lot of different ways to present the needed information but what I think I want for the main display is simply +/-Minutes, as big as I can make them.  Negative minutes means I'm ahead of where I should be and have some slack.  Positive minutes means I need to run WFO and catch up.  It will have 2 on-screen buttons:  Error and Check.  'Error' means I've missed a turn, happens a lot in enduros, and need to subtract some distance while I get back to the marked trail.  'Check' marks the clock, displays my results, resets the minutes without resetting the seconds, and lets me set the speed for the next section.

More later...


Turning the End of a Big Bar

Say you need to turn the end of a bar that is too big to go through the lathe headstock and too long to fit between centers (or the center-rest if you have one)...

Here are some answers:

Arcane suggests:  If you have a milling vise setup that attaches to the cross slide for your lathe and a boring head with a MT3 taper, clamp the shaft in the vise, center it on the spindle and then use the boring head to reduce the end.

Dan suggests:  There was someone who did an interesting trick. They welded a smaller piece to the end and chucked it up. Supported the far end in a steady rest. Then they turned down the original bar and parted it. Rotate and repeat.

Better yet, just start with stock longer than required an part off the chucked bit.

My idea, specific to my 3in1 machine:
Using something of suitable height, like the angle table (level, just for the height), make a vertical clamp that hangs outboard the lathe.  Swing the head over to match and lock down, then use the X/Y to center.  Once centered, use the boring head as above, with the cutter pointing inward.  This would give me about 4' of length, and it would be easier to set up than removing the tailstock to use the lathe spindle.


Making SS Springs

Interesting post on HSM by Dorn:

Using annealed stainless steel wire (aka safety wire) that is not springy in this state, it can be work-hardened by stretching.  Once work-hardened, it can be wound into a spring.

Rich added:

I also use a "Drawing" technique when I want smaller wire for a model or repair application.  I open my vise about 4 or 5 inches and then wrap the wire around the jaws ( 2-3 wraps ).  Now I open the jaws more and draw the wire down to a smaller size with out having the use my legs or arms, only the vise leadscrew.

Never tried it... but it's something to keep in mind for when that someday comes along.


My Linux for Kids Notes

This is not a "how to" guide, a definitive list, nor even a recommendation for what to do for your kid. It's simply my notes. I needed to keep them somewhere, I needed a place where I could update them easily, and I wanted it "in the cloud" so I could always find it. Oddly enough, a blog is actually a good place to do this. I don't mind sharing my notes and if you find them useful... good for you. If you have some other recommendations, feel free to comment.

I'll be updating this as I go...

The list of linux apps I install, suitable for cut and paste into a sudo apt-get install command for a debian-based linux distro, because that's how I do it:

sudo apt-get install gcompris tuxpaint tuxpaint-config tuxmath tuxtype ktuberling stopmotion playonlinux extremetuxracer neverputt pingus funnyboat pysiogame stellarium stellarium-data supertuxkart sugar connectagram

Via playonlinux, install:
  1. 3d train studio - downloads free version via script. Pretty awesome for kids that like trains.
    - 20 trains (running) is a fun one to download. 
What each app is:
  1. gcompris - a big bundle of kids games, puzzles, and educational activities. Highly recommended. 
  2. tuxpaint - awesome painting program with lots of stamps. The config allows various settings. 
  3. tuxmath - still seeing if my kid likes it. 
  4. tuxtype - my kid loves this typing tutor, from about 1yr old. Seriously. 
  5. ktuberling - Mr Potato Head goes cyberspace. 
  6. stopmotion - makes stopmotion - still testing this one 
  7. playonlinux - scripts to install many Windows apps under wine. Most, but not all, require the CD 
  8. extremetuxtracer - 3D racing game, with Tux sliding down a ski slope. 
  9. neverputt - a minigolf game 
  10. pingus - a funny game for kids that like penguins, and what kid doesn't? 
  11. funnyboat - great kids game. 
  12. pysiogame - another educational game suite like gcompris, slightly more advanced. 
  13. stellarium - study the planets and stars. 
  14. supertuxkart - 3D racing game in go-karts. 
  15. sugar - the One Laptop Per Child OS.  Still experimenting.
  16. connectagram - word de-scramble game.

Other stuff to remember:
* Celestia - no current install candidate.


Flexture Clamps

Idea from a Dan Gelbart video (Building Prototypes, part 13):

If you want to clamp something, cut a slot near it, then drill in the middle of the slot, then tap the hole for a pipe thread.  When threading in a plug, the taper will expand the slot, which will move the metal to clamp the part.


New Directions

So, I've decided to start a new experiment.  I like reading about workshop tips and tricks, 'kinks' as they used to be called, and I've read a lot of them.  So many, in fact, that I don't remember anywhere near half... seems the good ideas spill out faster than I put them in these days.  I'm forgetting so many it's starting to bother me.  Thus, I've decided to write them down. 

After some consideration I came up with a basic criteria list: I want the ideas to be easy to enter, I want them accessible from any web browser, I want them to be backed up to the cloud, and want to be able to put in tags for easy searching.  From that, and considering that I don't really care if anyone else makes use of them, a blog seems about the right tool.

Thus, hopefully as long as I can keep learning, I'm going to be putting tips and tricks in this blog.  They generally aren't mine, and I'll try to cite where I can.  If anyone find them useful, so much the better.  I don't mind sharing my aggregation efforts.