Contact, archive, etc
Reprap blog

A Little Work on Line Flex


Today's Hangprinter firmwares assumes no flex at all in the movement axes. This is obviously a very rough approximation. In reality, all Hangprinter axes act like springs. Accounting for this can win us several millimeters of accuracy near the limits of our reachable print volume.


Some flex comes from line modulus, but adding infinitely stiff lines alone won't solve our problems because ceilings, floors, ceiling unit sheets and plastic parts also flex. Very stiff lines are also thick, building more on the spools and making the imperfection of our buildup compensation more severe.

Another brute force solution would be to closely monitor the mover and constantly compute and execute ad-hoc compensation. This could be made to work well, but it would add to hardware cost and complexity.

A third solution is to include flex in the firmware's internal model of the movement system. This keeps hardware simple. Configuration overhead must be minimized by using standardized parts and providing scripted and straight forward instructions.

It would be possible completely circumvent configuration overhead by collecting flex data with force sensors. This would require extra hardware, which in turn would have to be configured. It is in the spirit of the Hangprinter Project to make hardware additions beyond the bare bones setup optional, and solve as much as possible in software.

Use The Force

The scribbles below derive how to synchronize the four forces from the four motors, so that all lines can be tightened or slackened, without moving the mover. A force magnitude can be approximately mapped to a line shortening/elongation by using Hooke's law, where a guessed or measured Young's modulus gives the spring constant \(k\). Note that the spring "constant" will vary with line length in our case.

The no-flex line lengths that current firmwares calculate can be used to calculate a new line length that does (approximately) account for flex:

\begin{equation} l_{acc} = l - F/k(l), \end{equation}

where \(l_{acc}\) is the new line length that accounts for flex, \(l\) is the line length calculated and used by current Hangprinter firmwares, \(k(l)\) is the spring constant of the suspended line, and \(F\) is the desired force to be exerted by the line. The four different forces \(F\) are called \(A\), \(B\), \(C\), and \(D\) in the derivation/scribble notes below.

The mover is approximated to be a point mass. The six forces acting on the mover are drawn out in a beautiful hand made 3d visualization. It is not true that we must set one of \([ABCD]\) fixed. That is just one of many possible ways to constrain the system. Setting \(D=|\vec{D}|\) to be constant was just the most useful constraint I could come up with. Note that \(m\vec{a}\) will not be zero during a print, since the mover will be moving around. It is however easy to re-introduce into the calculations below, right beside \(m\vec{g}\) and \(\vec{D}\).
Thanks to my professors for drilling me in manual Gaussian elimination. I never thought I would get to use it for something actually useful. Maybe I shouldn't use it. There's always sympy.
There are our expressions for the magnitudes of the (zero-acceleration-case) force magnitudes \(A\), \(B\), and \(C\).

Lots of divisions. Probably not simple enough to be done on a Atmel2560. So... What to do?

As my professors always told me:

"Taylor expand, my good boy. Taylor expand for the sake of glory and honor! Taylor expand, and use only the first two terms, because everything ... Yes! EVERYTHING worth fighting for can be approximated to be perfectly linear! I tell you, boy, if you ever ever feel doubt in your heart, just Taylor expand, and your problems will all be cake."

Ok, they didn't quite say it like that, and maybe we should use three terms, but I'll save you the expansion for another post. If you're so excited right now that you want to Taylor expand yourself: do it around the origin, and remember that

$$ \begin{align} a_x &= \phantom{\text{ANCHOR_A_X}} - x,\\ a_y &= \text{ANCHOR_A_Y} - y,\\ a_z &= \text{ANCHOR_A_Z} - z, \end{align} $$

where ANCHOR_A_X is non-existent by convention, ANCHOR_A_Y is the y-coordinate of your A-anchor, ANCHOR_A_Z is the z-coordinate of our A-anchor, and \((x, y, z)\) is the position of your mover relative to the origin.

Also remember to handle the cases when denominators are zero in a graceful way. Fancy new 32-bit CPUs can probably compute the full expressions, but they can't handle division by zero.

Best regards,

- tobben

Consequences of Miscalibrating Anchor Positions


I made a script recently, to get learn how a Hangprinter axis with bad anchor positions behaves. The script itself is here.

The Quick Take-Away:

Moving directly from/towards an anchor gives small errors, almost regardless of calibration errors.

The Details:

Four plots are shown below. Only the XY axes are shown, but the results are similar in three dimensions. Line length errors in different XY-positions are shown with color codes. They are normalized so that the error in the origin is 0 in all plots. In negative areas, the mis-calibrated axis will over-tighten. In positive areas, the mis-calibrated axis will let out too much line. Click the plots to get larger versions.

In this plot, the anchor is located at (-700, 700). The black arrow shows a measurement error of (-97, -97), so the machine has been configured with anchor locations (-797, 603). In the point (-500,0), this mis-calibrated axis will end up with 65 mm too short lines. In (0, 500) however, it ends up with 65 mm too long lines.
Anchor location: (-700, 700)
Measurement error: (-99, 99)
Configured anchor location: (-799, 799)
Error at (-500,0): 15 mm too tight
Error at (0,500): 15 mm too tight
Anchor location: (-700, 700)
Measurement error: (98, 99)
Configured anchor location: (-602, 799)
Error at (-500,0): 67 mm too long
Error at (0,500): 66 mm too tight
Anchor location: (-700, 700)
Measurement error: (98, -99)
Configured anchor location: (-602, 601)
Error at (-500,0): 21 mm too long
Error at (0,500): 22 mm too long

- tobben

New Extruder Holder Bracket


I've converted the extruder_holder bracket to be ziptie based like the rest of the mover:

Render of the new extruder_holder.

It is a great deal sturdier than it's screw-clamping predecessor. I tested lots of little tweaks to find the stiffest solution around all axes.

Four slightly different extruder holders lined up for flex testing.

The motor was possible to tilt downwards no matter how I changed the model it seemed. The winning tweak turned out to be adding a third ziptie first. Like this:

And to tighten the third ziptie with a wedge. Like this:

The end result is dead sturdy and looks like this:

All new files and are published to the working branch of the repo: Openscad_version_3.

- tobben

Ziptie Mover


I've implemented Tom's suggestion to use zipties on the mover corners.

Ziptied mover.

Using zipties in stead of screws has some advantages.

I also find it easier to assemble since there are no fiddling with small screws and nuts.

Ziptied mover corner. The zipties' heads wrap around the sharp corner of the wooden beam.
Zipties of width 4 mm gives the most sturdy mover, but I've found sizes down to 2.4 mm (like in this picture) to work well.

For wooden movers, I've also thrown away the old beam_clamp. It's both more sturdy and lighter to just clamp the crossbeam with a little M3 screw and nut.

Note that I pre-drilled 3.2 mm holes before inserting the M3 screw. I use washers on both sides of the hole because the pine wood is so soft.

These two improvements combined save ca 60 g of weight compared to the previous mover.

I've also added a little nutlock to beam_slider, to make it easier to tighten/untighten with one hand.

More improvements inspired by what I learned in Hamburg is in the pipeline. Happy new year!

- tobben


The Why Again


This is the 50'th Hangprinter blog post, and I think it's a good opportunity to elaborate on why I develop Hangprinters. Read more...

Time for Clones


It's been a busy month and the next one will be busy too. I've helped fredrudolf build a v3.3 (aka HP3). We're preparing a live demo at Maker Faire Rome (Dec 1-3). After that, I will help Tom create a video series on Hangprinter. Read more...

Version 3.3 In The Making


It's been a month of very technical development. I feel like I'm searching for the version 3.3 among a forest of new ideas and insights. Read more...

Benchy, Videos and Some New Code


First Hangprinted Benchy:

Version 3.2 Overview


The Hangprinter v3 has developed very quickly recently. We've been developing so intensely, we almost forgot to print a Benchy with the current prototype, called v3.2. Read more...

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. Read more...

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. Read more...

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. Read more...

Experimental Dual Unit Designs


The Hangprinter Hackathon at Bitraf produced some technical progress. Read more...

Other People's Hangprinter Builds


This beauty was posted by Mario Lucas here. This impressive bottom plate was posted by Jonathan Bahrs here. Read more...

Babel Tower Time Lapse


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

First Pull Request Merged


The Hangprinter repo on has had its first merged pull request! Committer was awigen. Read more...


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

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: Read more...

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. Read more...



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

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. Read more...

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. Read more...

Slowly but Surely


920 first millemeters of a Babel Tower in a staircase. Read more...

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. Read more...

D-Wobble Debugged


Those who have zoomed in on my Hangprints after I added the worm drive will have noticed a periodic error. Read more...

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. Read more...

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! Read more...


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. Read more...

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. Read more...

The Worm Drive Works


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

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. Read more...

Worm Drive on D-axis


The best part is that the worm is pure parametrized OpenSCAD and renders nicely. Read more...

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. Read more...

Hangprinter Calibration Manual v0.1


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

Oslo Skaperfestival 2016


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

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. Read more...

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. Read more...

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. Read more...

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. Read more...

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. Read more...

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. Read more...


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], [41], [42], [43], [44], [45], [46], [47], [48], [49]

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, 2017, 2018

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, Hangprinter version 3

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.