Mission Statement

The purpose of this site is three fold:

  • Provide a “permalink” spot for information that I frequently share.   Thus: Publications
  • Allow me to blog random thoughts.  Also Publications
  • I like the double meaning of Pub for Publication and the UK definition of a Pub as a place where a community gathers to hobnob and share.

Welcome, please enjoy; comments are encouraged.


Raspberry Pi – Shutdown before Power Off?

I’ve been involved in a lot of discussions about shutdown vs power off lately. It seems that I must be flying a nuclear armed bomber with my Pi, and flying it right over the home towns of the other folks in the discussions. Because they sure are offended that I might just push that power button and put my SD card at risk.

Therefore, I set out to put some operational statistics on the table. I built a new Raspbian Pi image on an SD card. It is an 8GB Sandisk MicroSD. Mainstream, but nothing special. Put it in a Pi 3B.

There is an overriding them here: NOTHING SPECIAL. No read-only file systems, no magic utilities, just an absolutely default out-of-the-box Pi.

Rigged it so that an Arduino controlled the power to the Pi via a relay. Wrote a very short sketch for the Arduion that powers the Pi on for two minutes, off for thirty seconds, repeat. The whole setup looks really weird because it is a super-quick rebuild of a little station that was used to reprogram speed controllers for quad copters (years ago, before you could get speed controllers that had the correct linear responses for quads). It was in a box, and already had power supplies, arduino, relays, FET for the relays (under the grey tape) so…

To have a semi-realistic read write workload to the SD, installed SQLITE3 and a bunch of things that I run on a real-world monitoring system that runs on a Pi. I ‘faked’ the sensors (really the queue senders) so that data streams in constantly. The DB is writing, re-org-ing, whatever it wants to do with itself, all the time.

Note this is NOT a “super heavy” bazillion IOPS workload. Because you don’t run those on SD. Because SDs wear out. If you NEVER powered the machine off, the SD will, eventually, physically wear out. If a Pi has a workload like that, it should boot from the SD and have the heavy IO stuff on a disk on USB.

In fact, I wonder how often a “oh look, powering off corrupted this card” is simply a worn out card? Can’t research that, so I’m staying out of that rabbit hole.

Anyway, back to the test rig. The Pi boots, merrily logs (fake) data to the DB, and, drat, every two minutes has a power failure. To help track, 90 seconds after each boot, a cron job writes a log entry to a file on a CIFS (windows) share. That log entry has the scan of the boot log that shows whether the ‘fsck’ that is performed at boot time succeeded or not; i.e. is the file system corrupted? And, really, if it corrupts beyond just trivia, the machine won’t boot. And so forth.

This test is NOT many things. It is not ‘proof’. There is no control group. I’m not comparing to any other failure rates. It is not the way that you would do it.

So what are the results? At the moment of this writing about 22:30 CDT on April 19, 2020, the Pi has powered off with no shutdown approximately 600 times. That’s about 1.5 years of daily power off.

All with no SD corruption. None. Nada. Nil. Zip. Goose Eggs. Zackenberg Ecological Research Operations. Zero Kiryu. Zilch. The number by which you do not divide.

I’m going to let it run… we will see what happens.

04-19-2020 22:30 - Approx 600 (1.5 times / day for one year)
04-20-2020 08:00 - Approx 830 (2.3 times / day for one year)
04-25-2020 14:58 - Approx 2400 (6.6 times / day for one year)

Still clean. Still the number of corruptions = The number by which you do not divide.

At that point, I ceased trying to make it fail. For me (YMMV), powering off with no shutdown is acceptable operational risk. SD cards fail for many reasons; always have a way to recover, such as a backup or rebuild.

Crane Quad from M3D – Part 1

I kickstarted (or whatever it was) an M3D Crane Quad a couple of years ago. Received it a couple of years later, which was about three weeks before this post.

This is marketed as a color-mixing printer. It uses Cyan, Magenta, Yellow, and Clear filaments, all going into one head with one melt chamber. Some of you will recognize those as “Process” colors (except clear is usually black in process printing).

By mixing these at print time, the Crane Quad should be able to print thousands and thousands of colors. And it (sort of, occasionally) does.

Before we discuss the print head and color mixing, a few other pros and cons. First, the cons.

This printer is flimsy and poorly implemented in every way. Were I a decision maker at M3D, I’d be embarrassed to ship my (supposedly) fantastic print head atop such a poor platform. It is a bedslinger in the traditional RepRap/Prusa/CR10/… format. Nothing wrong with those, in fact some variant produce fantastic quality. Not this one. Cheap wheels, poorly spaced thin metal shapes, everything as flimsy as possible. Very infirm feeling printer when you handle it.

I realize that every dollar spent or saved on the internal cost of a consumer item that will ship 10,000 units is 10,000 dollars of pure profit. However, there are plenty of places in this particular printer where starving that last little bit of cost makes the usability and quality very questionable. Balancing cost and quality, this printer would benefit from just ‘a few dollars more’ (hey, wouldn’t that be a great title for a movie?). In turn, this would do wonders for the customer/consumer. Here are a few examples:

The bed came out of the box begging to create a short and damage the controller board. I used liquid tape to prevent future problems.

There is no bracing anywhere, just 2020 profile pulled against each other with bolts. Even the fundamental design gets into the act, with the spacing on the wheels being such that, even if the stamped steel were thick (hint: it’s not), the geometry still wouldn’t be stable or rigid.

The bed itself is aluminum, and a fiberglass sheet and a sheet of black ?PEI? (or similar) is provided, along with four small binder clips to hold all that together. Worst combination I’ve ever seen. Bed leveling is completely manual, and the thumbwheels provided are the smallest possible that still fit the bolt. These small bolts are hard to turn; given the incredibly weak brackets and wheel assembly that slides the bed, turning a bolt causes the bed to move all over the place. Leveling is quite frustrating.

OK, I’ve probably clearly communicated: The printer itself is the poorest of the poor.

In addition to being cheaply made, there were plain QC issues. The carriage holder was so bent the wheels would not engage the 2020 profile at all. And this holder shipped in a VERY protected part of the shipping box. There is no way this was shipping damage; this thing got packed like this. Ick.

The bed subframe was not bent, but it was off the rails… (just like the rest of the printer).

On the Pro side, they did choose a Duet Maestro controller. These are the lowest end controller in the Duet lineup, and that entire lineup represents some of the premier controllers in the 3D print industry. Network attach (Ethernet only, in this case), Web interface for upload, print, monitor, manage the printer. All configuration is done via commands and/or files, never a need to recompile the firmware. Moment to moment operation via a screen, knob, clicker on the front of the printer. Full 32 bit controller. Very active developer and support organization. Overall an excellent choice by M3D.

Summary: Good controller, weak mechanics, all supporting a color mixing head. More about that head in Part II, here.

Crane Quad from M3D – Part 2

Part 1 of this review is easily summarized: Good controller, weak mechanics, all supporting a color mixing head.

Let’s talk about that head.

Ever heard of the subreddit ATBGE? Awful Taste But Great Execution? This is sort of the opposite. GCBAE. Great Concept But Awful Implementation.

The concept behind color mixing is great, and when you get the thing loaded and working and it continues to work through one whole print, the results can be stunning. Here are a few pics from their web site:

The head itself has four small geared extruder motors that drive filament into a common heat block / mixing chamber. This cutaway gives you some idea:

The nozzle fits the heatblock so well that you might think it is all one piece; in reality, the nozzle IS replaceable (with their proprietary part only).

Any mixing printhead has an interesting limit: All the inputs MUST have filament in them, or feeding filament will force melt back out that empty input. M3D publishes good instructions to help avoid this. Nonetheless, I managed to jam an input in the first few minutes of trying to load the printer.

That led to about two hours of disassembly, understanding the head, and trying to clear the block. The documentation here is severely lacking. There is some information on changing a nozzle, and I used this to get the nozzle and heat block assembly out. Clearing the block ultimately required heating that assembly, holding it in pliers, and jamming a hex tool that just happens to almost exactly fit a 1.75 hole. With four holes, there is a certain amount of “whack a mole” to get everything cleared at once. A lot of working with this eventually got all four holes where they would pass filament.

This is NOT FOR THE FAINT OF HEART. This thing is going to require advanced 3D printing skills and/or mechanical skills to get it to work at all. I came very close to damaging the white plastic insert, very close to the first print not happening at all.

With the printer now loaded and able to feed all four filaments, I started their sample print, the spiral vase. Getting layer 1 going on the manual leveled bed took a couple of tries, but nothing too serious.

Once I could see that the print was proceeding I left it to finish over the next several hours (NEVER leave a brand new printer completely alone… my phrase ‘left it’ means that I turned my attention to other things in the Bat Cave; I was always in the same room and within about 20 feet of the printer).

Result? Fairly OK-Ish for most of the print, the top 1/2 inch or so was completely de-bonded for unknown reasons. Their filament, their printer, their sample pre-sliced file.

And… the print stuck to the black print surface quite firmly. I finally chiseled it off to get the print itself free. I still have not gotten the circle of plastic, THICK circle of plastic, off the bed. Again, their filament, bed, and temperatures. This is completely unacceptable, to ruin the bed on the very first print.

Summary: Head is VERY finicky to get loaded, didn’t even make it through the sample print without jamming, and requires mad skills to unclog. Bed material grabs supplied filament so well it ruins itself.


I’m glad I didn’t pay a lot for this thing. I’m trying to decide now how much more time to invest. I may be hard headed enough to print the fish, because my wife thinks it is cute. After that, the idea of spending all the loading/unjamming time on a regular basis… no thanks.

Anycubic Kossel Linear Plus to Duet3D – Part 7: Initial Configuration

I found the Anycubic repository on github, and looked at configuration.h to find a few starting values for the configuration.  I put these values, and a bunch of “reasonable guesses” into the RepRap Firmware online configuration tool, and downloaded this zip file

Since I did all that, you don’t have to…  the above is so that you know how it happened if you ever want to re-do an initial configuration for a slightly different printer.  Instead, just download the zip file (last link above).

You can look inside it if you wish… but the real goal is to upload it to the Duet board.

In the “Getting Connected” guide in the prior step, you learned how to open the “Duet Web Control” (DWC) to your printer.  Open that now.

Navigate to SETTINGS, the GENERAL tab, and click the a large blue button “Upload File(s)”.   Upload the entire zip file.  (Do not unzip it).

The Duet will offer to reboot.  Click OK.


Anycubic Kossel Linear Plus to Duet3D – Part 4: First Power Up

1) Power on

After checking all wires AGAIN, and with the bed set aside where you can see the Duet board, attach the power cord and press the power on switch.  KEEP your finger on the switch and if you see, hear, or smell ANYTHING you don’t like, turn it off immediately.

2) Verify Lights

You should see the red and blue power/status lights on the edge of the board (top edge in the picture below) come on and change for a few seconds as the board boots.

You should see at least three of the four endstop lights come on (the fourth depends on your z-probe, more about that below). These are red lights between the motor connectors (lower right edge in the photo below)

3) Test Switches

Use your fingers to press each endstop switch at the top of the tower.  One of the lights on the board, near the motor connectors, should go off and on as you click the switch.  It should stay on when you release the switch.

Use your finger to press the Z-Probe switch.  The fourth light should change.  It may be on or off when you’ve released the switch (more about that later).

4) Celebrate!

Seriously.  Power off, take a pause, say “WooooHooo” loudly enough that your family looks at you funny, have a beer, whatever works for you.

Click Here for Part 5

Anycubic Kossel Linear Plus to Duet3D – Part 3: Wiring

Wiring and switching the boards:

1) Remove the old TriGorilla board

Hint: Label the motors X, Y, and Z, per the way they were plugged in originally by the factory.

Power off, remove the power cord, lift the bed, and unplug everything from the existing tri-gorilla controller board. Remove the TriGorilla (main controller) board.

Remove the LCD from the front of the printer. It will not be re-used.

2) Mount the Duet board.

There are numerous mounts on Thingiverse that could be adapted. I chose this one and then modified it by cutting a square out of the base, both to eliminate the “logo” and to speed up printing. Note this does NOT “present” the SD mount and USB “through the rail”. The need to reach these on a Duet is so rare that I am fine with having to lift the bed to access them.

3) Wiring motors, re-using connectors. 

First, plug in the motors using existing cables. If you look, the holes for the pins are much nearer one side of the plug than the other. Orient the narrow side toward the “tab” on the Duet board. X, Y, Z and E0 are all labeled on the Duet board. Leave factory jumpers in place on the Duet dual Z connector.

4) Wiring endstops, connectors MUST change 

The supplied AKL endstop cables have two-pin connectors. The Duet board REQUIRES the two pins from a microswitch be the “outer” two pins of a three pin connector. Therefore the connectors must be changed.

The “Duet” way to do this is to cut the two pin connectors off, crimp on new “fingers”, and insert these into the outer two pins of a three pin shell. The pins and shells are all provided. These are NOT polarized.

I happened to have a bunch of “Radio control style” 3 pin shells, which are compatible with the “pins” that are in the AKL provided shells. Therefore, I pulled the pins out of the two-pin shells (by lifting the plastic tab with the tip of a scalpel or x-acto) and re-inserted those pins in the outer two slots of a 3 pin shell.

This photo shows one of the AKL provided two-pin shells still on the end of a cable, the Duet provided 3-pin shells and pins, and the “Radio Control” style 3-pin shells that I happened to have.

You will change FOUR cables. The three that come from the X, Y, and Z towers, as well as the one that is in the bundle coming from the effector. That is the “Z-Probe” wire.

These are NOT polarized. Although, if you are OCD, you may wish to be consistent.

After you’ve changed the connector, plug the enstops in as shown in the photo. Remember the hint to label your motors? You can follow the endstop wire from a tower and motor label to know where to plug it.

Plug the cable that is in the bundle from the effector, the “Z-Probe” wire, plug that into the E0 endstop. The photo only shows three of the four. These are NOT polarized.

4) Wiring fans, connectors may or may not change 

The AKL fan connectors will physically fit, sort of. Best practice is to cut them off, and wire two-pin connectors as provided by Duet. These ARE polarized, look at the photos or a wiring diagram of the Duet.

If you do re-use the AKL connectors, the way they must go for correct polarization requires a bit of force-fit and risks breaking the “tab” on the Duet board. I chose to be lazy, re-use the AKL connectors, and I did indeed break one of the tabs. You can see it in the second photo.

Fan 0 on AKL goes to Fan 0 on Duet.

Fan 2 on AKL goes to Fan 1 on Duet.

4) Other wiring from the Effector

The thermistor wire (skinny white pair) is not polarized and plugs into thermistor 0 on the Duet. See photo.

The heater wires for the effector hot-end come from Anycubic as bare wire that has been soldered into one bundle. CUT THIS OFF. Ideally, attach crimp-on connectors… if not, just twist the bare wires. Put these in the screw terminals for Heater 0.

Neatly bundle the excess effector wiring and secure it with a small wire-tie. It is also good practice to secure the spiral wrapped bundle to the frame, in order to prevent long-term problems from repeated flexing.

Check all wiring carefully against these photos… we are getting close!

5) Wires from power supply, connectors should change 

The AKL power supply wiring has three things that will need to change: It is very likely not long enough to reach the power connector on the Duet, it comes from the factory with soldered ends, and it has two positives (red) and two negatives (black) where Duet needs only one of each. (And you can’t leave the other set just floating around).


Remove the power supply completely from its mount, remove the end-casing, remove the four existing low voltage wires (two black, two red).

Make new, longer wires, one black, one red. Ideally, use crimp on connectors, “spade” on the power supply end, and “bootlace” on the Duet end. If this is not possible, use bare twisted wire. DO NOT solder.

Since I’d already changed the existing wires to bootlace crimps, I re-used the existing wires by cutting them up and solder/heat shrink the pieces to make them longer.

Connect these to the big green screw connectors labeled “VIN”. These ARE polarized and are one of the MOST IMPORTANT polarization connections to get right. Check it carefully.

Photos below.

6) Wiring from bed, connectors should change 

Cut the soldered ends off the bed heater wires. Crimp on bootlace, or just twist the bare ends. These go in the other big green connector, marked for the bed heater, and are not polarized.

The bed thermistor (two thin white wires) go to the connector right next to the big green screw terminals where the bed heater connected.

4) That’s it!!

Check everything one more time, then power up and get ready to configure.


Click here for Part 4

Anycubic Kossel Linear Plus to Duet3D – Part 2: Stock “Gotchas”

The documentation for physical assembly and wiring is EXCELLENT.  Large illustrations of steps; hardware in bags. Assembly is straightforward and only took a few hours, maybe three or four, to first power up. There were a few things to note:

The first two “Gotchas” are with regard to the power supply wiring.  Anycubic sends it pre-soldered.  There are two problems with this.

1) Soldered power wires.
Soldered wires in a screw terminal results in the solder deforming over time and the connection loosening.  This leads to heat.  A vicious circle forms and there is at least some fire danger.   Bad, bad, thing in what is otherwise a very nice kit. Also, the soldered ends on the wires from the power supply are much too large to insert in the screw terminals.

2) Blocked access to power connector screw.
The pre-mounted main board is in a position that causes it to completly block one of the screw terminals for incoming power. Not that big a deal… loosen the board, connect the wire, re-mount the board, right? At the same time, this ENSURES that this particular screw will never be tightened after original build; couple that with solder/screw that works loose, and gotcha (1) and (2) synergize to be even more dangerous.

I ended up cutting the soldered ends off the power supply wires, and all the heater wires, and crimping on “Bootlace” terminals.  Some builders, maybe even most, will not have the crimp tool and terminals…

The third “Gotcha” is much more frustrating (and less dangerous).

3) Z-Probe doesn’t work.
The Z-Probe is “backwards” to the firmware with regard to “Normally Open” (NO) vs. “Normally Closed” (NC). The first runs of “Automatic Leveling / Set Z height” resulted in a Home, a bunch of wiggles, and a reboot. Sigh…

It is possible to correct this by inverting Z+ pin in firmware, or by changing the microswitch in the probe. I chose to change the physical probe. Mainly because it was shipped as NO and that is the same as a probe not plugged in at all… I specifically desired NC so that a broken wire or loose connection would behave as though the probe was already triggered. Keeping in mind the long range goal is to install a Duet controller, I wanted the probe to be NC for the Duet as well. The Duet will work with a probe either way; again, I want broken/missing to be detected, BEFORE a nozzle crash.

If you choose to modify the probe, open it up, then cut the trace going to the “furthest” pin on the switch, and solder a wire to the center pin instead. Use a SMALL wire; it has to fit in a channel in the aluminum chassis of the probe.

This is frustrating because the instructions are very clear about how to auto-Z-calibrate and auto-level. This is one of the most important features to make a Delta acceptable to people who’ve never had a Delta before. The failure mode, just wiggle at the top, is NOT illuminating to the actual problem… Sigh…


Click here for Part 3

Anycubic Kossel Linear Plus to Duet3D – Part 1

There have been a lot of posts on the Duet3D forums about converting “Anycubic Kossel Linear Plus” printers by installing a Duet controller.  The price of an AKL+, shipped, falling near $200 US probably has a lot to do with this.

I have an AKL not Plus, and it has been an excellent little printer.  I also happen to have a Duet WiFi available at the moment. Therefore, I decided to get an AKL+, and convert it to Duet control.

Step 1 of that conversion: Be sure it works stock out of the box.  Ordered on June 24 2018 via the Anycubic store on AliExpress, delivered on Jun 28th.  $221, shipped.  Four days to Texas.  Not bad!

The degree of pre-assembly has gone WAY up since I bought my non-plus in Sept of 2017.

Open box and find everything nicely packaged.  Even a full Kilo of Filament under the cables.

Main board is installed, heater is on alu plate, horizontal extrusions are assembled into corners forming triangles, motors and idler pulleys are installed, effector is completely assembled with hot end installed and wired, diagonal arms are installed to effector and carriages, and more.

This will be a snap to assemble.  Hardly need the manual… but I’ll check it carefully to see if there are any “gotchas” for beginners.

And… hardware is now packaged in separate bags by step.  Very nice.


Also, the linear slides “feel” nicer than the ones on my prior Anycubic Kossel.   Maybe luck of the draw; maybe an improved part.


Click here for Part 2

Some upgrades to the BFD

The BFD (Big Fast Delta) got moved across the room, for reasons unrelated to the printer itself.  On the way, I broke the one diagonal brace it had installed.  It was always planned to have three… but I installed one, started printing things, and never went back.

Many large Deltas have diagonal braces made of aluminum.  I didn’t like the look of that, so I elected to brace with non-stretch fishing line.  There are many choices, I used “Berkely SpiredWire Stealth-Braid” 60 lb test. Primarily because it was on a peg at a local WalMart.

I designed “Winders” to provide even tension.

This seems to work.  Wiggling the frame with no braces results in a lot of movement up top.  Wiggling the frame with the lines installed results in lifting the lower corners.