Arcus-3D-C1 - Cable 3D printer

3D printable, Open Source Hardware, tripod kinematics, cable driven 3D printer

Similar projects worth following
This project aims to be a very low cost portable 3D printer with a scalable build diameter and reasonable accuracy.

The design as rendered can scale from about 200mm to 600mm build diameter with the same parts just by using different length connecting rods. The build height is approximately equal to the build diameter.

The printer can also be 'flat packed' for transport by removing the vertical rods as just the system tension holds them firmly in place.

The initial focus is still on the physical hardware task of making things move and eliminating intrinsic errors without resorting to software compensation. The software should be relatively simple as Machinekit does most of this out of the box.


I wanted to make a simple, low cost 3D printer using the available parts I had leftover from other projects, so the C1 was born.  Designed it in my head, and then modeled the parts in OpenSCAD.  

All I didn't have on-hand was the rods (driveway markers and a garden stake) which cost me a total of $12.

 I started independently on this path, but then a forum post pointed me to the Flying Skydelta.   Awww...  It's a lot like that, with cheaper hardware.

System overview

An octahedral equal length frame made from low cost fiberglass driveway markers support 3D printed corners.  The vertical components of the frame are held firmly in place by the line tension of the system, allowing them to be removed.  This facilitates flat packing of the printer for transport.

Each of the top corners house three pulleys sharing a shaft, through which cables are routed from the base mounted spool rod and steppers.  The relatively large distance from the pulleys to the spooling shaft results in a single layer of tightly wound cable.  This minimizes the error from the cable spooling up to less than 0.012mm allowing it to be ignored.

The outer two cables are wrapped in the same direction and serve to position the print head using tripod kinematics, while the center cable is wound in the opposite direction and is routed to apply tension to a central push-rod.  So as the outer cables wind up, the central cable unwinds to maintain tension.  The top of the push-rod is free to move, so as the end effector is moved right, the top of the push-rod will pivot and move left maintaining constant down-force throughout the build area.  The opposing forces on the spooling shaft also cancel each other out, resulting in the stepper motors only needing to support the weight of the end effector and not provide any actual tension on the lines.

The required cable length is not a constant however.  As the end effector is moved up, the required cable length of this system becomes shorter.  A compression spring mounted on the push-rod serves to make up this difference and maintain tension in all the lines.

Virtual pulleys

Tripod kinematics without any compensation assumes the end connections are points in space. They are not.  Pulleys can introduce significant error into the calculations: An 11mm diameter pulley can introduce up to 5mm of error into the resulting positioning.  This happens because as the angle to the pulley increases, the cable will wrap onto the pulley which will change the effective cable length and generate a horizontal and vertical offset. 


If you use two pulleys with the cables wrapping in the same direction, this error effectively cancels out.  As you wrap up onto one pulley, you unwrap from the other pulley.

Rather than adding the cost and complexity of adding actual pulleys to the end effector, I have instead modeled the curve required to duplicate the effect of having pulleys into the top surface of the end effector, aka virtual pulleys.

There was one more issue with the kinematics as designed in that the upper pulleys do not rotate to face the end effector.  This has the effect of foreshortening the cable length when the end effector moves off axis.  This can be also be compensated for physically by altering the shape of the virtual pulley.

As the cable moving off axis from the upper pulley is causing a shortening of the effective cable length, an equal and opposite effect can be modeled into the shape of the virtual pulleys.  Essentially this compensation will result in some variation on elongating or warping the virtual pulley parallel to the axis of the actual pulley.  

I lack the expertise to properly model this system to determine the ideal virtual pulley shape, so I guessed.  It's a good guess though and gets me started.

End effector with virtual pulleys

So that means the existing tripod kinematics math can now be used as is with no...

Read more »

  • 3 × 2 pack 4ft fiberglass driveway markers $9
  • 1 × 4ft steel garden stake $2.80
  • 2 × logic level power mosfets $2
  • 1 × perf board and various caps/resistors $2
  • 1 × 12inx12in granite floor tile $8

View all 13 components

  • Thank you Machine Koder. Caution, links ahead.

    Daren Schwenke3 hours ago 0 comments

    Given I have really run myself out of time here, I have enlisted the help of one of my cohorts Machine Koder from the Machinekit world to help get the tripod kinematics configuration files sorted.  

    Sorting a brand new config out in two days, while I'm still working on the hardware, probably wouldn't have happened otherwise...

    He has put to code what I have used on many an occasion as it makes my part so much easier.

    He is also a regular contributor to the Machinekit github project and I thank him for his support.

    Machinekit configuration files for this here soon.  It's like 3am in Austria right now and even machine coders need downtime.

  • A little goes a long way.

    Daren Schwenke5 hours ago 0 comments

    My prints for the new upper corners are done.

    When I said the top corners were securely glued on, I wasn't joking.  Two drops of super glue per joint, and spin the rod before it sets.  I know this stuff works great on ABS, but the whatever the fiberglass rods are made of must react similarly cause this stuff is permanent.

    Tried to remove them by hand.  That was a kinda funny and made me feel bad.

    (miss) Used an angle grinder to try to weaken them.

    More demoralizing dancing with a seemingly indestructible triangle ensued. 

    Finally a channel locks and a meat cleaver were enlisted.

    Well at least I don't need to worry about them coming apart.

  • Push rod joint mods.

    Daren Schwenke9 hours ago 0 comments

    I've decided to not run the bowden tube down the middle of the push-rod now.

    With moving the extruder mount so it puts it's mass on the center-line of the pushrod, I would now have to cut a slot in the pushrod to get the bowden tube back out of it.  This would weaken it excessively.

    So I redesigned the push rod joint to allow the bowden tube to track along the outside and still have a relatively straight path.  Also added some integrated wire guides so the bowden tube will be retained near the rod, but is still allowed to move.

    In case you are wondering why I'm putting the extruder on the push rod tube at all, it is so I can have a much shorter bowden tube.  

    This way I get the best of both worlds:

    • A low mass end effector for faster acceleration/printing.
    • A bowden tube short enough to still be able to print flexible filaments.

    EDIT: I decided to offset the joint towards the fitting a little to give the bowden tube a straighter path.  

    The push rod won't mind.


    In case you are about to comment about my obvious stringy issue, I disable retraction for nylon (and most structural parts actually)

    My recipe for the strongest structural parts:

    • Disable retraction and increase non-printing movement speed to maximum.  A linear delta printer helps here as my maximum is 500mm/sec.
    • Over-extrude until you have obvious surface artifacts or your extruder skips. Somewhere between 5% to up to 20% is right.  All your dimensions may need adjusting...
    • Print as hot as your material/hot end allows.
    • Disable cooling, if you can.  If your parts actually start to sag due to excessive heat, slow down instead of using a fan.  Cura does this for you.

  • Center-line extruder mount.

    Daren Schwenkea day ago 0 comments

    I think I may move the extruder to half way up on the center-line of the push-rod.

    If I position it right, it won't move much and it's mass will actually help to stabilize the end effector.

    Mocked up the basic idea in OpenSCAD while my top corners are still busy printing.

  • Take it, to the limit.

    Daren Schwenkea day ago 0 comments

    Mocked up a model of a limit switch, made a matching cutout for differencing, and used that to figure out where I'm going to put them.

    I'm going to put a bead on the upper push-rod lines so that when they retract fully the bead hits the pulley and the limit switch is actuated.

    Unfortunately the best spot also means reprinting the top corners which are firmly glued on.

    I was hoping to get away with printing another part to add to the existing top corners, but that put the switches in a real ugly spot.  

    This is nicer.  Reprinting.

  • Binder clips are useful.

    Daren Schwenke2 days ago 0 comments

    The end effector needs constant down force from the push rod to be stable.  It also needs to pivot up to 30 degrees and always apply it's down force to the virtual center of the end effector.  Problem is the nozzle and bowden tube also needs to go right down the center.

    So it has a U joint.  The hinges of the joint do not need to be super accurate as they will have very little effect on positioning. They just need to carry a constant load.  To keep it simple I am using nylon filament as my hinge, but to keep my filament hinge in place it needs to be permanent.  That would suck for working on the bowden fitting.

    Binder clip to the rescue.

    But first, making the filament hinge.

    Mushroom the inner ends on a soldering iron and then put them in.

    Cut to length.  Leave about the diameter of the filament sticking out.

    Then mushroom the outer ends.  Please pardon the shaky left handed while wielding a soldering iron cameraman.

    I replaced the inner U joint hinge with a binder clip spring.  So now it's removable again for accessing my bowden fitting.  A little excessive, but it works.

    Looking good.. Now I need something that gets hot.

  • Push rod top, done.

    Daren Schwenke2 days ago 0 comments

    Mocked up a simple clamp and wingnut for adjusting the compression spring on the push-rod.

    Uses a regular M3 nut, bolt, and washer.

    Printed.  Works.

    Added to the OpenSCAD source.

    EDIT: Broke it.  Changed the design to make it stronger in that area.

  • Thank you John.

    Daren Schwenke2 days ago 0 comments

    Just saving the original article which got me serious about finishing up this project.

    Thank you John.

  • The boulevard of broken shaft couplers.

    Daren Schwenke3 days ago 0 comments

    Iterated on the shaft coupler trying to eliminate a problem which was instead the result of the knurling I had put on the AL shaft itself.  I had just pressed them in the jaws of my linesman pliers to generate the knurling, which made them wobbly.

    I was really unlucky in my initial tests and had randomly lined up the error with the flat on the shaft multiple times. When I flipped the shaft around to the smooth end, the wobble went away.  This was basically a waste of time.  

    They don't like to come off once pressed on so many of them broke.

  • You better run..

    Daren Schwenke4 days ago 0 comments

    I measured some runout on the shaft couplers.

    Discovered I had made a mistake when modeling the D shaft and corrected it.

    The new ones are printing.

    EDIT: Nope.  This made it worse.  I rotated the part 180 degrees and printed again just to make sure it wasn't a calibration issue with my printer.  It wasn't.

    I had the same result in both ABS and nylon.

    I think the part is actually distorting when I push it on the shaft due to it being a tight press fit.  

    The D shaft profile is "perfect" as designed with the flat removing 1/10th of the total diameter, but once I pressed onto an actual stepper, it warps the centerline towards the flat on the D (angularly, concentrically it's still basically perfect).  This results in my stepper wobbling about as I rotate the shaft.  I wouldn't care except that it as it does it, it also affects the line length.

    I need a tight press fit here to maintain concentricity of the stepper to the spooling rod shaft, or I will need to either nix my vibration isolators or add another bearing.  I've built some pretty loud printers in the past, so the vibration isolators are staying.

    I tried angling the D indentation slightly to see if that compensated to no avail.  I'm iterating now to see what else will correct this.

    EDIT 2: Turns out my D shaft profile was fine.  

    To give the AL rods some better grip when I glued them into the couplers, I had knurled the end with a pair of linesman pliers and wasn't consistent enough. When I turned the AL rod around to the smooth end which normally goes into the bearing, the wobble went away.  

    Well at least I got a slightly refined shaft coupler out of this little exercise.

    Saw this live when it came to Chicago back in the day..

View all 21 project logs

Enjoy this project?



Walter Schreppers wrote 5 days ago point

How does moving up in z-layers work on this one? Move the entire printer up?

  Are you sure? yes | no

Florian Festi wrote 5 days ago point

It works similar to a delta printer. Pulling in string on all three winches moves the end effector up.

  Are you sure? yes | no

Hacker404 wrote 6 days ago point

Love it!

You should be able to make the effector end of the cable connection wrap around a pulley shaped contour to get a mathematical fixed point equivalent by the effects of the contour canceling out the effects of the pulley.

Also there was a very old product that is still available called "Dial cord" that would be a good replacement for the fishing line.

+10, I would like to see the code for the kinematics when it's done, if you are going to release it.

  Are you sure? yes | no

Daren Schwenke wrote 6 days ago point

Great minds.. Just did that like 2 days ago:

Tripod kinematics without pulley compensation (which I don't need anymore) is already part of Machinekit and open source:

  Are you sure? yes | no

Sancho_sk wrote 6 days ago point

This is amazing. Thanks to the construction, this might be scaled up to real-life building printer. With the "flat pack" ability it can be transported by a regular truck. WOW!

  Are you sure? yes | no

Daren Schwenke wrote 6 days ago point

With an end effector of sufficient weight, just the six cables will do and you don't need the push-rod.  That is another one of my work in progress printers already.  :)  Yes, building printing.  Plan is once the ABS part of that one is working, modify it to do super-critical CO2 foam extrusion.  Spray/fill that with concrete, and you have a building.

All the hardware is on the print head for that one.  All the parts for that one including the controller are designed, fitted, printed and done, but I haven't had the time to post anything about it or do final assembly and testing yet:

  Are you sure? yes | no

Florian Festi wrote 10/11/2017 at 19:25 point

I wonder if disassembly and assembly would be easier if you made hinges (or ball joints) at the end of every second of the vertical beams. You could then remove the other three and then just fold down to top triangle onto the bottom one without disconnecting them.

If you manage to have the other ones also with hinges at the ends but also one in the middle you could fold and unfold the printer in seconds.

Not sure if this compromises stiffness (and ease of construction) too much. But as stiffness is created by the geometrical form and not the stiffness of the corner pieces that might just work.

  Are you sure? yes | no

Daren Schwenke wrote 10/11/2017 at 19:49 point

Every other joint pivoting down may work, and you could put a pin on the other joints to fold that one down too.  I imagine it would sacrifice a lot of rigidity to do it, but it is way more rigid than it needs to be right now.  Pivoting/twisting down would line up the rails nicely.  Those joints would be under a lot of stress though if you didn't keep the top parallel to the base while doing it.

I thought about folding before, but I was removing the top rails for it. This was of course incompatible with the later requirement of screwing down the steppers.

  Are you sure? yes | no

Florian Festi wrote 10/11/2017 at 09:08 point

To avoid creating a mess when disassembling the printer you could add small sponges or silicone lips to press on the curled up string. That way it does not unwind or go on top of itself when you remove the string tension.

You could even have them snap on the winch for disassembly only.

  Are you sure? yes | no

Daren Schwenke wrote 10/11/2017 at 13:18 point

That's a good idea too.  Running them up and down tends to realign the wraps if you are careful about limits, but not having to do that at all would certainly be better.  Sounds like a project for my spool of TPU.  I was happy I got to use it for the vibration isolators in this project already.

If I had software based current control on my steppers, I could lower the current to barely moving and just run them to retract the lines fully.  The upper line would also extend all the way, and then start wrapping in the same direction as the lower lines retracting it as well, mostly.  But that would mean using AMIS-30543 or other software controllable chips at $20 each.  Probably not the target market for this level of printer.

  Are you sure? yes | no

brz.tomek wrote 10/11/2017 at 20:50 point

I am not sure I agree- it is not hard to get software controllable chips at $10/ea. The TMC2100 to start, but also just the fact you can run a filtered signal to the Vref of a SD5984 or DRV8825 also gets you software controllable current. The way many repraps do it is to use an SPI configurable digital potentiometer to set the Vref.  Is this helpful or did I misunderstand the situation?

  Are you sure? yes | no

Daren Schwenke wrote 10/11/2017 at 21:01 point

I probably just didn't look hard enough.  I'm looking for the 2 amp range of output.  I never tried feeding vref into chips.  If you can gang them, then it just adds a cap and two resistors to get a nice stable output for all.  Something to think about.

  Are you sure? yes | no

Florian Festi wrote 10/09/2017 at 09:55 point

Wrt homing:

You can press a bead on one of the strings at each winch e.g. a fishing weight. Then have a micro switch near the top idler with a hole in a lever the string runs through. The bead needs to be positioned that the switch is triggered as the very end of the movement. The distance between the idlers on top and the winch should be less than the maximum travel distance of the machine axis.

To do the actual homing I fear there is not way around jogging the machine axis manually to some extend. What ever you do automatically might move you out of the working volume if the machine starts at the wrong place. With the end stops you at least do not need to drive to a precise location to do the homing fully manually. You could have a parking position e.g. in the middle of the bed that you have to drive to and then run the homing program automatically from there. Being off at the parking position by a few milimeters is probably not problem.

  Are you sure? yes | no

Daren Schwenke wrote 10/09/2017 at 14:09 point

I like that idea.  

Homing will still have to start with the effector an approximately set distance above the bed in the center to avoid bottoming out during homing.

Then for each axis home to the opposite bottom corner, which will pull the push-rod line in to it's lower limit, and then return it to the central raised start position. 

Machinekit should do this out of the box by setting HOME_OFFSET to the homed to line position, HOME to the center raised position, and HOME_SEQUENCE to an incrementing number. That will work.

  Are you sure? yes | no

Florian Festi wrote 10/09/2017 at 14:28 point

Well it depends on whether you have the end stop at maximum or minimum length of the cable. But you can still start at the bottom as the parking position if you want to give out cable. Just move up a bit from there as part of your homing sequence. We are going to need a custom homing code anyway as you need to change the length of the other two cable pairs. Otherwise you can't reach the outer boundaries of the build volume.

  Are you sure? yes | no

Florian Festi wrote 10/09/2017 at 09:42 point

One way around the maths problem would be to just make sure the string always leaves at the same point by funnelling it through a hole only slightly bigger than the string diameter.

I built a styro foam cutter a while ago also using fishing lines. There we routed the string just through eye hooks without any problems. So there is no reason to be afraid of the friction. Especially if the bulk of the change of direction is still handled by the ball bearings.

This is not a beautiful solutions but might just work.

  Are you sure? yes | no

RigTig wrote 10/09/2017 at 11:30 point

Nice idea, Florian. Certainly been used on some 2D printers (drawing machines on strings), where motors are at the bottom of the (nearly) vertical board and run up to the top before going to the gondolier.

One question to think about is whether the error caused by the offset around a winding core is significant enough to warrant a patch. I suspect that the difference between the 'perfect' calculation and the approximate one might be less than the extruder nozzle diameter for all locations but a few extremes.

  Are you sure? yes | no

Daren Schwenke wrote 10/09/2017 at 13:53 point

Some quick math says the winding core will only introduce an error of up to 0.012mm at the extremes as designed.  However, the pulleys at the top can introduce an error of up to 6mm.  I'm ignoring the core, correcting for the pulleys.

  Are you sure? yes | no

Daren Schwenke wrote 10/09/2017 at 14:07 point

I built a prototype using zip ties, eyelets, and wooden dowels to try to find an alternate cable routing which would minimize the difference in line length between the extension of the pushrod lines and the retraction of the lower lines.  The best solution I came up with was also the simplest with just extending the pushrod a little.  It also taught me that the eyelets tended to stutter and grab when I increased the tension in the lines.  

Granted I didn't have pulleys at all for my 'prototype', which would probably reduce this tendency a lot.

Higher tension becomes more important at the extremes as the angle of influence of an axis will be reduced.  So I'm looking for the mathematical solution first.

  Are you sure? yes | no

RigTig wrote 10/05/2017 at 06:56 point

Definitely looking forward to see this design come to fruition. My own efforts have been very slow, having started several years ago (see Rigtig's Big 3D Printer here on HaD-

Another design, called HangPrinter, has the string motors on the effector: there's a link to it in comments of my HaD stuff. I found the source at I remember tobbelobb describing adjustments to calculations for string lengths depending on how full the reels are, so there might be a clue or two in there.

I haven't seen any broad-based driver for triangular printers (Cura, Repetier, etc) but as long as the GCODE interpreter handles the basics, any driver can be used. Just make sure that you are inside the triangle. 

If you'd like any hints from me, either PM or just comment here. 

  Are you sure? yes | no

Daren Schwenke wrote 10/05/2017 at 07:18 point

Using Machinekit, tripod kinematics is part of the standard stuff. Have not built that part of the config yet, but it should work fine when I do.  Homing will be interesting and I have no idea there yet.

The first battle was getting Machinekit working at all on the BBGW (for my other WIP 3D printer, the E1).  It also has everything on the print head, but is pellet fed like a Lyman extruder turned on end.  I haven't really documented it here yet, and it's mostly done, but completely untested and may very well meltdown on first power up.  3D printing a Lyman comes with issues.

Problem was only the newer kernel supported the wifi chip and the flavor of Xenomai Machinekit used would not work there.  Finally got an rt-preempt build running on the newer kernel a few weeks back and Machinekit works now..  Virtually the same config will run this, and this is more likely to work the first time, so starting here.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates