dual-spool coolness, etc

Anticipating a dual-extruder upgrade soon for the Robo C2 printer—imagine printing in two colors for the same part—I’ve designed and printed a dual-spool holder for those two filaments. It’s an upgrade for the printer and works much better than the original holder.

SideView-C2andHolder

The original spool holder stuck out of that rectangular hole in the back of the printer, sometimes falling out during the middle of a print job. Aesthetically-pleasing but impractical, I’ve now replaced the original.

DSC_0062

I’ve created step-by-step instructions for creating two versions: one for the full kilogram rolls and one for the half-kilogram variety.

Repository

Stability

Another design challenge with the Robo C2 printer is the way that the print bed is cantilevered from the back of the printer. It’s a bit like a diving board and similarly wobbles at its front-most extremity as you’d expect. This isn’t really optimal for 3D printing because it results in poor quality with taller parts and especially those which are oriented toward the front of the printer.

robo

CantileverStabilityPlate

I’ve therefore designed a cantilevered stability plate to afix to the bottom of the print bed itself which should provide some firmness in this dimension. Eight M3 type aluminum bolts are the only thing needed other than this part.

Repository

Advertisements

da plane

Obviously, I watched too much television growing up. Every week on Fantasy Island, Hervé Villachaize’s character would point to the sky and make this exclamation.

da-plane

In a 3D printer, it’s really important to start printing on a known, flat plane. And yet, many print beds aren’t made of something rigid like glass so bigger parts end up shaped like the print bed itself. Even small deviations can mess up a print. It’s a problem to be solved, actually.

OctoPrint

The software that’s running on my Robo C2 printer is a fork of the popular OctoPrint open-source software. What’s cool about this software is that it will allow you to write plugins to adjust the way it works.

GCODE

The language the printer listens to during the print job is called GCODE. Think of it as a list of common instructions that almost all 3D printers use now.

Autoleveling

One of the GCODE commands in question is G29 and this tells the printer to run through an autoleveling routine. In some cases, the printer’s extruder will actually touch the print bed in several locations. In others, the extruder assembly will use a light plus a photoresistor to hover above the bed and to gauge its height above it. Using either method, the printer can make a reasonable “map” of the print bed and mathematically create a virtual plane to represent it. If the print bed is a little lower on one side, this routine should allow the printer to compensate for that.

Only…, it doesn’t really work that great, to be honest. Someone deserves a round of applause for trying to fix the problem but honestly, a manual approach is possibly the better way to go here.

Although these printers have a built-in autoleveling feature, manually leveling the print bed is preferred by those who are more advanced at 3D printing.

The Problem

I’m currently now working to manually adjust my print bed so that it is perfectly level and an exact height from the extruder. In fact, I have two replaceable print beds for the same printer so both of them need to be perfectly level and exactly the same height all around. To complicate matters, I anticipate designing and creating a third print bed for this which is heated. And that one should also be perfectly level and the same height as the others. The final goal will be to easily and quickly swap print beds without the task of fussing with any settings.

So now, having created a number of GCODE files over the last four months, I really don’t feel like editing them to remove that unnecessary G29 command. Once you’ve manually leveled everything, an autolevel routine is not only overkill but it can cause problems to the print quality. I needed a way of programmatically switching off the command when seen.

The Solution

I’ve created an OctoPrint plugin which helps to solve this problem. Assuming that I no longer need autoleveling at the start of each job, the plugin tells the printer basically to ignore any G29 commands. I now don’t have to edit countless GCODE files or worry if someone sends me a file—the printer will dutifully ignore this command.

Github:  Toggle Autolevel plugin

 

so many operating systems, so little time

Sometimes you need to do many things with the same hardware. Say, for example, you might need both Windows 10 and a Linux-type of operating system on the same computer. Here are some of your options for this.

You might say, “why would I want that?” There are times when you want to try out something new. You might need to test software compatibility with something you don’t have currently. You might purchase some new software or a printer which isn’t compatible with your current setup. Or, like me, you might be endlessly curious about the possibilities. You might want to create a smartphone app and need to see how that looks on a variety of phones.

Boot from a “Live” media

In this case, you have Ubuntu on a CD or on a USB thumb drive. You boot to this media and select the live option from the menu (“Try Ubuntu without installing”). You then get a Desktop experience running Ubuntu (Linux) on your existing hardware and you don’t even have to install it in the classical sense. Once you shutdown this system and remove the media, nothing whatsoever has changed on your original hard drive.

TryUbuntu

I’ve used both methods (CD and USB) and will attest that the latter will boot up faster than anything you’ve seen before, I’d guess.

Pros:

  • It’s very fast to boot this way from the USB drive.
  • You can try another operating system without making any changes whatsoever to your existing computer.
  • It makes short work of hacking a Windows-based computer if you don’t know the password(s) and accessing the files on its partitions.
  • It seems to be wonderfully compatible with a variety of computers and laptops without fussing with drivers.
  • Each session takes advantage of all the available RAM.

Cons:

  • Unless you change the defaults, any changes to your Desktop and configuration are lost upon restarting this session.

Set up two partitions and select one upon startup

In this case, you shrink the size of your existing hard drive’s partition to make room for another operating system.  You then install the new operating system to this second partition.

Upon restarting the computer, you then select which partition (operating system) you’d prefer.

GRUB

This technique is often called “dual booting”.

Pros:

  • The settings you change will be saved from one session to the next.
  • In many cases, you can access files on the other partition(s) if you know where to look.
  • You can take advantage of fast hardware like that on an Apple computer to use other operating systems like Linux.
  • Technically, you could install Windows 7 on one partition and Windows 10 on another.
  • This technique can be extended to many operating systems on many partitions.
  • Each session gets all the available RAM.

Cons:

  • You have to reboot in order to get back to the other operating system to use its tools and software.
  • In the case of OS X, major version upgrades usually try to overwrite the menu at the beginning which would normally allow you to select the other partitions. It’s almost as if Apple doesn’t want you to do this and breaks things on purpose, of course. If you’re technically-minded, you can fix this each time however.

Set up a virtual manager (VM) and “spin up” an operating system

This seems to be the preferred and newest method these days. You run a virtual machine manager, create a virtual computer using this technique and then install the new operating system to this.

QEMU

You then boot up the virtual computer and you see this as a window on your Desktop.

XP

Pros:

  • You can copy/paste from a Windows application into a Linux session’s Terminal session or any similar combination of from/to.
  • For demonstrations, you can easily show that something works with multiple operating systems (without rebooting or bringing multiple laptops).
  • Depending upon how much hard drive space, RAM and processor speed you have, you could potentially run several virtual machines at once.

Cons:

  • Technically, it’s the most challenging of the various options and the learning curve is steep.
  • It may require more RAM memory than what you currently have for this to run well.

Progress so far

I have plenty of experience using the first two methods above (live- and dual-boot) but have recently been working with the VM option, as described below.

Dual-boot MacBook

I’ve setup my MacBook Pro to boot both OS X and Ubuntu. It seems to work great so far. I hope to next setup a VM so that I can emulate a Raspberry Pi computer within the MacBook itself (for development purposes).

HP Laptop

I’ve setup my HP laptop to boot Ubuntu and have added a VM which has Windows 10 loaded in it. Remarkably, the Windows 10 install actually works better than the original (native) installation on this laptop.

Multi-boot Raspberry Pi computers (IoT re-purposing)

Since the Raspberry Pi (3 and Zero) computers have an easily-replaceable microSD card in them, I now have a small library of different images with which I may boot any individual computer. It’s just important to label each to avoid confusion.

So I might pull the microSD card for the robotic tank project out of a Raspberry Pi, replace it with the card for the closed ecosystem or for a different project altogether. Once it boots, it’s now a completely different computer, if you will.

microSD

Multi-boot 3D printer

Technically, the Robo C2 printer has a Raspberry Pi computer inside so it makes it easy to boot to different versions of the software. This is useful when you’re modifying things to add on new features, for example.

Smartphone software on a workstation

I’ve also had the opportunity of installing Android on a standard Dell Vostro 200 desktop computer. (It’s good for testing software and websites.)

Cloud-based alternatives

There are entire services available at Microsoft, Amazon and presumably Google in which you “spin up” a virtual computer and remote into it.

Amazon’s offering is called EC2 and I’ve had the opportunity to use it in the past. In the span of two hours, I was able to spin up or “instantiate” a virtual SQL Server in a datacenter somewhere, to upload a corrupt database, fix it there and then to download it back to me. I then killed that virtual server. The total cost was something like $4 to “borrow” their virtual hardware for a couple of hours. Compare this to the cost of purchasing an actual server, paying for Microsoft licensing, waiting for everything to arrive, setting it up, etc. I literally saved thousands of dollars with a service like this.

Microsoft’s offering is called Azure. I can’t say that I’ve used it yet but it works essentially in the same way that EC2 does: define an instance, spin it up and remote into it.

Looks like Google’s offering is their Compute Engine. It sounds like they’re trying to play “catch up” to both Amazon/Microsoft on this one.

There’s another player in this space, MacInCloud.com appears to be offering remote sessions into what are likely discreet/physical Apple computers. For all practical purposes, it would likely behave like a virtual computer might.

Private cloud

And finally, I had the opportunity to re-purpose about eight Dell Vostro 200 computers from work into a MaaS (metal as a service) private cloud. The underlying layer of software which did the cloud part is called OpenStack which allows you—like Amazon itself perhaps—to be the host for spinning up virtual servers.

It takes a lot of work to get the initial one or two computers running for this. But then, using a concept called Juju charms, you select what are essentially recipes of things to install which have complicated inter-dependencies and it seems to make it all work for you. Seeing these things run is pretty impressive given that this is in the free, open-space world.

The future

It’s hard to guess what’s next in this series of events. We may soon be running a VM with Windows 10 on a wearable single-board computer like the Raspberry Pi 3 or similar. In theory, then, you might wear a pair of Google Glass(es) or the Microsoft HoloLens which would interface with the Pi computer via Bluetooth. Given the lack of a keyboard, presumably the interface might be like the Amazon Echo/Alexa service: you ask for something, the system must recognize the command, submit it to a server and display the results or iterate through them via voice.

And yet, given the augmented reality (AR) side of things, you might say “keyboard” and a virtual reality keyboard could appear on the physical horizontal space in front of you and you just “type” on an imaginary keyboard to input data.

The interfaces could evolve to project these virtual keyboard-type interfaces onto an imaginary glass wall in front of you, much the same as you see in sci-fi movies these days. These glass-like devices probably would incorporate an outward-facing camera to catch and interpret your hand movements into discreet commands like typing, page-forward, scroll-down, dismiss window, etc.

GoogleGlassHololens

j.a.r.v.i.s.

Imagine being able to have a conversation with your 3D printer much in the same way that the Tony Stark character of Iron Man did with his butler-esque virtual companion J.A.R.V.I.S., as voiced by the very talented Paul Bettany.  How cool would that be?

jarvis

So I thought I’d work on an upgrade to my Robo C2 printer to add this capability.

Amazon Echo (Alexa)

Fortunately, Amazon has a product called Echo with an underlying personality & service named Alexa. Since they’ve made the source code and service available to developers, I’ll be using this to get started. For the commercial product, you’d say “Alexa…, what’s the local weather?”, perhaps and she might “read” a brief report for you. And by “read”, I mean:  “a text version of the weather report queried response would be rendered into sound using a female’s voice and played on a speaker”. (We love to anthropomorphize these things now that computers are getting so smart.)

Raspberry Pi

The Robo C2 printer has a Raspberry Pi 3 inside and I’ll be incorporating this into the project; I’m fairly familiar with how this computer works.

Since the price of the official Amazon Echo is about $100, this strikes me as being too expensive since all I really need is a single board computer, a microphone, a storage card and a battery. The Raspberry Pi Zero W fits that description and weighs in at a mere $10.  Technically, I’ll also need a speaker but since I’ve just upgraded the Robo C2 with sound events then I intend to push my generic Echo’s sounds over to the printer to play them there. This will help in the illusion that I’m talking to someone/something “over there”.

Wake Word

The Echo technology out-of-the-box recognizes the spoken word “Alexa” so that it might then attempt to turn your subsequent spoken commands into something recognizable, a “skill”. I’ll be updating it to recognize the spoken word “Jarvis” instead.

Custom Skills

Beyond the included skills, the service allows new user-defined skills to be created and then they’re part of Alexa’s talents, if you will. I shall be creating custom skills so that I might then do a number of tasks with the printer, hopefully to include sending a new job to print. It would also be good to know the status of an existing job without necessarily reading any of the available displays/consoles for this information.

From what I understand, these new skills are a collection of intents and utterances with optional slots as variables.

OctoPrint

The underlying printing software behind-the-scenes on this printer is called OctoPrint. It’s suggested that it’s already compatible with Alexa so we’ll see if that’s accurate.

Size

It should be rather small and handheld. The board itself is about the length of three quarters. I have two different microphones for this—I’ll try to use the smaller of the two. Initially, I’ll use a barrel type of USB charger but I’ll then knock that down to a smaller style when that’s working. I’ll likely solder the accessories if they seem to be happy. And then finally when I’ve settled on the accessories and such, I’ll design and print an enclosure for it. I may or may not include a wake-up button.

PiZero

Custom Voice

I would like to replace Alexa’s voice personality with sound events from the J.A.R.V.I.S. movie character. I’ll see what it will take to make this happen. By keeping his responses to a few generic ones, I might just replace the outbound render-to-text routines so that they just pull from the stock responses as recorded and stored.

Progress

  • The sound event upgrade is now on the printer (imagine a Robo C2 printer making R2D2-like sounds to let you know when something has occurred)
  • I have all the parts I need for Jarvis
  • I’ve created a developer’s account on Amazon and have created my Alexa service for Jarvis
  • I have the Raspberry Pi Zero W computer’s operating system installed
  • The AlexaPi source code is installed and the service is running
  • The microphone appears to be working as expected
  • I need to read through the various tweaks required since I’m running on a Raspi Zero instead of a different version
  • Re-purpose the onboard LED on the Pi to work for the voice recognition notification
  • I need to install the new wake word for “Jarvis” instead of “Alexa”
  • I need to create one or more skills for things I need the printer to do like report status, turn off/on the webcam or to start/stop a job
  • Record and store patterned responses from the Iron Man series of movies to be played on the Raspi 3

 

parts is parts

Still designing/printing parts here in plastic from Autodesk Fusion 360, Cura and the Robo C2 printer. It’s amazing how long it can take sometimes to print.  This particular part printed in just over eighteen hours but an earlier (high-quality) version suggested that it would have taken slightly over four days.

I’ve been having problems with a particular spool of filament from Shaxon. Given that it’s infused with carbon fiber, it has a tendency to want to stick to itself on the spool. So I’ve lost about three print jobs so far from a variety of nonsense related to the filament snagging itself as seen here.

IMG_0190

This then results in the loss of filament to the extruder and the print job continues, going through the motions of printing but without plastic. To fix this, I’ve repurposed the base of my rock polisher to hold the spool and locking it in place with a coat hanger for the moment. When the filament tries to snag itself, the entire rig seems to work out with respect to deploying without accidents.

IMG_0195

If you’d like to see what it looks like to 3D print a part like this, here’s a link to the video I created (using that new camera from an earlier post).

Time-lapse photography of printed part

 

time-lapse photograpy for the robo c2

I’ve upgraded the Robo C2 printer with a nifty Raspberry Pi NoIR camera so that it can take photos, stream video and do time-lapse photography of print jobs. It seems to work great so far and I look forward to putting it through its paces.

And to make this easier for others, I’ve created a documentation repository with step-by-step instructions for anyone else who wants to modify their original printer to do this, too.

Okay, so technically the printer had a glitch 1/3 of the way into printing this (huge) coin example, so I aborted as it started to go funky at some point… which you can’t tell here, tbh.

When printed part becomes modern art

wizarding money

Apologies for the lull in blogging but I’ve been fussing with Autodesk Fusion 360 lately. The current design in 3D printing would be an authentic-looking Knut from the Harry Potter film series.

coins

So for the first coin, I thought I’d try the copper/bronze-looking one since I have some copper-infused PLA filament, some copper-infused artist liquid-stuff and plenty of pennies for electolysis at the end.

I managed to do the front side with a convincing Tratello font for the text and a complete rendering of the details. I will attempt to do a photos->mesh conversion for a better face, however.

Rafting

A raft on the part’s bottom is often necessary so that the part will adhere nicely to the workspace. Unfortunately, that tends to mar up one side of a coin so that approach doesn’t work here. I’ll then want to slice the coin into front/reverse and print both halves.

Weighting

The standard weight of a plastic coin wouldn’t feel right in your hand so the strategy would be to put something inside of two halves to make it seem realistic.

Post-processing

After the actual print, everything you do to make it nice is called post-processing. In this case, this might include assembling the two halves of the coin with glue of some kind, sanding, tumbling in a magnetic rock tumbler device with copper-plated media for a few days, brushed-in application of a copper-infused liquid for touch-ups and finally, wiring and dropping each into an electrolysis chamber so that ionic copper may bind to the outer surface.

Progress

So far, I’ve got one half of the Knut designed and made two test prints. The inside space perfectly matches a penny (which adds weight to the coin and helps to speed up the print time). The filament produces a metallic matte finish and doesn’t appear to have the tell-tale lines you normally might see in a printed part.

The bad news is that my 0.4mm extruder nozzle is too big for this job. I need a tiny opening to print at a higher resolution. So I’ll be ordering some smaller nozzles like this 0.15mm version.

pointOneFive

I have a spare power supply from a computer as well as a recycled hard disk. I’ll remove the top from the disk and then glue some very strong magnets around the top perimeter in alternating orientations every 60°. I’ll need to use my existing rubber drum from a rock tumbler kit for the media and parts.

As for the media, this will be a combination of penny-magnet-penny glued sandwiches plus a collection of copper-clad screws (over steel). This then makes everything inside want to give up copper in the millions of collisions with the copper-infused plastic parts, as influenced by the external rotating magnetic field. After a couple of days, the coins should have a healthy amount of superficial copper added plus a polishing of the printed detail.

don’t make me clamp you, part 3

Oh, the fun.  After a few fails, I managed to print out several C-shaped clamps in carbon fiber—infused PLA, finally getting the temperature right.  I then spent several more hours in Autodesk Fusion 360 to further tweak/finalize the bottom of the chassis for the Raspberry Pi 3 supercomputer and sent that off for a 56-hour print job.  Whoa.

IMG_0139IMG_0138

Four of these clamps then were employed during last night’s printout while it was still going.

IMG_0149IMG_0151

Unfortunately, the pause feature that I’d asked for in the slicing software went rogue upon resume and tried to bury the extruder into the plastic, forcing me to abort at 4am this morning.  <_<

At least there’s much less part curling at the base versus last time. So I think I’ll redesign the clamps to have an even lower top profile and clamp right after the first four layers of the raft are down.

 

don’t make me clamp you… (part 2)

You wouldn’t believe the difficulty I just had getting Autodesk Fusion 360 to do what I’d thought would be trivial: I wanted to cut down an existing part from Thingiverse to meet my needs.

Thingiverse ≠ OpenSource

The first thing I learned yesterday from this is that—even though Thingiverse seems like a wonderfully collaborative place—it isn’t actually open-source. If this were open-source, then in addition to the mesh (STL) files that are shared, each author would also include their project file as well (DWG, for example).

Don’t get me wrong, Thingiverse allows people to share their work. And yet, it isn’t the same as github which allows someone to take 100% of what you worked on, tweak it and then share that as well. It’s this iterative modification that makes open-source so powerful. And the reason behind that is that each new person doesn’t have to start from scratch.

CAD Project File

A typical computer-aided design file will include a variety of information. Most, though, are built around the concept of an initial sketch in two dimensions with a variety of measured constraints, for example. One then brings that 2D sketch into the third dimension and suddenly you have a part.

If you’d like to then edit the sketch or change the height of the sketch in that third dimension, you’d need to have that project file. (Thingiverse does not share project files.)

Mesh File

At the end of a design session, it would be necessary then to export that part into a 3D model which is usually a collection of points and triangular faces. The sum of these describes a solid in 3D space. (These STL files are shared on Thingiverse.)

Toolpaths File

Once you’ve exported your own design to an STL file (or you’ve downloaded one from someplace like Thingiverse), the file is taken into software like Cura if you’re trying to print to a 3D printer. This is known as “slicing” since it’s Cura’s job to know your printer well enough that it may slice your part from the bottom, up. Each layer then is converted into a number of instructions called G-code which tells the printer exactly what to do at every step of the way. (Thingiverse does not share these files either.)

Autodesk Wants You to Design in Autodesk

It was clear from my initial interaction with Autodesk’s support that they don’t want you to work using other software. They want you to start over and redesign your part in their software. Given that they charge $40/month to use the software, it’s easy to see why.

They actually do support the conversion of a mesh file into your project file in such a way that you can cut it, for example. They just hide the feature as an Easter Egg; only after turning off project journaling (Time Line) can you see the Mesh-to-BRep option. Granted, the program became painfully slow using this feature since it was grappling with about 50,000 triangular faces. Eventually, though, it processed the mesh file and I was able to apply the cutting action to remove some of the clamp from Thingiverse.

Progress So Far

Knowing that I could further modify the C part of the clamp should I need to, I then set the first of two prints into motion.

With the standard white PLA filament in the printer, I was able to print this in just over twelve hours last night. It’s a collection of eight screws plus their respective protector caps for the ends of those ball points. And tonight, I’ll print the C-shaped parts in black carbon fiber PLA for its added strength. (I’ll need to break them away from the adhesion raft, of course.)

IMG_0123IMG_0124

In case you’re wondering, I had to laboriously place each of the sixteen individual parts into Cura’s workplace, carefully including enough space between them. The tighter you bunch them, the less movement the printer will have to do and the faster it will print. Get them too close and the extruder might bump into one of the other parts or perhaps merge two parts together.

As you can see from the slight bit of raft curl on the right side in the second photo, these clamps in theory will do a nice job of holding the raft down into the bed for the first inch or so of the part’s printing. In some cases, they should save what would otherwise be a failed printout.

don’t make me clamp you…

Trying to push the envelope in print volume on the Robo C2 printer, I’m finding that the part wants to curl on the bed (since the latter isn’t heated). Hmm…

curl

This is a common occurrence, I understand.  It’s due to the uneven temperatures of plastic on the bed versus the new (hot) layers of added plastic. To get a part this big, I actually had to lie to the software and to suggest that the printer has a bigger range than this. This sort of tweaking is commonplace.

Hairspraying the bed is a known gimmick for 3D printing, but as you can see, the painter’s tape is well-stuck to the part.  Instead, I’m thinking of 1) printing the raft at the bottom, 2) pausing the print at this point, 3) removing the bed, 4) applying clamps around the edges and finally, 5) resuming the print job.

Tool-Making 101

From my experience in a plastic manufacturing plant, I learned that if something doesn’t work:  modify it, build a helper tool or change the process somehow so that it does work. Here, I’m opting to build a set of clamps to assist in the 3D print process and to insert a pause into those instructions (“GCODE”) at the proper moment.

Half the battle, then, is designing and building a number of clamps.  To be useful, they should allow their placement at a variety of distances from the edges of the bed. They should hold throughout the job even if things are vibrating and moving around. They should never restrict bed movement. Since the print job goes for perhaps ten hours, they must not fail in any way if I’m not there to watch their performance.

The other half of the battle is to create something which modifies the GCODE instructions to place a pause at the right moment (as soon as the raft has been laid down). My guess is that this will look like an OctoPrint plugin. There probably already are a number of plugins which pause at a particular z, meaning that they will pause the print job when it comes to a particular vertical layer. I was thinking that I might invent a different approach somehow in this space but I’ll see what I can come up with. I like the concept of pause after raft, though, and would imagine that this would be useful enough to others.

This should save a lot of print jobs from curl, I hope. And that should translate into a lot of money saved in filament, as well as time.

clamps