Contact, archive, etc
Reprap blog

Closed Loop Doing its Job and Sstruder v2 Pic

This video shows how the closed loop ABC axes act like springs when hot end meets an obstacle. Pictures of this print can be found here and here.

The Sstruder v2 files are published in the repo without any assembly instructions. Here is how I currently use it:

Notice the bowden tube guiding the filament both above and below the hobb. Also note that the idler (middle 623 bearing) is placed along the filament path, and secured in place with M3 nuts. The idler shaft is an M3 screw with objects stacked/screwed in the following order: Screw head -> 623 bearing -> nyloc nut -> nut -> nut -> 623 bearing -> nut -> 623 bearing.

- tobben

Working on Auto Calibration and Reliability


I put together a closed loop single unit Hangprinter with pancake steppers recently. The following video shows that it can run upwards along the D-line at 26.6 mm/s. It is driven by a 17HS08-1004S, rated for 1A but running at 0.56A. Axis speed is limited by motor stalling/driver resonance.

This single unit machine will help me learn to collect data for the auto-calibration procedure. Collecting data from single units will be hard because of their large mass. The auto-calibration algorithm requires less than 2 mm errors in relative line lengths compared to what a massless point would observe. With a random error of 1 mm convergence now looks like this:

Figure 1: The output of an auto calibration simulation using a random measurement error of 1 mm and plotting on every fifth Newton iteration. The first plot shows how the algorithm is searching for the anchor points. The second plot shows the searches for the positions where relative line length measurements were made. The algorithm missed the six sought anchor coordinates by -28.7, -38.4, -26.3, 16.4, -36.9, and 8.0 mm.

I'm considering the auto-calibration coding as done for now. In the end it was the excellent paper "Calibration of a fully-constrained parallel cable-driven robot" that made me understand that Newton's method was way to go, and that the analytical Jacobian wasn't worthwhile putting into code.

I'm rounding this post off with thoughts around a funny pic:

Figure 2: Three Mechaduinos and an Arduino Mega with RAMPS. The latter is orders of magnitude cheaper and weaker, but is still acting like a master, giving step/dir orders through yellow/green cables.

Mechaduinos kind of go against design principles of the Hangprinter Project. They cost $50/piece + shipping, they have wasteful amounts of 32-bit processor cycles, they're hard to self-replicate, they're quite complex to just mount, program and calibrate and easily double the assembly time of an average Hangprinter. On the other hand, they're OSHW and they can make the Hangprinter work without a babysitter, now.

The Babel Tower print made me concerned about Hangprinter reliability, so the Mechaduinos are there to teach me about closed loop control. In the future load angle data from back emf might provide the reliability we need. Thanks to Elijah Craig for showing me the TMC2130 drivers! They can output such data =)

- tobben

Walking the Line


Following up on what I planned 35 days ago:

"When the version 3 is up and running, I will focus my dev time on adding closed loop control, auto calibration and DC motors, in that order. Well, at least that's the plan right now. I'll prioritize improvements that apply to both single- and dual unit Hangprinters, and keep both branches alive."

Getting Version 3 Up And Running

The version 3 referred to a dual unit design with large spools like shown in the previous post. This was supposed to reduce weight and reduce spool buildup. The version 3 since got thinner FireLines (0.18 mm, down from 0.39 mm in version 2), which further decreased buildup by a factor of 4.5:

Hangprinter version 3 mounted in my basement. The winch (stationary unit) is the one from the previous post.
An anchor of the Hangprinter version 3. Distance between anchor points is 27 cm. One end of each line goes to the winch, and the other end of each line goes to the mover. Black tape on the floor makes the left corner look like it floats in mid air.

The version 3 is up and hanging, but is not yet up and running.

Small Side Note on Movers

The mover depicted above (moving unit with extruder) is a triangle of Open Beams with a E3D Aero mounted at its center. It's a scaled up design revision of Osika's small Aero Titan mover. He has started constructing movers in the following material agnostic manner:

A small Osika-mover using pine wood instead of Open Beams.

Adding Closed Loop Control

The Mechaduino Project has given us a plug-and-play loop closer.

This means that Hangprinter version 3 users can count on prints actually finishing. A great relief. The plug-and-play Mechaduino setup, as well as the possibility to construct custom stepper-servos based on the Mechaduino Project has made us really excited. We've added Mechaduinos to version 3's A, B, and C axes at a total cost $150.

Adding Auto-Calibration

Vilse has done some impressive work on simulation and data collection. Matlab simulation is available here. To auto-calibrate without user interaction, we need to

Luckily, very skilled researchers have solved this problem before us and published their results. Studying this paper has helped my own understanding a lot.

To be able to quickly make sample \(\theta\), Vilse created "button mode". Obviously. It is useful whenever you want to push your Hangprinter around, which is quite often:

Hangprinter version 2 with added buttons running in button mode.

The button mode related modifications to the Hangprinter-Marlin firmware are available here.

We haven't tried seriously to add DC motors yet, but we stay by the plan to do so further down the road.

- tobben

Experimental Dual Unit Designs


The Hangprinter Hackathon at Bitraf produced some technical progress.

Fred's video mashup from the hackathon. Most pictures show an experimental design dubbed "Hangprinter GT". Big thanks to Bondtech for sponsoring the extruder you see mounted during print.

Besides dividing the Hangprinter into two units, the GT design also tried out the concept of spanning up linear actuators between winch and ABC anchor points:

The yellow loop runs around the motor shaft and an idler. The grey line is tied onto the yellow loop.

This concept works wonderfully in theory, and you can even use belt for the yellow loop to make it easy to build. In practice you need to keep the loops very tight, or the belts will skip. We did a quick and dirty patch to solve this. The dangling bottle of water in the picture above is what keeps our D-line tight.

Hangprinter GT, its creators (Alexander, Nils, Fred and Mikael) and me, holding the bottle of Tøyen-Cola.

The Hangprinter GT turned into a quite bulky installation, so the design won't be continued. It did shed some light on a few pros and cons with dual unit Hangprinters in general.

Back to Spool

Stationary part of a spool-based dual unit Hangprinter design. The placement of the spools are quite arbitrary so the mounting plate can easily be made with hand tools and no technical drawing. Source code for the spools above are found in the version_3 branch of the repo.

The Benefit of Large Spools

The spool radii are doubled as compared to the standard Hangprinter spools, in order to decrease line buildup. A doubled spool radius reduces spool buildup to ca 1/4. Let's step through the maths to kill some time:

To wind in \(2r\) of line onto an empty spool with radius \(r\), we would need to rotate the spool by 2 radians. A spool with \(x\) meters of line already wound onto it would have \(\epsilon(x)\) of buildup added onto its radius \(r\). It would wind in \(2(r + \epsilon(x))\) of line if it were rotated by 2 radians. Without buildup compensation the resulting error would be

\begin{equation} \text{err}_r = 2\epsilon(x). \end{equation}

To wind in \(2r\) of line on an empty spool with radius \(R=2r\), we would need to rotate the spool by 1 radian. A buildup of \(\delta(x)\) would cause an error of

\begin{equation} \text{err}_R = \delta(x). \end{equation}

The circumference of the spool with radius \(R=2r\) is twice as long as the circumference of the spool with radius \(r\). The buildup caused by \(x\) m of line should therefore be ca halved on the big spool, which gives us the approximate total benefit of doubling spool radius:

\begin{equation} \text{err}_R = \delta(x) \approx \epsilon(x)/2 = \text{err}_r/4. \end{equation}

But wait, there's more. The spools depicted above are also 2 times higher than standard Hangprinter spools. This should cut buildup in half once again.

If that isn't enough then there's also the possibility to tie in lines mid-air, and run a single line around each spool. This wall of text has already gotten the line buildup down to 1/8 of what we had before anyways, so let's wait and see if this is really necessary.

The buildup problems of Hangprinter version 2 were mostly on the D-axis, which had doubled lines (mechanical advantage 2). We can drop that on version 3 since it has a light moving unit. To summarize, we cut D-axis buildup to 1/16 and leave ABC buildup at 1/8.

Figure 1: Accumulated required buildup compensation at different positions when applying tricks described above. Compare to previous compensation plot for reference. Note the factor 10 difference on the D-axis. The code to generate this plot can be found here.

After all this theory let's rest our eyes on some Hangprinter version 2 parts designed and printed by Alexander Osika:

Prototype of a moving unit for a dual unit Hangprinter. This one flexes a bit too easily, but you get the basic idea. Thanks to E3d for sponsoring the Aero in this picture!
With a modular dual unit approach, you're free to mount only a little triangle in the ceiling if you want.
Alexander Osika made some floor anchors that are easy to build and easy to weigh down. They have mouse mat rubber glued on underneath and rod rings along the center line in case you want to tie in lines mid-air to reduce spool buildup, as described above.

When the version 3 is up and running, I will focus my dev time on adding closed loop control, auto calibration and DC motors, in that order. Well, at least that's the plan right now. I'll prioritize improvements that apply to both single- and dual unit Hangprinters, and keep both branches alive.

- tobben

Other People's Hangprinter Builds

This beauty was posted by Mario Lucas here.
This impressive bottom plate was posted by Jonathan Bahrs here.
These Hangprinter parts are also very well printed. They were printed by Олег Вартанов and reached me via email.
I love this picture because it shows how one community member has printed and marked parts very neatly for another community member. It was posted by Ethan Weikel here.
This picture shows JakobJakob's bottom plates for version 1 and version 2 Hangprinters. First posted here.
This nice one with a printed stand and a few other mods was posted on RepRap forums by rclemence here.
I'm very happy to even see some printers rock their gears a little. This one was posted by David Majors here.

- tobben

Babel Tower Time Lapse


To recharge before the Hangprinter Hackathon in Oslo next weekend, I threw together a Babel Tower time lapse.

Music: Ripple Boogie by Simon Stålenhag (CC-BY-NC-SA).


- tobben

First Pull Request Merged


The Hangprinter repo on has had its first merged pull request! Committer was awigen. See commmit here. The code is about adding an axle to the worm. I've been wanting one for a long time, so I was very happy about the pull request. After some further refinements, the worm now looks like this:

Finally I'm not alone in the repo anymore =)

- tobben


Check it out:! Big thanks to Piyush Dharnidharka for taking the initiative and building the page.

Front page of the newly launched website. Leave it running and it will print you a virtual Babel Tower.

It has a practical Hangprinter Calibration Calculator page that implements the equations from the calibration manual.

Front page of the newly launched website. Leave it running and it will print you a virtual Babel Tower.

There's also an about page featuring some links and a text.

- tobben

Push Fit Sandwich


In this forum post, NOVAprint confirmed what I had suspected was a weakness in the sandwich design. A gap might open between the snelle and the sandwich gear, so that line wraps around the center cylinder. I never really liked the super-short screws in the sandwich either, so I've designed a push fit solution:

The red part of snelle is added and the blue walls of sandwich gear is where material has been taken away to create the push fit.

The master branch of the repo has been updated both with scad-file and new stl files. Be warned that I haven't tested these files. If you want the old files, they're back in the version 2 branch of the repo.

I've been alone in the repo for so long, it has turned me into that guy.

- tobben

Sstruder v2 and Helsingborg


I got the chance to test the improved extruder design recently. It worked better than the previous Sstruder, so stls were pushed to the repo today.

CAD render of the Sstruder v2.

I also tidied up the stl directory in the repo and experimented with high travel moves. The Hangprinter moved at 360 mm/s without loosing steps or accumulating errors. It didn't move in straight lines, but it reached its planned end point.

I spent the weekend Hangprinting at 3D Meetup in Helsingborg. Thanks to the organizers, you did an amazing job! Based on the feedback from Helsingborg, I think the whole Hangprinter community thing is starting to get legs: [], []

- tobben



I posted a few Tweets recently. Reposting them here now.

Bracing it up again at 3668 mm. (12:45 PM - 7 Mar 2017)
3490 mm. Three days left. (3:48 PM - 6 Mar 2017)
The local newspaper Västerbottens-Kuriren visited the print site today. Print is now 3375 mm tall. (1:01 PM - 6 Mar 2017)
Just crossed 3000 mm. Thanks to DechAmim for becoming a supporter! (9:03 PM - 4 Mar 2017)
The balk in the top of this picture is at 7.5 m. Print is now 2623 mm tall. Still extruding... (10:29 AM - 3 Mar 2017)
Worst feng shui of the day. 2455 mm. (7:59 AM - 3 Mar 2017)
2475 mm. Top is vibrating too much. Adding supporting lines tomorrow. (8:32 PM - 1 Mar 2017)
The climb from 2 to 5 meters has begun. Everything looks ok. (7:33 AM - 1 Mar 2017)
It's a very large print, it's total madness. (3:12 PM - 27 Feb 2017)
Some intense babysitting of a Hangprint in a staircase. (11:44 AM - 24 Feb 2017)

- tobben

The Tilt Problem


Hello Reprappers and Hangprinterers! The Babel print gives a lot of lessons, so there's a lot of posts this week. Ca 1.5 m above ground and with 20 m of line on the D-spool, I've noticed a previously undocumented problem.

My parked Hangprinter. At print start, the printer was horizontal, but this picture shows a quite significant tilt. The tilt gets worse with print height and has caused a ca 1 cm drift in the XY-plane when this picture is taken.

The D-line from the corner where the B- and C-sides meet consistently sees a larger spool diameter than the other two corners. I suspect that subtle differences between the D-fish rings may cause this effect, or that it is simply the weight of the D-motor causing this. It is interesting that one corner travels faster while the other two corners stay perfectly horizontal relative to each other.

Anyways, structured debugging is a job for future tobben. Present tobben just wants to show you another full figure picture of the print:

1.5 m Babel Tower. Did I mention it is kind of skeuomorph?

My next post will probably drop the SI unit system.

Instead it will leverage on big data and impact the value added Internet things, featuring intelligent solutions for new normals as required by next generation info capitalism in the cloud (with diamonds).

Disruption will make language hyperlocal like a mashup of microservices in a web of buzz. Later it will drop-swap written words for virtual broadcasted brandcasting on a blockchain. (It's just a bit more deep and viral, you know.)

Diversity and non-scalable divergence will immerse the paradigm through the re-realization of a withholding economy, and possible grand scale peer-to-peer destruction facilitated by social analytics and the evolution of physical cookies pushing us towards mobile nanomodularity and some seriously driven development.


- tobben

Changed Anchor Points Mid Print


I managed to sneak up the anchor points yesterday. The secret trick is to pause and move one anchor point at a time. Then run a few rounds very slowly after each change, adjusting calibration errors manually with small G6-moves.

Anchor point C elevated by 900 millimeter, anchors A and B still at floor level.

I my case, each anchor movement still produces visible artifacts on the print:

This picture was taken directly after moving the third anchor point. On the right hand side of this picture, you see the translation of layers of each anchor change.

If you plan on making anchor point movements mid print, I recommend moving them only along the Z-axis and making the movements in increments of ca half the distance between anchor point and origo.

Ok, enough about the errors, time for a full figure picture:

All three anchor points successfully elevated. Time to print the next meter.

The project of Hangprinting a Babel Tower happens in Sliperiet, Umeå, Sweden. It is part of the +Project (Swedish link here). More about Sliperiet is found here.

- tobben

Slowly but Surely

920 first millemeters of a Babel Tower in a staircase.

The tower is modelled with OpenSCAD. Repo here.

I'm trying to move the anchor points upwards mid print, but I haven't really nailed the re-calibration yet...

- tobben

Community at Embryo Stage


It seems like some collaboration and maybe even a little community is gathering around the Hangprinter Project. Right now, there are 5-6 builders out there wrapping their heads around the source files, assembly process and calibration.

No one has sent any pictures though, and I'm a bit worried that builders will lose motivation when they bump into challenges (bugs that I wrote).

Hang in there! The ceiling is the limit!

More pics of this ongoing print coming soon...

- tobben

D-Wobble Debugged


Those who have zoomed in on my Hangprints after I added the worm drive will have noticed a periodic error. The following pictured Hangprint shows the problem quite clearly:

This error arose because my Hangprinter's worm has not been mounted straight along the motor shaft.

The above animated wobble is a bit exaggerated. You can see and hear the actual wobble in the following old video:

The root of all this wobbliness is a non-straight flat part on the shaft itself.

The motor is covered in tape because I'm about to start grinding the flat area into straightness. Debugging is so delightful when the cause gets obvious within 10 minutes and the solution involves grinding!

Until next time.

- tobben

Experimental Line Buildup Compensation Feature


I've conducted a few experiments recently, and I think I've arrived at a usable implementation of the line buildup compensation that I described in an earlier blog post. In this post, I'll try to go a bit more in detail.

The Problem: Account for Changing Spool Radius

Most RepRaps have simple linear relationships between motor position and hot end position. If their hot end is at the position 100 mm along an axis, their corresponding motor is at step number

\begin{equation} m = 100\cdot \text{s}, \tag{1} \label{1} \end{equation}

where \(\text{s}\) is a constant and \(m\) is the motor's step count.

Hangprinter can not use this simple linear relationship because it winds line around spools. When there is more line on the spool, the motor winds up more line per step because of the increased radius resulting from line buildup.

Figure 1: Yellow line builup on a Hangprinter spool causing a radius increase of \(R - r\).

We need to change the linear relationship \(m = x\cdot\text{s}\) with a more complicated relationship \(m = f(x)\).

Step 1: Find Conversion Factor for Infinitesimal Movement: \(\text{s}'\)

Say we want to move an axis from \(x_0\) to \(x_0 + \text{d}x\). A simple linear relationship, like in Equation \eqref{1}, will be valid if \(\text{d}x\) is small enough. We still have to find the correct conversion factor \(\text{s}'\), but this is easy as long as we can assume \(R\) to be constant.

Let \(\alpha\) be the number of radians that the spool rotates when the motor makes 1 full revolution. On Hangprinter version 2 the motors's gears have 9 teeth and the spool's gears have 43 teeth, so we get \(\alpha = 1.32\). Looking at Figure 1, and assuming \(R\) constant, we would move \(R\alpha\) by doing 1 full motor revolution. Now say that the motor makes \(t\) steps per revolution, and we have our steps per mm:

\begin{equation} s' = \frac{t}{R\alpha}. \tag{2} \label{2} \end{equation}

Step 2: Make Radius Depend on Position: \(R(x)\)

In Figure 1 we approximate the buildup as a rectangular torus shape, and \(R\) depends on the volume of that torus.

Figure 2: A rectangular torus.

The volume of the torus depends on the amount of line on the spool like so

\begin{equation} \text{Volume} = h\pi(R^2 - r^2) = vx, \tag{3} \label{3} \end{equation}

where \(h\) is the height of the spool, \(v\) is the volume per unit line, and \(x\) is the position along the line that corresponds to \(R\). Note that we need to give \(v\) a negative sign if we define the positive \(x\)-direction to be the direction we move when we unwind line. Rearranging Equation \eqref{3} gives us

\begin{equation} R(x) = \sqrt{\frac{vx}{h\pi} + r^2}, \tag{4} \label{4} \end{equation}

Step 3: Make Conversion Factor Depend on Position: \(s'(x)\)

Combining Equation \eqref{4} back into Equation \eqref{2}, we get

\begin{equation} s'(x) = \frac{t}{\alpha\sqrt{\frac{vx}{h\pi} + r^2}}, \tag{5} \label{5} \end{equation}

Just for reference: apart from missing a factor to account for mechanical advantage, the above equation corresponds exactly to the equation I presented in a previous blog post, see \eqref{*}. In that equation, \(x\) is split up into the parts to account for mechanical advantage and calibration procedures. In this theoretical review, we rather want to simplify our notation, like this:

\begin{equation} s'(x) = \frac{a}{\sqrt{c_0 + c_1x}}, \tag{6} \label{6} \end{equation}

where \(a = \tfrac{t}{\alpha}\), \(c_1\) is the factor that multiplies with \(D\) in Equation \eqref{*} and \(c_0\) is the rest of the constants below the root sign in Equation \eqref{*}.

Step 4: Testing...

I mentioned in the beginning of this post that I've conducted some experiments. I found that continuously re-applying Equation \eqref{6}, and using the computed values like \(m = x s'\) doesn't produce nice results.

Figure 3: During the left print, Equation \eqref{6} was applied on every G1 move. The used used \(x\) was exactly between the move's start point and end point, like suggested in the previous blog post. The right print was printed without line buildup compensation. It has some skipped steps along the vertical axis because the lines pulling downwards get tighter and tighter when line buildup is not accounted for.

Similarly miserable results were achieved by applying Equation \eqref{6} at a constant frequency:

Figure 4: Applying Equation \eqref{6} 40 times per second and hoping that \(\text{d}x\) would be small enough resulted in random distortions up to ca 3 mm in size.

Step 5: Make \(\text{d}x\) Small Enough Using Theory

A problem with the above approaches was error accumulation. Say the Hangprinter reached point \(x\) with \(m_0\) on its step counter. A few minutes later, Hangprinter reaches \(x\) again, but truncation errors have put the step counter to \(m_0 + 1\). Steps per mm is calculated solely based on \(x\), so it is totally random whether the next truncation error gets us back to the correct \(m\), or if the error will be increased to \(m + 2\). This randomness gives the typical random walk pattern along the vertical edges in Figures 3 and 4.

Figure 5: Example random walk patterns by Wikipedia user Morn.

To get back on track with finding \(m\) in Equation \eqref{1}, we integrate \(s'(x)\) from zero to \(x\). This integral gives us a one-to-one mapping from \(x\) to \(m\).

\begin{equation} m(x) = \int_0^{x}{s'(x')\text{d}x'} = \frac{2a}{c_1}\big(\sqrt{c_0 + c_1x} - \sqrt{c_0}\big). \tag{7} \label{7} \end{equation}

I was quite surprised that all this theory and volume calculations got me from a straight line relationship to an almost equally simple square root relationship. I feared that line buildup compensation would be computationally intensive, so I'm quite pleased it's only one addition, one subtraction, one multiplication and one square root extra, compared to no compensation. Even an my old Atmega2560 can handle that. In the actual firmware, I've changed notation again, so it looks like this:

target[A_AXIS] = lround(k0a*(sqrt(k1a + k2a*delta[A_AXIS]) - sqrtk1a));
With the calibration constants I'm using on my own Hangprinter, the compensation makes the following theoretical difference in actual movement lengths:
Figure 7: Accumulated compensation at different positions. The comparison constant s was calculated assuming a constant radius, including line buildup experienced in origo. The difference is biggest along the D-axis, since there are 6 instead of 2 lines along this axis. The plot's x-axis ends at 5000 mm because the D-spool can only hold ca 30 m of line. I tried it once, and the experienced error was actually larger than the expected 300 mm.

And finally the first test print to prove it all kind of works:

Figure 7: Applying Equation \eqref{7} made vertical lines more straight, or at least less random.

It's nice to see the printer moving more than 1 m upwards without over-tightening any lines, and then back again to the same millimeter! It almost looks functional.

- tobben

Hangprinter Presentation Video and Campaign


I've been helped by some friends to make a campaign. It has a presentation video and a logo and a picture of me and everything! Get to it by clicking the logo below. Please share, comment and make the Hanprinter Project your own.

The goal of the campaign is to allow Hangprinter to grow faster and more user friendly. Hangprinter needs a dev team. It's made to be useful, so it also needs to spread. To spread more, it needs more of this:

People who are not me assembling a Hangprinter behind my back!

- tobben

Compensation May Allow Bigger Prints

The line compensation code may increase print volume noticeably. During testing, it has allowed Hangprinter version 2 to go places where version 1 surely would have over-tightened lines and skipped steps.
Hangprinter version 2 at X=0, Y=-600 mm, Z=600 mm. Securing anchor points with tape and weights works only as long as no lines over tighten. During force testing, the motors easily ripped loose the weighed- and taped down anchor points without missing steps. Forces on the lower left anchor point due to gravity in this picture is ca 15 N along the direction of the lines. Vertical force from the weights is also about 15 N, so the tape (under the weights) is necessary to keep the anchor point in place. The kitchen bench is always this clean. Photo: Maja.
Since the worm driven D-axis is so strong, and because line buildup compensation reduces the risk of over tightening, we can work with more extreme angles than before. Photo: Maja.

- tobben

Compensating Line Buildup on Spools


I've added to Hangprinter-Marlins some code that compensates for line buildup on the spools. Without it, I found that error in steps/mm grew to several percent as print dimensions grew close to 1 m. The problem was particularly noticeable on the D-axis since it has three doubled lines, so moving 1 mm in the D-direction puts 6 mm of line on the D-spool.

The D-spool in this figure has ca 15 m of 0.39 mm thick line wound around it. This gives the D-axis a movement range of 15/6 = 2.5 m. Without compensation, and if the line was winded in a perfectly compact manner, this would give a 5.5 % error in steps/mm in the depicted position. As we see in the picture, windings are rather unevenly distributed along the spool's height. The error is therefore somewhat higher than 5.5 %. Hangprinter-Marlin currently approximates the cross-section of the line to be rectangular rather than circular. It therefore approximates the error to be 7 % instead of 5.5 %. My preliminary tests suggest that the experienced error is closer to 10 %.

The approximation of new spool radii that I've used looks like this:

\begin{equation} \frac{\gamma\cdot g}{\sqrt{\beta(l_0 + \omega(D_0 - D)) + r^2}}, \tag{*} \label{*} \end{equation}


Setting these variables will require some measuring and messing around in Configuration.h. The comments in Configuration.h are honestly trying to be helpful.

The above equation requires quite a bit of computation. If an Atmega2560 running Hangprinter-Marlin were to perform it more frequently than ~10 times per second, it would risk computing new movements slower than it performed them, leading to unwanted print pauses and jerky movements.

To limit the computational load Hangprint-Marlin is currently only computing new steps/mm once per received G1 or G92 commands. A gcode file with 300 G1 movements would cause Hangprinter-Marlin to compute new steps/mm 300 times.

Computing steps/mm only once per movement is of course an approximation. We will only get steps/mm right at exactly one point along the G1-move. It is tempting to place this point at one of the ends since that would be computationally cheap. However, it would kill precision, even for simple movements like the following

  G92 X0
  G1 X100
  G1 X0
The printer would use different steps/mm settings for the two different G1-moves. It would not end up where it started.

Instead of correctness at endpoints, Hangprinter-Marlin computes steps/mm to be correct at the middle of every G1 move. This solves the trivial example of back-and-forth movement described above, but it is still an approximation. The next theoretical step will be to find an equation describing the error we accumulate from not continuously computing new values for steps/mm.

If you want to improve the approach to dynamic steps/mm I've described above, then you will most probably want to improve lines 1757 to 1763 in Marlin_main.cpp:

    float halfway_delta[4];
    float halfway[3];
    for(int8_t i = 0; i < 3; i++){
      halfway[i] = current_position[i] + 0.5*difference[i];
    calculate_delta(halfway, halfway_delta);
    update_axis_steps_per_unit(delta, halfway_delta);

I've taken the liberty to highlight variables and functions with the colors blue and purple. See master branch in the repo to fetch the code.

- tobben

The Worm Drive Works


Just tested the worm drive. I was so happy to see it work that I made a little video.

Thanks to Simon, Jens and strangers at 3D-printerfestivalen for suggesting a worm drive. The worm itself is printed in nylon by Simon.

- tobben

Adjustable D Line Lengths and New Look


Just made the D-line lengths easier to adjust independently. This is useful to get Hangprinter's corners in level with bed. Newest changes are at a new branch in the repo.

I'll be testing out d-line-adjustment, worm drive and new extruder with a physical prototype. Decided to celebrate by creating an alternative look. It saves some plastic too.

Line can be wound around screw, which can be rotated to adjust D-line lengths. The rightmost vertical line goes through a channel in the plastic.
To construct the star/round shapes, I used circular paths with added sine waves and linear_extrude().
Rounding off the work night with a full render. Almost kills my laptop.


- tobben

Worm Drive on D-axis


Click on gif to make it stop rotating.

Worm rotating indefinitely. Click on it to make it stop.
Closeup when it's mounted. The best part is that it's pure parametrized OpenSCAD and renders nicely.
There has also been progress on the extruder side of things. Direct drive, spring loaded, no idler bearing, easier to print.

Check out all improvements at worm_and_direct_drive branch in repo.

- tobben

Another Stop Motion Video

Hangprinting 0.9 m high twisted P at Teknisk Museum's 3D-printerfestival. Note: this text was edited on 7-11-2016.

- tobben

Hangprinter Calibration Manual v0.1


This post will make it easier to calibrate Clerck by avoiding the need for measurements like this:

Figure 0: Perpendicular distances like these are hard to measure accurately in practice. When measuring C_Z, the dangling Hangprinter is hard to fixate, and the point where ANCHOR_C_Y and ANCHOR_C_X meet is hard to determine. (Se Step 16 in Clerck Assembly manual v0.1 for another figure.)

Step 0: Mount Wall Frame Parts

Mount all the lower frame parts at roughly equal heights above your floor. While not theoretically necessary, this makes calculations and measurement procedures easier. We assume your floor is perpendicular to gravity.

Figure 1: All lower frame parts mounted in a plane perpendicular to gravity (on the same floor or table).

Keep the flat sides of lower frame parts as parallel to the ceiling frame part's sides as you can.

Figure 2: Configuration of side plates and top plate as seen from above, through a transparent ceiling... Note how the sides of the ceiling frame part are parallel to the wall frame parts.

Step 1: Mark out Origo in XY-Plane

Use tape or ink to mark out a point directly below your ceiling frame part. This point will be used for measurement and homing reference, so keep it fixed and visible.

Figure 3: A yellow aiming plumb points at origo, which is marked with a tiny red dot. The grey surface is your floor or print surface.

Step 2: Measure Six distances

Figure 4: measurement points are marked with red dots. Note that d is equal to the length of the aiming plumb in Figure 3.

Step 3: Translate to Cartesian Distances

Now that we use our six measurements to determine six unknowns. Denoting the x-position of anchor point B like B_x, we can list the unknowns:

We orient our Cartesian coordinate system such that A_x = 0. Also, we set A_z = B_z = C_z = 0 from the restrictions in step 0 above. Now the Law of cosines and good old Pythagoras solves the rest for us.

Step 4: Take Action Point Offsets Into Account

Since lines are not tied to the center of hangprinter we need to subtract the offsets. These numbers are more or less hard-coded into the OpenSCAD files. I made a branch called calibration_manual_0 that corresponds to the renderings in this post. I'm also listing the values for ya right here. Yeah, right here:

These values correspond exactly to what you're supposed to feed into Configuration.h to calibrate your Hangprinter.

In Theory...

We could add three more measurements and be able to calculate A_z, B_z and C_z. This would get rid of the requirement to mount the lower anchor points in a plane perpendicular to gravity. I find these three measurements a bit difficult to carry out in practice. Practical difficulty is of course subjective, but the six-measurement procedure is the one I use.

I hope this has been useful, best of luck!

- tobben

Oslo Skaperfestival 2016


Clerck was demonstrated in public for the first time this weekend!

Planks and clamps were used to simulate a ceiling. The lower anchor points were simply taped to the floor. Click picture to zoom.

Fellesverkstedet Fablab and Bitraf Makerspace kindly let me show Clerk by their stand at Oslo Skaperfestival. They even helped me mount and present it! Special thanks to Jens, Martina and Jon for the invitation, the warm welcome and help of various sorts.

Clerck printing a twisted H at Oslo Skaperfestival.

The festival atmosphere changed like in a cafe district in April. Sometimes library quiet, doors closed, a few people carrying chairs around. Sometimes tivoli hectic with makers, teachers, hosts, children, amazing machines and zing boom wow bam all along the library hallways.

Girl playing with hovercraft, clearing a little space, bumping into shoes.
Six hours of interesting people, pitching, teaching, listening and learning before the atmosphere reverted back to oh so quiet. It faded like the echo of a school bell. Left at the library were only a few makers, discussing the usual topics: production distribution, dinner options and how to make money.
Jon, Jens and Torbjørn preparing to pack up their stand at closing hour. All three are mainstays in Oslo's maker community.

My work will be influenced by the conversations by the festival stand for a time to come. I'm looking forward to it =)

- tobben

PS! added Oct 26

Here's a layer consistency shot of a print made at Skaperfestivalen. Next time, we're going for something a lot taller!

- tobben

Homing the Hangprinter Without Adding Hardware


I've thought some more about Hangprinter recently, since I'm going to demonstrate it on the 3d printer festival arranged by the Norwegian Museum of Science and Technology in Oslo. I've only ever mounted and calibrated Hangprinter once before, so getting the manual homing to work fast enough worries me a bit. I don't have the time to implement the proposed accelerometer dependent homing procedure before the festival.

The following (almost stupidly simple but still kind of useful) solution will be the first thing I try to make homing faster than the aiming plump technique I've used before (see picture).

It should be precise enough to home a Hangprinter by aligning five marks, one on each sandwich gear and one on the bottom plate (all green in this illustration). An initial homing calibration using an aiming plumb, to place the green markings correctly, is still needed though.

If alignment of marks as shown above proves sufficiently precise, I will use a similar concept for automatic homing. Replacing the green marks with and optical or magnetic sensor arrangement should be quite straightforward.

- tobben

Yet Another Very Simple Extruder Design


I've thought about a second generation Hangprinter lately, including the extruder. My current favourite re-design uses two motors running synchronously.

Two motors pinch a filament between hobbed bolts on their shafts.

The motors in the figure above are supposed to resemble Mabuchi 130 servos rather than steppers. The informed discussion in this forum thread and this video demonstration have made me interested in servos again.

The RepRap community's relationship with servos is long, complicated and rather fruitless even though the promise of mechanical simplicity and low weight has always been present. There seems to be something hard about servos. Still, 2d-printer-engineers manages to churn out servo driven movement platforms, lots of them. Are those Inkjet engineers better than us? No, of course not.

Anyways, if the servo usage doesn't pan out at all, I can always try two Nema14's instead. Pinching filament between two motor shafts would still be cool and simple. Not as cool as servos though.

- tobben

Why Optimize Chaotic Production?


RepRappers have noticed me that basing the story line of my my Master's thesis on productivity numbers doesn't resonate with them. This tickled me to think about and formulate why I do what I do, hence this post.

In the thesis, I really wanted to say that we can afford producing in humane, joyful ways, and that D3D-Porteus can help. Also, in this title and previous posts, I have used the word "chaotic" loosely. With chaotic I mean "distributed between people with their own budgets for time and money".

In centralized production, unrelatedness, vulnerability and boredom are hidden costs because they are hard to count but easy to feel. In chaotic production, the producer carries the total production cost, both in time, money and emotion, and also decides how to work and when to stop. Chaotic production must be optimized to meet the producers interests. Optimizing chaotic production must include preserving creative joy.

I think balmy moods and good times in general depends on conscious effort even though production is intrinsically satisfying. The words "optimizing chaotic production" describe one way of doing one type of such effort.

The answer to the question posed in the title is then the inverse of unrelatedness, vulnerability and boredom, namely:

1: Close Relations

As humans we are evolved to thrive in small groups that help each other. Helpers feel pride and helped ones feel gratitude. It is hard to help and get love in return from distant factories. Producing everything centrally wastes opportunities to feel more pride and gratitude in our lives.

2: Resilience

Centralized factories are single points of failure. Shit just happens sometimes and when it happens we better know how to produce our stuff ourselves.

3: Fun

We are born capable of having interests and we thrive when we get to follow them. Chaotic production doesn't have bosses with the licence to bore. When you're allowed to listen to your heart you will recognize its sense of humour. If you live in an industrialized society you will probably not end up starving in the streets even if you listen to a funny heart.

- tobben

Portable Gcode and Short Status


Today I asked a question on reprap forums that has puzzled me for a long time. Why don't we share gcode instead of 3d models? The technical obstacles are small and it would be an obvious optimization of chaotic production. See the forum post for details. Hoping for an interesting discussion there.

Now that my Master's is finished I'll try to make a living out of it. I'll continue to post report-like documentation here and list day-to-day activities over at my log on the OSE wiki.

As a start, I've co-founded a limited company that is offering RepRap Assembly Workshops and other course activity to schools and youth clubs around Norway and Sweden. See home page in Norwegian here. I tried to make a logo in Blender. It's my first one, and it ended up looking like something you would expect to see on a tube of tooth paste, but I kind of like it because I made it myself:

Figure 1: A blue RepRap teardrop with some super fancy 3d effektz.

Before I dive into searching far and wide for jobs, I need to work on my RepRap family in Norway and Sweden. I need people who know RepRap that I can talk with and share knowledge, experiences, hardware and services with. As a start, I'll head to Oslo this week and visit Bitraf and Fellesverkstedet. I hope I can get to know them by helping them with their projects. If they want to cooperate on one of my projects, I plan on suggesting a new D3D-Porteus based on GuixSD, or to work on portable gcode as described in the forum post I posted today.

- tobben

Optimize Chaotic Production


I presented my Master's recently, with a story line that was very RepRap centric. I'd like to re-present and develop my thoughts with some colors here. Be warned that this is a post about why I RepRap, not how I RepRap.

I live in the EU and have a lot of contact with the US. I'm among the lucky ones by all metrics, but I also see a lot of frustration.

Figure 1: Number of riots and anti government demonstrations in USA and EU+UK since 1970. People started to hit the streets on both sides of the Atlantic in 2010. Data source: Banks, Arthur S., Wilson, Kenneth A. 2016. Cross-National Time-Series Data Archive. Databanks International. Jerusalem, Israel; see
Figure 2: Productivity and income since 1970. This plot shows data from USA but the trends are similar in all western countries. Output per work hour increased drastically between 1995 and 2010. Only the most positive economists see rising incomes after ca 1998. The productivity increase is largely attributed to better usage of computers, robots, and the Internet within organizations. Data sources: OECD, University of Groningen, US. Bureau of the Census and 2015 Economic Report of the President by Council of Economic Advisors, table B-15.

The plots above tell so many stories I, could stare at them for hours. I see how the computer age takes off, and robots starts to produce stuff crazy fast while people go furious. It's like a very odd movie plot, it makes me scratch my head. I've experienced the frustrations of modern western life but I'm surprised by the glaring and obvious stagnation and frustration in the above stats.

EDIT 30 June: There's a really nice presentation of what frustrates western middle classes in this report's Figure 4. The accompanying text explains western middle class stagnation with globalization. It may be right, I don't know what caused what. I just think that our computers and robots should have prevented stagnation regardless. They are so powerful and even supposed to be personal. END EDIT

Computers are machines for thought work, they should lift our burden of thought and give us peace of mind. Well, at least in theory (my dreams)... It would be so nice to just reboot the computer revolution and make it better. Computers could make people independent, resilient, and proud if used right. Like cars do.

Figure 3: The Ford Model T, released in 1908, made people love cars. Its central production was efficient and it used standard interchangeable parts. It was known for being easy to repair and modify. Kits that let people rebuild it into a tractors, motor boats, and other things were available. Almost 15 million copies were produced. Image by Sfoskett is CC BY-SA licenced.

Many are still inspired by T-Ford's successful production style. Bringing a machine to the masses has meant setting up a central production line for at least 100 years, including the years of the recent computer revolution. Only around 2007 was central production first rivaled, by copyability through self-manufacture. The RepRap 3D printers then got so easy to copy, partly thanks to self-manufacturing, that the number of producers grew exponentially.

Figure 4: RepRap Mendel, released in 2009, made people love 3D printers. Its production was inefficient but easy to copy, and it used standard and self-manufactured parts. The self-manufacturing made it very easy to repair and modify, even without kits or other external help. Less than 1 million copies are produced so far. Image by adrianbowyer is GFDL licenced.

When rebooting the computer revolution we should try the new RepRap-style of production. In the thesis I show that RepRaps are very popular and numerous. I also show that they are actually produced and forwarded virally. To formalize this observation, I present some data collected by Spanish RepRappers (see Figure 5) and import a structural virality measure used by researchers on other viral phenomena.

In the presentation I point out that chaotic production requires low unique parts count, good documentation and low price, just like assembly line production. I suggest that software freedom and self-manufacture are additional efficiency requirements not found in assembly line production.

Figure 5: A graph displaying part of the data set from the Clone Wars project. Every node is a person and every edge represents a transfer of RepRap 3D printed parts. Similar graphs describing RepRap designs are found here and here, and a graph for RepRap machines is found here. As far as I know, the person-centric graph in this figure is unique.

I set out to optimize the chaotic and distributed RepRap production and discover that I can do so by optimizing RepRap Assembly Workshops, and particularly the software that they use. I collect all the data I can find about RepRap Assembly Workshop arrangements on the Internet. See my data in good looking pdf here or in practical spreadsheet here.

I end up packaging Marlin, Arduino IDE, Slic3r, Printrun and OpenSCAD in a live OS. Open Source Ecology tested the live OS for me, and they liked it quite well. I've also used it myself in a four-day 3D printing course for kids this summer, and I found it handy. Technical details of the live OS is another post, but files are hosted here.

That was my little story line, hope you liked it and look forward to some more technical stuff in the coming months. Download thesis here, and presentation slides here.

EDIT 30 June: Sorry for messing up the RSS-feed. Restructured the blog to make it load faster. See list of links at bottom of page.

EDIT 7 July: Please use this thread to comment and ask questions related to the thesis or this blog post.

- tobben

Update and Clerck Build Instructions


I've been working on Open Source Ecology 3D printer workshops (see my work log for exactly what I've been up to) the past month, and will continue to work on that until mid summer.

Clerck would love to be developed further by anyone even if I'm on another project right now. The following instructions should not be considered "the ultimate way", it's simply how I did it on my first try with the prototype. The best absolute source of Clerck information is the OpenSCAD files in the Github repo. A special branch was created for this build manual, called build_maunal_0. Hangprinter.scad is the most high-level entry point.

This build manual will be short and terse. Ask questions the forum thread to fill in knowledge and information gaps.

Clerck Assembly Manual v0.1

Step 0: Sourcing

For vitamins bill of materials, see the Appropedia article. Some info on hardware specifics is found in used_hardware directory in repo. For printed parts bill of materials, search stl directory of build_maunal_0 branch in Github repo for the shown STL files. You'll also need the Hangprinter-Marlin firmware. It's in the firmware folder of the repo.

Step 1: Cut Lines to Length and Tie to Spools

Cut all nine lines to desired lengths. If you know the distances between the origin (middle of print bed) and the mounting points (walls and ceiling), then you can use those to calculate good line lengths. I use twice the origin/wall-distance plus ca 1.5 meters along all axes. As there are 4 movement axes on this printer, there will be 4 lengths. We call them the A-length, B-length, C-length and D-length.

Illustration associating each of the letters "A", "B", "C" and "D" with a corresponding anchor point. The bottom plate (largest printed part) has A, B, and C inscriptions on it, indicating which side should face which wall-mounted anchor point.

After this step you should have:

Tie the A-length lines onto one spool, then the B-length lines onto another spool etc.

Illustration showing one line tied into prepared holes in spool. Lines will not be shown in subsequent illustrations.

Step 2: Assemble Spools and Gears

Use short (6mm?) M3 screws and nuts to assemble all four spools and large gears. Flatness of top or bottom surfaces of geared spools is important. Be sure that no screws or nuts protrude more than ca 0.5 mm.

Step 3: Sandwich Spools, Gears, Bearings and Spacers onto Bottom Plate

Exploded view of the stack of spools. From the bottom up: 608 bearing, geared spool with D-line, spacer, 608 bearing, geared spool with C-line, spacer, 608 bearing, geared spool with B-line, spacer, 608 bearing, geared spool with A-line.
The bearings and spacers should push-fit onto the middle cylinder of the bottom plate. Ensure that geared spools rotate freely by rotating and wiggling them by hand.

Step 4: Mount Fish Rod Rings and Stop Screw

Single fish rod ring. The most protruding cylinder should be push fit into fish ring towers of bottom plate.
One corner of bottom plate with fish rings mounted. Secure all 9 fish rings with screws and nuts.
The stopper screw and nut that can be used to lock the D-spool manually. Notice the nut trapped in the box. The stop screw works by pushing against the D-spool gear, preventing it from rotating. Use a nyloc nut in the box or remove the stop screw during printing, to avoid that the stop screw vibrates into a stopping position mid-print.

Step 5: Assemble the Tble-extruder

I used the E3D Volcano as my hot end. Its build instructions are found here. You could use any hot end, but big nozzle diameter and long melt area are key for high print speeds. The Volcano has worked well for me in that it was easy to install, doesn't clog and drools surprisingly little compared to its big nozzle diameters.

Note the white PTFE (teflon) tube guiding filament into hot end. The blue 623 bearing needs support along the direction of the screw it's mounted on. I used ca 10 washers for this.

Be warned that the forthcoming alignment task fiddly. If I had any time to work on the Hangprinter project's modules, this extruder would be drastically changed to reduce fiddlyness.

The hex head screw is pushed through a sandwich of large extruder gear, printed part, 623 bearing, hobbed insert, 623 bearing, printed part and finally M3 nut. Some washers and lots of fiddling will be needed to assure feeding hobbs, support bearing and PTFE tube align with each other.

Step 6: Mount Extruder Motor

The small extruder gear is push-fit onto the extruder motor shaft, which should have one flat side. Remove two neighbouring bottom screws from the bottom of the motor before mounting.

Align the two empty screw holes with the horizontal holes in the bottom plate. Most stepper motors are only threaded in their top piece, so the two leftmost screws in this figure need to be rather long.

Note that this step is very dependent on motor size (maybe unnecessarily so). If you have another motor than 17HS4401N, then double check that your motor fits (see lines 2, 3 and 4 in measured_numbers.scad). The extruder motor hole is created on line 262 in parts.scad, if you rather want to change the CAD file than change the motor.

Step 7: Mount Tble-extruder

Place extruder carefully so that gears roll easily, filament hole aligns with hobbed insert and edge is flush with extruder motor screw hole edge. Note that screws here are self-tapping. The distance between the bottom plate and the hobbed insert is a problem when changing filament, so some kind of guiding tube is recommended, but not yet designed...

Step 8: Mount the A, B, C and D-motors

Motor gears are push-fit onto motor shafts. The motor shafts must have one flat side.

Match motor gear height and placement with corresponding spool.

Bottom plate from above with correctly mounted motors and highlighted letters viewed from above.

Look at your printer from above to confirm you can read "CBCADAB" from left to right before preceding.

The A, B, C and D motors are mounted with three screws each. Note that you can rotate motors out of place easily by loosening two screws.

Step 9: Assemble Wall and Ceiling Parts

Let three vgroove 623 bearings hang from the ceiling plate.

I hung a wooden platform in a lamp hook avoid having to drill screw holes in the ceiling (see picture).

The wall plates have roller bearings attached to adjustment screws. Tread lines through loop holding roller bearing.

The end of the A, B and C lines are attached to the M3 screw holding the corresponding fish line ring. More details on that in a previous post.

Step 10: Mount Wall and Ceiling Parts

This is the step where you potentially do screw holes in your walls and ceiling. I use strong double-sided tape for all wall-mounted parts. Placement is really insensitive as long as all plates are, fixed and horizontal. Each side plate should be parallel with one side of the ceiling plate.

Configuration of side plates and top plate as seen from above, through a transparent ceiling...

Step 11: Thread D-lines

I rested motors on two towers of books while doing this.

Let D-lines run clockwise around spool, thread through fish eyes, vgroove bearings near ceiling and tie to the screw head that holds the fish eye.

Step 12: Mount electronics

Secure locking screw on D-spool-gear and flip the printer upside down. Mount Arduino Mega+RAMPS on an isolating plastic sheet, and mount that sheet using bottom-screws of stepper motors. I used a piece of ice cream packaging as isolation sheet.

Sorry for non-detailed render here.

Step 13: Upload Firmware

Plug in the USB cable and upload the Marlin firmware found in firmware/Marlin/Marlin. If you haven't uploaded firmware through the Arduino IDE before, it looks like shown in this video. Try to communicate with your RAMPS board through USB cable and Pronterface (no power supply is needed for this). Hangprinter-Marlin uses baud rate 115200. Unplug USB cable when done.

Step 14: Wire up electronics

For those who are new to electronics, take some time to read about general electronics safety. For examle Electronics Safety Rules for Dummies and howtogeek article on static electricity protection. Insulate the hot end. The Clerck design has a high risk of melting its own cables, which will cause fire (see forum thread).

Mount stepper driver chips and adjust Stepstick trimpots to get the right reference voltage (see Tom's video on this and Pololu's product home page). I use Stepsticks with drv8825 drivers, extra long legs and cooling ribs both above and below chip (see previous stuff).

If you connected power to RAMPS during reference voltage adjustment, pull the wall-plug and also unplug power connectors on RAMPS now. Also unplug your USB cable. Wire A-motor to RAMPS's X-contacts, B-motor to Y-contacts, C-motor to Z-contacts and D-motor to E1-contacts. Wire E-motor and hot end as shown here.

If you want wirelessness, wire in the JY-MCY bluetooth antennae as described on the RepRapWiki. Note that the antennae connection will prevent communication through USB cable as long as it is plugged in. I use Blueman Device Manager 1.23 and a Ubuntu 14.04 system for connecting to the JY-MCU.

After doing safety-checks on the electronics and power supply with your multimeter, flip the printer back into upright position and couple the power chords to the RAMPS board. When you're confident that your wiring is right, plug your power supply into the wall and feed your Clerck its first taste of 12V.

Step 15: First Movement

Connect to your Clerck through Pronterface and check that D-motor has a nice constant holding torque. Unscrew the D-stop screw and watch Clerck hang by itself. While holding a hand below it, try sending the gcode line G3 D-1. This tells Clerck to move 1 mm closer to the D anchor point in the ceiling, without recording or counting the movement anywhere. Also, ensure hot end temperature readings are sane and try to heat it to say 40 degrees Celsius.

Did it move? Did temp level out at 40? Is it still alive? Sweet Victory!

Now, don't disconnect and reconnect. RAMPS will reset upon reconnection and the D-motor will lose its static torque for a moment. This risks letting Clerck smash into the floor.

The G3-command is very handy for manually homing the printer on startup. Clerck doesn't have automatic homing yet.

Step 16: Measure Lengths to Origin

Where to measure to find the calibration value ANCHOR_A_Y of your Clerck setup. I find careful calibration measurements out in thin air to be the hardest part of a Clerck build.

See lines 96 (#define ANCHOR_A_X) and onwards in firmware/Marlin/Marlin/Configuration.h. Measure lengths from fish eye to line opening in frame parts. Arduino IDE can be used to compile and upload Marlin. For experimentation with line length configurations, use gcode M665 Q<Ax> W<Ay> E<Az> R<Bx> T<By> Y<Bz> U<Cx> I<Cy> O<Cz> P<Dz>.

Step 17: Thread A, B and C Lines

Your Clerck should now look roughly like this.

Step 18: Additions to Ceiling Plate


I use ca 250 grams of counterweight attached in each corner, with lines running along the outermost D-lines and running through the same vgroove bearings in the ceiling part.

Manual Homing with Aiming Plumb

I'm simply homing the printer using gcodes G3 (move without recording it) after powering on. The gcodes G92 and M114. To help the manual homing process, I've attached an aiming plumb to the center of the ceiling part, see picture and previous post.

End of assembly manual. Ask questions in the forum thread about the stuff that is unclear. If you're building version 2 (worm drive, more rounded bottom plate), the forum thread for that one is here. For the files used to create renderings, see branch "build_maunal_0" in the repo (link). Hope you've enjoyed and wish you all happy hacking!

- tobben


Hangprinter Campaign: Bountysource Salt

Hangprinter Project: [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31], [32], [33], [34], [35], [36], [37], [38], [39], [40]

Print Issue Solution Filter Project: [1], [2], [3], [4]

Sourcing RepRappro Mendel in Larvik: [1], [2], [3], [4], [5], [6], [7]

Archive: 2014, 2015, 2016

Github Profile: link

Vimeo User: link

Twitter User: link

Work Microblog: link

Master's Thesis: link

Linkedin Profile: link

Appropedia User: link

Company website (in Norwegian): link


RepRap Forums User: link

Forums threads: Hangprinter version 1, Hangprinter version 2

Source for this blog: Github repo

Everything on this homepage, except the videos, is licenced under the Gnu Free Documentation Licence. The videos are licenced via Vimeo or Youtube.