Getting started with the Robo3D printer and OctoPrint


We've been thinking about getting into 3D printing here at the Hammel household.  I'm looking at building small enclosures for the various embedded boards I work on.  My wife is looking at creating components for the designs she works on for Vindicated Vinyl, her small business.  After doing a bit of online research I purchased a Robo3D printer from Best Buy. They were selling it for $699 but the official website was having a sale at $599, so Best Buy did a price match. Very cool.   I chose this printer because of its price, its support for a variety of filaments and the size of its bed.  Despite the fact that it's sold as an off-the-shelf solution to 3D printing I had no expectations I could plug it in, turn it on and print.  And I was right. I thought I'd share my earlier experiences with getting the printer set up and usable by both of us.  Since both my wife and I will be using it I needed to set it up so it could be easily shared over a network.

Unpacking

The printer comes ready to use, for the most part.  There is no assembly required.  Opening the box you find a styrofoam hat with some cables and tools.  The styrofoam was a very tight fit in the box.  To get the printer out I had to flip the box over and let the whole thing slide out. There is also an SD card taped into a slot in the styrofoam.

Upside down after sliding out of the box, note the square styrofoam inserts that must be removed after righting the machine.

Inside the packaging you'll find a manual, a quick setup guide and some other paperwork.  The first thing I did was register the printer via a text message, as per the instructions in the paperwork.  I would have preferred to do it via my computer since my phone sucks.  Don't all phones suck?  Anyway, all went well with the registration.  So I moved on to unpacking the printer. 

The printer has a big styrofoam hat and footer so those come off first.  Then there are two large square styrofoam inserts inside the print area, plus two small mostly flat styrofoam inserts under the print bed.  All of this comes out easily.  There are two additional orange plastic pieces that must also be removed.  These are labeled and easy to identify.  These are not as easy to remove and require a little careful prying.  Be careful not to yank on any wiring while doing this.

The tools provided include: a glue stick, some plastic pads for the corners of the printer, a pair of tweezers, a small screwdriver and some lubricant in a plastic tube. There is also a large flat scraping blade.

There is also a set of tools in a plastic container.  I didn't use any of the tools initially.  I tried some of the glue stick but found it didn't matter much in my early testing.  The scraping tools was very necessary as many of my initial trials required scraping off bad prints from the printer bed.

The packaging includes a power cable and a USB cable.  It also includes a small spool of blue PLA.  Note that the temperature setting for this PLA is printed on a label on the side of the spool.

The SD Card

Before attaching cables from the printer to a computer or power I thought it best to read the manual.  The instructions point you to the SD card which contains a video explaining the setup.  This video plays on linux with VLC although it seemed to drop or corrupt a few frames.  That was weird, but didn't really bother me.

The video suggests you received a thumb drive and micro SD card.  I got an SD card w/ micro SD insert.  Not a big deal, but it was the first of a number of discrepancies.  The biggest one relates to setting up the voltage for the printer.  On the back there is a switch to allow choosing a voltage level.  The video says the settings are either 230 volts or 115 volts.  The physical switch is labeled 220 and 110.  The default printed on paper covering the plug on the printer says the machine has been set to 230.  The actual default was 110.  Try not to let any of this confuse you.  If you're in the US, set it to 110 or 115, which ever is labeled on the actual switch. 

Most of the video talks about using the provided MatterControl software.  However, that isn't available (without recompiling a bunch on non-C code which I didn't feel like diving into unless required) for my fedora platform so I skipped the rest of the video.  It may have helped to watch it just to note that tasks they performed with the software.  I probably needed to do the same tasks some other way, as you'll see later.

Don't get confused with the voltage. In the US, it's 110 or 115, depending on what your Robo3D actually says on the switch.

Physical Setup

I set the printer on a work table I built from a modified Ana White design.  The table isn't quit flat and there are no feet adjustments on the printer to level it.  The printer would wobble on the table if I manually rocked it. I thought about leveling with folded paper under one corner, the Maker way.  But I actually forgot this step and when I did my first full print I noticed that the printer didn't rock as the extruder and bed were moved.  So leveling the printer itself might not be that important.  However, see my discussion on the level the printer bed a little later.

The printer bed moves front to back (the Y axis, I believe) and the extruder moves left/right and up/down.  The bed needs about 25″ back to front, including space for the bed to move fully back and fully front.

The printer connects to a computer using a USB cable.  There is an SD card option but I didn't try it because the goal was to share the printer with my wife.  The USB connection on the printer is on the right side near the front.  Note that the USB cable, which is about 4′ 10″ long, is probably too short if your computer is placed to the left of the printer.  You may need a USB extension in that case.

A power switch is located in the back.  I found it easier to use, and to see the small opening where the filament is threaded, if the printer was turned with the back facing me.  That may affect how you connect the printer to the computer. 

Of course the whole point of a 3D printer is to stack plastic until it looks like something you wanted.  To do that you need to feed a filament of plastic into an extruder which melts the filament and stacks it on the printer bed.  The filament is threaded through a hole at the top of the extruder.  In the Robo3D the feed hole is small and encased by a small door with springs on screws.  While it's easy to feed into this hole the filament has to also be fed through a hole hidden inside that is apparently smaller.  It's very difficult to feed through both holes.  After some failed prints I discovered the best way to feed the filament is to remove the two screws and springs (careful – the pop off from the springs) and remove the door.  Then manually push the filament through the smaller, now visible hole till melted filament comes out the extruder (be sure the extruder has been heated to 180C before doing this – see the section on software).  Then replace the door, screws and spring.  In my opinion this is only real drawback to this printer's design.  It's just not easy to see or access the feed hole for the filament.

Note that the physical setup I used included connecting the printer to a Raspberry Pi.  More on that in the Software section.

Software

This is where things grind to a halt initially.  At least if you're a Linux user.  Follow along, though.  In the end it's not that hard once you have the information you really need.  Much of the work I'm going to describe might be easier if you connect the printer directly to your Windows or Mac boxes and use the provided MatterControl software.  But I'm a Linux guy and the world doesn't try to make things easy for us.  That's why we're so smart.

The Robo3D wants to run MatterControl for Mac.  Mattercontrol is a slicer, which is what converts a 3D model (stl) into a format (g-code) that can be fed to the printer.  The 3D printing stack is a little confusing – no wonder some people have problems getting started.  A good summary of the software stack can be found on the Robo 3D forums.  MatterControl can run on Linux.  However you need to compile from source for Fedora.  This requires Mono 4.4.  Fedora 22, which is what I'm using, is at 2.10.  The overhead to get all that working seemed hardly worth the effort if I could find something a little more off-the-shelf.

There are other slicer software solutions out there, such as Cura.  Support for using Cura directly with Robo3D is coming, apparently.  This allows Cura to not just slice but feed the g-code to the printer and track its progress.  But that setup would isolate the printer to either my wife's Mac or my Linux box and make it less friendly to share.  Fortunately you can use Cura on your desktop, Linux or Mac, separate from the printer.  This allows you to model and slice on your desktop and just feed the g-code output to the printer through some other method.  Since my solution will be web-based to share the printer with my wife this is the optimal workflow.

The Robo3D printer has been used with Cura to print custom pieces for DragonLock, a 3D printed dungeon gaming terrain building system.  Given the photos I saw I thought using Cura would be a better option for both my wife and myself.

In the end I opted for a version of OctoPrint running on a Raspberry Pi, known as OctoPi.  OctoPrint is a web-based solution for managing 3D print jobs, including watching real-time progress.  You upload the g-code file to OctoPrint and then print to your connected and configured printer.  OctoPi is an image you copy to an SD card and then boot on a Raspberry Pi that runs an instance of OctoPrint.  Because of my PiBox project I have a few extra Pi's lying around.

OctoPrint can be used to perform slicing of your 3D model using a variety of slicer software.  In fact the default slicer is Cura.  However, don't try to use the OctoPi to do your slicing.  It will be slow and probably can't handle sequential requests very well.  You're better off doing slicing with Cura on your desktop.  There are ready-made install packages of Cura for Windows, Mac and Debian-based Linux systems.  Fedora, which is what I use, requires a little extra work.

Cura for Linux is only available in deb packaging, which is intended for use on Debian-based Linux distributions such as ubuntu.  Fortunately the Cura .deb file can be converted using alien (these instructions work for Fedora 22 too). 

After installing the generated rpm file on Fedora 22 (at least) you need to remove the libstdc++ installed by Cura.  Cura doesn't list Robo3D as a supported printer so you add it as a custom printer.  It will prompt for Machine Settings, of which there are several variations I found online.

Configuration

The OctoPi setup is based in some part on the Raspbian distribution built for the Raspberry Pi.  The instructions for it are brief and mostly complete.  However, I had to manually edit /etc/network/interfaces to mimic like pibox or it wouldn't work. They have some clever naming schemes in their boot up that didn't work for some reason. Where they had the following

allow-hotplug wlan1
iface wlan1-raspbian inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

I used the standard interface naming scheme

auto wlan0
iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

I also used a simplistic setup for wpa_supplicant.conf

# country=US
# ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
# update_config=1
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1

network={
  ssid="Your SSID Here"
  scan_ssid=1
  proto=WPA2
  key_mgmt=WPA-PSK
  psk="Your Password here"
  pairwise=TKIP
  group=TKIP
}

Using standard formats for the interfaces file worked better, probably because I missed a step in setting up the configuration file to set the interface naming (or the OctoPi team did).

Setting the Z-offset

My first set of prints failed completely.  I kept getting a loud click.  After some time I tried to force the filament through manually and found it to be stuck.  The filament would not go through and would not pull out.   I turned up the heat on the hot end, removed the screws on the filament feed intake and manually forced the filament through to clear any clog.  Then I was able to pull it out manually.  I clipped off the end and manually fed it through again.  I adjusted the screws to be less tight than before.  This cleared the filament path but didn't produce any prints. 

Then I got on the ShoutBox section of the Robo3D site and someone called WheresWaldo suggested adjusting the Z-offset.  There is a unique command (M565) to do this so you can set this as the default for all your prints.

I experimented with different settings, adjusting the value and starting a print run, until I got to a Z-offset of 0.75 that seemed to work.  And by work I mean print on the bed in smooth lines without globs of filament getting stuck to the extruder. But the print was only working on one side of the bed.  The other side was not always printing.  This made me think the bed was not leveled.  A little more googling and I found the real solution to the Z-offset and bed leveling problem.

The following typed in the Terminal tab of OctoPrint should level the bed.

  1. Probe the bed: G28.  This tells you what the Z-Offset should be.  Just enter the command in the terminal window and watch the output for the Z offset after the extruder stops moving.  In my case it was -0.73.
  2. Set and save the Z-offset:  M565 Z-0.73  This will store the Z offset in flash so you never need to set it again.
  3. Level the bed: G29  This probes 9 different points on the bed based on your stored Z-offset so that the bed is leveled automatically as the print is running.

These three are manual steps required when you first power on the printer.  Although the Z-offset should be stored and reused on power up it doesn't appear that it has any effect without doing all three steps each time.  You can tell this is the case if, as you start a print, you hear a loud click.  That click is the extruder trying to feed the filament but failing because there isn't enough clearance between the tip and the bed.

OctoPrint

The Robo3D should be configured for use with the OctoPrint interface. The Settings->Serial Connection fields should be set to /dev/ttyACM0 and baud rate of 250000 for the OctoPi.  A printer profile should be created to set the size of the print area.  The X, Y and Z volumes should be set, respectively, to

X: 228

Y: 254

Z: 228

And set the option for Heated Bed.

This requires  : watching the progress in the g-code viewer.  Restarting a print should start by reloading the g-code viewer.  If the print starts but doesn't set the desired temperatures then do it manually before you start the print.  I use 200C for the hot end working with the stock blue PLA provided in the packaging and 60C for the bed.

Create a printer profile to tell OctoPi the print area of the Robo3D.

Set the serial connection for the OctoPi to talk to the Robo3D.

First Print Attempts

My initial attempts at printing were all cancelled quickly because it became apparent the filament wasn't moving.  Each attempt had to be scraped off the bed and restarted.  This was fixed with the bed leveling process.  Once I started my real first print I began to understand something that had confused me originally.

See the ghost layer? You peel it off when you're done printing. But this should have a solid surface, not look like a sponge.

The Robo3D (or perhaps the slicing program) lays down a ghost layer, almost like a halo, on the first layer it prints.  It's very thin and larger than the base of my print object.  Once I let the printing continue to higher layers it became clear that this was just a base of some kind.  I'm not clear yet why this is there – possibly to make removing the print easier – but don't be fooled if you're anxiously watching the start of the print and see this ghost layer get laid out.  Let it run for a bit and the object should start taking shape.

When the print finished the bed moved all the way to the back, which is good considering that's the side facing me.  It made it easier to pull the object from the bed with the scraper.  I pulled the print off and examined it.  It was the right shape but a fairly unimpressive print with many holes and no solid surface.  It looked more like a sponge than the bookmark it was supposed to be.  Note that the model for this was provided as one of four models available download after registration from the Robo3D manufacturer .

Having never done this previously myself (although I've had a model printed for me at the local library) I concluded that the problem was with the way I sliced the model.  I checked my Cura setup and found it to be on the Light infill setting.  There are for infill settings: hollow, light, dense and solid.  So I switched to solid and tried again.  The result was actually worse. 

So while I'm now able to print I have yet to figure out how to print well.  I imagine this is akin to learning the difference between printing plain text and printing in CMYK with gimp.  I'll need to check on the Robo3D forums or maybe a local Maker user group to get some help. 

One other thing:  a day or so passed between the first print and the second.  When preparing the second print I did everything I've specified earlier and started the print.  The extruder started to position itself and printed a small part of the ghost layer and then … POP!  The filament flew out of the feed at the top of the extruder.  It had snapped off.  I had to disassemble the feed (those two screws again) to find the part stuck in the extruder.  I pulled on it by hand and it broke again leaving a smaller piece to grab.  I had the extruder heated to 200C and then used a pair of needle nose pliers to carefully pull the remainder out.  It took awhile, but I think once it got hot enough and could stretch a little it finally came out.  This is not a good sign.  Either the extruder/feeder design is flawed or the filament is bad.  I got both from Robo3D.  I hope they can fix at least one of those problems.

The snapped filament with the feeder screws removed.

The filament pulled from the feeder after it melted enough to get it out.

The second print, which should have been better than the first but was actually worse.

Tweaks

The USB camera support on OctoPi is not working at the moment.  Neither is the automatic update.  I may need to reload that software to the SD card, setup and try again.  Perhaps this is related to the bad prints, but somehow I don't think so.

Some other suggestions I found online include an additional fan on the opposite side of the extruder and a LCD interface.  Others have gone so far as to integrate the OctoPi directly into the printer with a single power switch.  I have too many other projects on my plate to dive into those now, not the least of which is getting this thing to make a decent print.  But let me know if you try them.


Update 2020

Three years later and I've finally returned to 3D printing.  I'm looking to see if I can print those face shields (eg Prusa design) needed by doctors and nurses to treat Covid-19.  Before I can do that I need to make the printer actually work.  And I haven't touched this printer since I wrote this article the first time.

A proper print from Robo3D.

After refreshing my memory on how to get started (thanks to this article, no less) I upgraded to Cura 3.6 (latest available for Fedora 29) and OctoPrint 1.4.0, which I'm running directly on my desktop now (which has 32 cores and 32G memory, so why not?).  Everything came up quickly and I was able to try printing again rather quickly but every print was worse than the first time.  I was still getting that clicking sound and the extruder would clog up.  I tried printing at higher temperatures, seasoning the nozzle, and clearing the extruder path.  Nothing seemed to help.

Then I took a look at the nozzle head.  It was sitting so close to the bed that even a piece of paper wouldn't fit between them.  I had set the Z-offset as described in this document but that didn't seem to change anything.  Turns out the problem was not just setting the firmware but also setting Cura's Z-offset by adding the Z-offset plugin.  This is required because Cura was setting the Z-offset itself, irrespective of what I set in the firmware, and I needed to override it.  The plugin can be installed directly from Cura.  In Cura 3.6 and later (maybe in earlier versions) there is a Marketplace menu option.  Look under there for the Featured Plugins and go to the end of the alphabetically sorted list.  After installation you need to click on the Build Adhesion Plate setting where you'll find an options box to enable the Z-offset.  Once enabled you will find a new field under Build Adhesion Plate for setting the Z-offset.

More importantly, the Z-offset set in Cura needs to be different than my original experiments.  After many experiments of cancelled prints, I found the setting needed to be set to Z-1.0  which causes Cura to add the following line to the gcode.

G0 F7200 X93.014 Y71.925 Z1.18 ;adjusted by z offset

So it wants to set it to 0.18, but then adds 1.0 to it from my Z-offset setting.  This is the setting I put in the firmware to, though it's not clear if -1.0 or -1.8 should be used.  Since MatterControl still doesn't work with my version of Linux (and nothing on earth will get me to use Ubuntu) I'll just use Cura and always set the Z-offset there so it embeds in the gcode file. 

The result is I now have a working configuration to print the bookmarker model.  Notice the raft printed around the bookmark.  I'm not sure where that's coming from – I think Cura may add it.  For this print, which has some flimsy pieces where the bookmarker attaches to the book pages, this is helpful for pulling the print from the bed.  You just have to cut all that off later.   Seems like a lot of waste, so I'll need to see if I can reduce the size of the raft somehow.

But at least the prints are working now.

Update 2020.2

The excess printing is called a raft and is a configuration item in Cura, under the Build Plate Adhesion setting as Build Plate Adhesion Type.  The raft setting for this type prints extra support area for models that need it.  But using the skirt setting, instead of raft, just prints a couple of circles around the outside edge of the model.  This is done to prime the extruder before starting to print. Those extra circles are on the build plate but are not attached to the model.

The result is much better, at least for this model, as you can see in this picture.

Bookmark printed using skirt setting in Cura.

Bookmark printed using the skirt build adhesion type setting in Cura.

Update 2020.3

I'm finally getting the hang of the printer.  Every print needs to be setup properly.  The steps I have to take are as follows.  These are all done through Octoprint.

  1. Raise the print head.  I click on the Raise button in the Control tab twice.
  2. Heat the head to 240 C.
  3. Extrude until I see a clean stream of filament.  This flushes any dried blobs from the head.
  4. Home the print head X/Y.
  5. Remove the filament flush and clean the print plate.  Scrape any previous glue from the plate and wipe with a soft cloth, like a eye-glass lens cloth.  Use Windex if necessary.  Doesn't have to be perfectly clean, but remove any large lumps that might get in the way of the print head.
  6. Rub Elmers Washable School Glue Stick over the area of the print plate where the print will go.  This is a bit of a guessing game for odd shaped prints.
  7. Home the print head Z.
  8. Use the Terminal tab to type: G28, M565 Z-0, G29 and wait for the print head to stop moving.  In some cases it helps to change Z-0 to Z-0.1, like when you find the print head is too close to the surface while it is extruding.
  9. Home the print head X/Y again.
  10. Heat the bed to 60 C.

Now I'm ready to print.  It's important that the model being printed, in the gcode, have the Z-offset properly set as this method relies on the model setting the Z-offset and NOT Octoprint!  Note that I'm using Cura to slice my models and it has presets for the Robo3D R1+.  Also note that it should be set to 210 C to print.  That's the optimal print temperature for PLA that came with the printer.  Other filaments will have different temperatures but you can set this is Cura for each model you slice.

Finally, I thought I'd post an image showing the selection of filaments supported by the Robo3D R1+, which was taken from amazon via Robo3D.  This is just for reference when looking for compatible filaments.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.