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 (OpenSCAD source) 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.

Hardware and software are working as designed now.
The current focus is on dialing in the tripod kinematics and homing settings, and then generating a methodology for others to use to do the same.


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

  • It's a drag

    Daren Schwenke6 hours ago 0 comments

    Got the machine leveled enough to try something.

    I wanted to see if I could do some wood burning with the print head.  I could do it without having the extruder finalized and it would tell me how good the leveling was.

    It made some nice scratches in the wood, but no burning actually happened.  I guess 300C is too cold.  It also pointed out I had swapped two of my axis so prints were backwards in the X direction.

    I tried a little more down-force and I could see the print head start to lag behind the intended position.  The cables were stretching.  Granted I was dragging the print head through wood so not really a realistic printing scenario, but it got me thinking.

    I believe having the nozzle hanging significantly below the attachment point of the cables is not the best arrangement.  I'm losing some vertical build area in that way too.

    Raising it up will result in an overall larger footprint for the end effector which will mean parts printed "one at a time" will need to be further apart but I can live with that.

    It's also a lot more complicated shape as the v6 J-head I'm using will now be inside the end effector so the push rod U joint will need to span it.  I'll also need to make the fan cowling part of the end effector.  

    It can be done though.

    So I'm doing it.  WIP

  • INI settings

    Daren Schwenke2 days ago 0 comments

    Came up with my best guess as to how to generate the settings I used in the INI file from the physical machine and documented them.  Software source updated in the Github repo.

    The settings are inter-dependent due to the tripod kinematics.

    A group of settings that results in a flat coordinated move at the bed won't be flat at Z+100 if I don't have them all right.  If it's not flat everywhere, then scale will be off as well.

    So, I still need to mount the bed and be able to fine tune the leveling it so I can take good measurements at multiple points and at least two heights to check my math.


  • Homing and first coordinated moves!

    Daren Schwenke4 days ago 5 comments

    I was able to get the inverted tripod kinematics dialed in enough to home the machine.

    It looks like my beads on the push-rod cables idea for end-stops is going to work out just fine.

  • Kinematics success.

    Daren Schwenke5 days ago 1 comment

    I got inverted tripod kinematics working, and in the right direction! 

    *cue applause*

    Eventually I gave up on figuring out how to make tripodkins invert on it's own, and just changed the source so it was always inverted.  

    This of course still didn't work, because the initial values I had chosen for some of my parameters were so far off that they put tripodkins in the realm of mathematical impossibility.  But I digress..

    Kinematics at least is all sorted now.  I'm hoping I can go back to normal tripodkins and it will invert now on it's own so no compiling for people.  We will see.

    Homing works, and it's roughly dialed in.  I changed all the lines so they aren't all tied together in at least one point now.  :)

    300mm/sec motion is flawless and smooth, my steppers are still turned down to just 1.2A, and it's hypnotic to watch...

    It's also really dirty as it got sprayed with sawdust while in the garage, so no video until I clean it up.  Tomorrow.

  • I wanna go HOME

    Daren Schwenke11/11/2017 at 04:13 3 comments

    The tripod kinematics is giving me a headache.

    Machinekit tripodkins is modeled as struts, not cables.  This means that reducing all the struts lengths is a move which goes down, not up.  I need the other direction.

    So what I really need is inverted tripodkins.  

    Running inverted looks like it is already handled in the code, but it's not something you can just select.  You just have to present it with the right situation, and it happens.

    Well that's all good in theory.  Starting below the XY plane, which according to the source looks like the trigger, results in the machine going into estop with joint following errors.  Many hours of flipping signs and switching directions on everything has yielded no results yet.  Many 22kg test lines have been snapped in the process.

    There seems to be zero examples online of using tripodkins in Machinekit in this way.  My googlefu is strong, so I've really, really looked.  I know it's been done.  I've found many projects which did it.  Problem is apparently none of them committed their configurations to the ether.

    Then there is homing.  I had it sorted.  Of course this was before I realized the entire machine was upside down.

    I'll just have to figure it out.

  • Extruder v2

    Daren Schwenke11/09/2017 at 04:57 0 comments

    Finished printing the new extruder and assembled it.  Still used the left-over stepper and tensioner parts I up-cycled from the M1.

    Also modeled and printed a new rounded nut for the extruder tension bolt as the old one was tearing up my fingers.  

    I left a single layer of extrusion for bridging where the bolt head ends.  It's simple to drill out by hand and results in a much cleaner print.

    Much better on the fingers too.

    Hardware source updated in Github.

  • Rock and Roll extruder

    Daren Schwenke11/07/2017 at 09:31 0 comments

    I decided earlier to take the extruder off the push-rod.  It just added too much mass for me to be happy with it.

    But with a little trickery here, I believe I can keep the same length bowden tube by hanging it from one of the octahedral rails.  

    This requires that it can pivot freely though.  To pivot freely, the pivot point has to be on it's center of mass.

    So, I made a new extruder mount.

    For now I'm just going to hang it with a wire hanger.

    Hardware source updated in Github.

  • It moves

    Daren Schwenke11/07/2017 at 03:23 0 comments

    Got the PRU pwm/stepgen issue sorted finally.  So ends four days of switching kernels, distros, and finally configs to find it was something simple.

    I was using the wrong pin modes in the file which sets up the pins.

    One end-stop is dead, the kinematics are still screwy, and the interface is built for a Cartesian, but this is progress.

  • highlighting test.

    Daren Schwenke11/04/2017 at 19:38 0 comments

    This is just a test of abusing the hljs css tags to get text highlighting that the editor won't blow away.

    I removed the ones which seemed to have no effect.

    Use like this: <span class="hljs-keyword">Your text</span>





















  • I need a scope.

    Daren Schwenke11/04/2017 at 17:58 1 comment

    Sorted the estop issues.  It starts up, powers up, and estop does what it's supposed to.

    Either I wired the entire machine wrong, or now the PRU isn't generating step or PWM signals on my pins.

    Everything in software now suggests it should be working..

    My CRT oscilloscope is dead and given it was never that good to begin with and from the 1970's, I'm not fixing it.

    So begins the task of looking for high frequency transitions on pins with no scope.

    EDIT: I clipped off an 1/8th in headphone wire, probed the pins, and recorded the audio via Audacity for a ghetto scope.

    Nope.  No PRU step or PWM output.

View all 40 project logs

Enjoy this project?



Steven wrote 10/21/2017 at 21:23 point

Keep up the great work! I'm checking back daily to see how its going and I cannot wait to see it move and then print!

  Are you sure? yes | no

Daren Schwenke wrote 10/22/2017 at 01:44 point

Me too!  It's so close..

However, I'm out of time for Teen Groot so I have to switch gears for a day or two until I can wrap that up.

  Are you sure? yes | no

Idris wrote 10/21/2017 at 13:20 point

Great project.
I'm looking at your pulleys and virtual inverted pulleys and thinking about wear on the thread how smoothly they run over the surface of the plastic.

I came across ceramic thread guides for sewing machines on aliexpress, I wondered whether they might make for a smoother surface for the thread to run over?

  Are you sure? yes | no

Daren Schwenke wrote 10/21/2017 at 15:25 point

That's pretty neat.  I'd have to think about how that would affect the math due to the increased hole size unless you used a pair and put a set them after the top pulleys.  With the forces involved I imagined printing them out of nylon would have helped greatly too. Problem was when I did the entire end effector out of nylon, it wasn't stiff enough so they would have to be 'drop in' like your ceramic guides anyway.  Alternately the M2 ( could have actually printed them as a single part in a gradient blend, but I wanted to keep this project accessible. 

The existing lower virtual pulleys don't get any translation movement so I'm hoping the lubricity of the line is enough to prevent significant wear for a while.  

I'll run it until it fails and we'll see what happens.  :)

The line itself is cheap to replace and 110 yards was enough to replace them all 7x for the original $9 spent, but I imagine the top of the virtual pulleys themselves will wear as well and need replacing along with the lines.

It's gotta move on its own first.  :)

  Are you sure? yes | no

Idris wrote 10/22/2017 at 11:15 point

I was thinking you could remove the pulleys entirely and have the same geometry both at the top and bottom of the thread, I think that would eliminate the wrapping/unwrapping length changes but also remove any issues with the thread leaving the pulley at an angle when the effector isn't centred.

  Are you sure? yes | no

Walter Schreppers wrote 10/13/2017 at 15:50 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 10/13/2017 at 18:57 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 10/12/2017 at 20:33 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 10/12/2017 at 20:51 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 10/12/2017 at 19:03 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 10/12/2017 at 19:49 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