Tumblelog by Soup.io
Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.

January 31 2013


Wireless Ultimaker

If you went through the set of pictures I posted along with my post about my Ultimaker, you might have noticed a bracket for a Raspberry Pi in there, including the Pi itself. I bought one of those tiny computers (together with a tiny USB WiFi dongle) around the same time I acquired the Ultimaker, specifically for the purpose of using it as a wireless printing host taking care of sending the print commands to the Ultimaker and also offering information regarding the current state (progress, temperature etc) of the printer and print job. Ideally I wanted to be able to upload GCODE files to the Raspi via a web interface, and also use that to start, pause, stop the printjob and have a general idea what the Ultimaker is currently doing (the plan being to set it up in another room so that it does not bother us in living room or office with noise or PLA fumes).

I tried some existing web interfaces for this (namely Printerface, the web interface of Printrun and 3DPrinterInterface), but they either did not offer the back channel I wanted or I didn't get them to properly work (I don't blame the software here, I didn't have much patience to be honest). Given that it's been some time since I had some private coding session, I took that as a reason to hack something together myself. Studying the code bases of some existing printing tools, I quickly learned that it takes a bit more than just sending some lines over a serial interface and read some stuff back and be done with the printer communication, but that in order to get some solid, error-resilient communication stack including the necessary state queries I needed for my back channel requirements, I'd have to invest quite some time to get what I want. So instead of reinventing the wheel here as well, I decided to just build my web interface on top of Cura, basically offering an alternative UI on top of the existing printing code. Given that Cura is written in Python and works under both Windows (my development environment) and Linux (the target environment) I figured that should give me a good starting base, and I was right.

This Cura fork on Github includes my “Cura WebUI”, which currently allows me to

  • upload .gcode files to the Raspi and manage them via the UI
  • select a file for printing, getting the usual stats regarding filament length etc
  • start, pause and cancel a print job
  • while connected to the printer, gain information regarding the current temperature of both head and bed (if available) in a nice shiny javascript-y temperature graph
  • while printing, gain information regarding the current progress of the print job (height, percentage etc)
  • read the communication log and send arbitrary codes to be executed by the printer
  • move the X, Y and Z axis (jog controls, although very ugly ones right now)
  • change the speed modifiers for inner & outer wall, fill and support

All this is done via AJAX with a little server component (which heavily borrows from the existing print dialog implementation), and it feels quite responsive I dare to say, even on the Pi :) I so far tested it on both my windows-based development box and the Raspi as server1), and Chrome on Windows and my Galaxy Note 10.1 as the frontend, and I'm quite happy with the results so far.

It also allowed me to play around with Flask, JQuery, Bootstrap, Knockout.js, Flot and the JQuery File Upload Plugin, so I not only have a nice web interface for my printer now, I also learned something in the progress and had an awful lot of fun while doing so ;-) I'll probably continue to work on the code, but my original goal – a wireless Ultimaker – is reached I'd say :-)

Probable next steps: Webcam support and some electronic solution that allows me to just plug in one power plug for both Raspi and Ultimaker ;-)

Update from Dec 31st 2012

I have just made a major overhaul of the codebase. Since I had to realize that with the limited processing power of something like a RasPi it's just not feasible to even think about adding slicing support, the only thing used from Cura will stay the communication stack and GCODE interpreter code. I therefore refactored the codebase to only include those parts (with proper Credit of course!) and pushed it to a different repository.

Further development will continue there, but I'll leave the forked Cura repo with the added WebUI where it is now (with a statement where to find updates ;-)).

Update from Jan 31st 2013

I nearly forgot to mention it here… Printer WebUI was renamed two weeks ago into “OctoPrint” (including a neat logo) and has consequently been relocated to here since last sunday. Let's hope that this will be the last move ;)

1) On my Raspi (running Rasbian) I got it to run by cloning the Git repository, installing the python-pip package, then installing the dependencies as stated in the repo's requirements.txt via pip install -r requirements.txt and then starting the interface via python -m Cura.cura –web from the repo root (at least as far as I can remember *cough*). I added a corresponding entry to /etc/rc.local so that the web interface now starts up when booting the Raspi.
Read or add comments to this article

December 05 2012


Hello Ultimaker!

I recently gave in to that constant nagging in some weird part of my brain and bought a 3D printer for our household. I had already circled the Ultimaker since I had first heard about it (one year ago I guess?) but couldn't bring myself to spending so much money on something I don't actually need per se. Somehow my inner geek finally got the better of me though…

Anyway, I ordered the kit plus a spool each of blue and black PLA on November 9th with an estimated lead time of 14 days, but already got a shipment notification ten days later on November 19th. The package arrived safely two days later on November 21st – and I had to discover that the bottom plate of the frame was missing from my lasercut parts (instead I got the left side twice). Big thumbs up for the Ultimaker staff who resolved the issue by sending a replacement part immediately via Express on the next day (and thanks to Nils Hitze for “escalating” my problem ;-)). In the meantime I asked on G+ what parts I could safely assemble already without the missing plate, got helpful answers from both Florian Horsch and Erik de Bruijn (thanks again!) and started with extruder (wednesday evening), printhead (thursday evening), X/Y sliding blocks (friday afternoon) and the Z-stage (friday evening).

On saturday I already feared I would have to spend the weekend not finalizing the build but instead relaxing or something similar 8-o when the DHL Express guy finally rang our doorbell in the early afternoon – I haven't been this happy to receive a package in quite some time. So the saturday afternoon was spent with building the frame and attaching all the preassembled parts and when it was already dark outside the big moment arrived, I powered that whole thing on for the first time, connected it to my PC (I didn't bother with ReplicatorG as mentioned on the Ultimaker wiki but instead went directly with Cura), heated it up and – it printed! :-D

As suggested in the Ultimaker wiki, my first print was a 20mm box from a calibration set. That went rather well, so my next try was Ultimaker's mascot, the Ultimaker robot. That didn't turn out so well as starting with layer 20 or so the whole thing started to lean more and more to its right due to the layers not being stacked properly but with some offset. A bit of logical thinking lead to me checking the bolts on the pulleys of the x-axis which were to blame since one of them had come lose. Re-tightening with the supplied 2mm hex screwdriver did only help temporarily though, after another calibratiom print the next real printjob failed again with the same symptom. I decided to solve this after a good night's sleep, so on sunday morning I partially disassembled the x-axis again (the night before I had had issues to even properly reach the offending pulley as it was the one connecting the motor with the axis via the shortbelt, and that's a rather tight spot), tightened everything with a fitting Allen key I thankfully found after rummaging through my toolbox, reassembled the axis, tried the print again and finally everything worked! The result were some nice feet for the printer to which we attached felt pads (Phil's idea, helped greatly in dampening the vibrations).

Since then, I'm a happy owner of a 3D printer – and that thing really is addictive! I already ordered some more colors of filament and have some ideas for christmas presents. I also started on my first own creations since my mom needed a couple of things :-) All in all, I don't regret the investment in that printer at all =)


So, after that wall of text, here are some tips if you happen to build an Ultimaker yourself:

  • Read the whole assembly guide before starting with anything. Do it while waiting for your printer's delivery, this way you'll be able to start assembly as soon as it arrives but you'll know why you are doing what steps (and you'll recognize where to divert from the official guide for an easier assembly).
  • Insert the bearings in the axis mounts before assembling the frame. This way you can use more force to push them in, which you might need (I did and was happy about it, it would have been a real PITA having to push those bearings into an already assembled frame).
  • Check if the frame fits before assembly, take your time sanding if it doesn't. Same goes for the fittings of the linear bearings in the arms of the z-axis. I spent quite some time testing and sanding here to make sure everything fits snugly.
  • Be careful when attaching the fan to the print head. It was a tight fit on mine and I used too much force so that the fan chassis broke (nothing that can't be fixed with tape, but better if it can be avoided altogether).

Once you got it up and running, consider printing the following upgrades/tools:

I also plan to add the following upgrades:

  • The Ultimaker handle for easier transport (haven't come around to print it yet).
  • A replacement feeder gear, either this, this or this, as the wooden one will probably not hold up forever.
  • A Z-axis end-switch fine-adjuster because currently (re-)adjusting that endstop is a real PITA, and a mechanical Z endstop to make sure the nozzle will stay out of the printbed even if I happen to frack up the endstop position.
  • Some stepper tensioners for a finer and less fiddly adjustment of the positions of the x- and y-axis steppers.

So far I have exclusively used the green PLA that came with my printer for any upgrades – the printer is therefore slowly turning green ;-)


Finally, some pictures!

More pictures can be found on Picasa.

I also made a short video of the printer printing its own feed…

The Adobe Flash Plugin is needed to display this content.

… and played around with Cura's built in timelapse feature while printing a Minecraft creeper for a colleague.

The Adobe Flash Plugin is needed to display this content.

Read or add comments to this article
Older posts are this way If this message doesn't go away, click anywhere on the page to continue loading posts.
Could not load more posts
Maybe Soup is currently being updated? I'll try again automatically in a few seconds...
Just a second, loading more posts...
You've reached the end.
Get rid of the ads (sfw)

Don't be the product, buy the product!