From RepRap
Revision as of 22:47, 30 August 2015 by Ezrec (talk | contribs) (Electrostatic Powder Jump & Caramel Accumulation)
Jump to: navigation, search
Crystal Clear action run.png

Release status: unknown

BrundleFab - an inkjet based sugar printer
CAD Models
External Link


'BrundleFab' is an attempt to build a 3D powder bed printer, using sugar as the working medium, and with output as a food quality edible.

The name comes from the 1986 movie 'The Fly': "Do you normally take coffee with your sugar?"

Current "state of the project" is that I can successfully extrude multiple powder layers, and deposit binder at 96DPI.

Printing a 140mmx140mmx24mm (1mm layers) object takes approx 3 hours with my current settings.

The pigment-selective thermal fusion is working, but I need replace the halogen lamp fixture with a metal version.

I continue to work on tuning the fuser and powder/binder recipes for better part adhesion.

Youtube video of first calibration layer: <videoflash type="youtube">zHy0NdR5VD0</videoflash>

Video of multi-pass thermal fusion: <videoflash type="youtube">p7PbIBS-NHo</videoflash>

Theory of Operation

The BrundleFab is designed for experimenting with thermally fused powders - where a powder is colored to be IR absorptive, and heat applied to sinter the powder together in the colored regions.

With the fuser off, it can be used with conventional powder + binder recipes, but for that I would recommend an existing non-prototype machine, such as the YTec Plan B.

BrundleFab uses a single layer head for all layer operations - recoat, ink deposition, and fusing.

Here's some terrible ASCII Art explaining the layer head:

          /   T
       __/_ F _\__________oH
    ||/ <-R          S-> \ H                                      ||
    ||-------------------||-------------------||                  ||
    ||    Feed Bin       ||    Part Bin       ||    Waste Bin     ||
    ||                   ||===================||                  ||
    ||===================||         ::        ||                  ||
    ||       E :: Axis   ||       Z :: Axis   ||                  ||
    ||         ::        ||         ::        ||                  ||
    ..         ..        ..         ..        ..                  ..


    || - Wall of the powder chambers
    -- - Top of the feed/part powder layers
    == - Top of the feed/part pistons
    F  - Thermal fuser (halogen bulb)
    T  - Thermal sensor
    R  - Recoating blade
    S  - Powder sealing blade
    H  - Ink head
    o  - Ink head rail

A BrundleFab layer is constructed as follows:

  1. The layer head begins at the minimum X position, positioning the repowder blade at the start of the Feed Bin
  2. The Feed Bin raises by one layer width, the Part Bin lowers by one layer width
  3. The layer head advances in X until the the fuser (F) is at the start at the start of Part Bin.
  4. The fuser is enabled, and brought up to temperature.
  5. The layer head advances in X, depositing fresh powder onto the newly fused layer, until the the fuser (F) is at the start of the Waste Bin
  6. The fuser is disabled.
  7. The layer head advances in X, until the repowder blade (R) is at the start of the Waste Bin
  8. The Part Bin (Z) and the Feed Bin (E) both drop by 1mm.
    • This is needed so that the repowder blade will not disturb the existing powder layer during the inking pass.
  9. The layer head retracts in X until the ink head (H) is at the end of the Part Bin.
  10. The ink deposition phase then begins, depositing ink on the fresh powder layer, as the layer head retracts in X.
  11. The layer head is fully retraced.
    • This will position the repowder blade (R) at the start of the powder feed bin.
  12. The Feed Bin raises by 1mm, the Part Bin raises by 1mm

Repeat steps 1 - 12 for all layers. A final 'no ink' layer is inserted after the last printed layer to ensure compete fusing.

Prior Art


Powder Size

Curiously, a finer powder (ground granulated sugar) requires more energy to get to the fusion temperature, not less.

It appears that the fine powder is more highly reflective to IR, and requires more ink to achieve the same level of saturation as granulated.

This make sense, in retrospect, since the fine powder has a much higher surface area, and therefore requires much more ink to reach pigment saturation of the layer.

Fusion Technique

With a single slow pass of the halogen lamp fuser, I have difficulty with pooling, and with uninked areas becoming fused. The overall temperature of the powder was also difficult to control.

I did some rough experiments with multiple (faster) passes of the fuser, and I have much more consistent results. The sugar bed temperature raises to the just below the critical point, then the last pass fuses the inked area, leaving the uninked area as powder.

However, my scavenged halogen lamp holder (ABS plastic from a laser printer) is unable to tolerate the multi-pass technique - lots of burned plastic smell,

I'll need to alter my lamp holder design for higher temperatures, and add a IR thermal sensor to the layer head to monitor bed temperature.

Contact Caramelization

While developing the sheet metal for the Aug 23 layer head, I made the decision to fold down, instead of cutting out, the sheet metal in the area where the halogen lamp was to be, thinking I could use the flaps to provide shade from the halogen, to get a better linear heating effect.

Boy, was that a mistake!

In my 'fused' layer, I got caramel globs, but no sintering, on the layer.

After disassembling the layer head, I found the (interesting) answer: When the halogen is powered on, the light chamber shields became incredibly hot (> 300C) and since they were only 3mm away from the powder, they easily contact-fused and caramelized some high granules.

As those grains of powder caramelized on the shields, they made caramel drips. These drips then oozed down to the layer, and picked up more sugar (both inked and uninked, leaving a streaky mess) and made even larger globs of caramel on the shields.

I'm working on some mechanical redesign that will move the aluminum shields further away from the powder.

I suspect there might have been some sort of electrostatic effect involved, but I have no proof of it.


My sources are available on GitHub:



I'm using a SATA connector from a PC power supply, and have soldered on 0.100" pins for easy interfacing.


I using steppers for my X, Z, and E axes, and the DC Motor + Encoder for the Y (printhead) axis.

There are two ATmega devices - an ATMega2560 controls the UI, GCode, and X/Z/E axes. A ATmega328 controls the printhead and Y axis, and is directly mounted on the inkbar carriage.

They are connected by a 115200n81 serial link (5v logic, not RS232).

AdaFruit 1.8" TFT Shield + Joystick

Adafruit Motor Shield v2

The Adafruit Motor Shield v2 appears to be inadequate for accurate PID control of DC motors - the I2C bus latency to the PWM controller is too high for my PID tuning skills.

Adafruit Motor Shield v1

However, the Adafruit Motor Shield v1 has the Arduino PWMs directly connected to the motor drivers - I have been able to get pretty accurate PID control of my DC motors with this shield.

Although it is no longer sold by Adafruit, the design has been duplicated by a number of 2rd party manufacturers, so it's still easy to come by.

Adafruit ST7735 UI/Visualizer

I'm using the Adafruit ST7735 as my user interface and SD card holder.

The visualization software in this video can be easily added to any RepRap firmware, see the 'Visualize.h' class in the BrundleFab-firmware repo, and the 'GCode.cpp' 'ENABLE_UI' sections for where to integrate.

<videoflash type="youtube">TawT_PwRFz4</videoflash>

Layer Head

The Layer Head consists of a single piece of sheet metal, which serves as a recoating blade, seal for the powder feed bin, and mounts for the halogen fuser, IR sensor, and inkjet pen.

As of Aug 23, 2015, I have updated the hardware repo with an easy to build version using aluminum door signs (like 'Keep Out' or 'No Smoking', available at many office and hardware stores):

Construction Procedure

Construction follows the 'layerhead.dxf' in the BrundleFab hardware repository, using the 'Stick It, Cut It, Bend It' technique, as visually demonstrated below.

I am using 0.010" aluminum sign material, as it is cheap and easily available in my region, and is easily cut with sharp scissors, and can be easily bent using a cheap sheet metal brake or clamped angle iron.


The Fuser assembly consists of a high-intensity halogen bulb (from a HP laser printer) with an aluminum foil reflector.

Temperature monitoring is very indirect (thermistor lightly pressing against the aluminum heat shield), and is done by using a 250K/Beta 4066 thermistor (salvaged from the same HP laser printer), using a 1.8K resistor for voltage dividing.

Currently, thermal monitoring is only used to prevent overheating of the fuser housing (exceeding 190C will melt the plastic).

After the inking pass, the intent is to run the fuser over the inked area, and lightly caramelize the colored section.

Or, at the very least, dry the ink out to prevent excessive saturation.

IR Fuser Shield Sensor

The fuser shield is monitored by a 250K / Beta 4066 thermistor.

This sensor is used as a failsafe for the fuser - if the fuser shield exceeds 300C, the fuser lamp is automatically disabled, to prevent damage to the layer head.

IR Bed Sensor

This sensor is an indirect IR sensor mounted on the layer head, used to measure the bed powder temperature, for better control of the fusing process.

I'm using a Melexis MLX90614 to indirectly read the temperature of the powder bed.

The MLX90614 is a lovely device - it runs off of 3.3V (BAA version) or 5V (AAA version), and has an I2C and PWM interface - all on 4 pins! The thermopile is factory calibrated, and has an approx 90 degree view field.

Contrary to popular opinion, the MLX90614 can be used with the standard Arduino Wire library, so long as you are using Arduino 1.0 or later. Here's a code sketch for reading the temperature:

#include <Arduino.h>
#include <Wire.h>

void setup()

void loop()
    int dev = 0x5a, len = 0;
    uint8_t data[3] = {};
    float kelvin;

    Wire.requestFrom(dev, 3);
    while (len < 3 && Wire.available())
        data[len++] =;

    kelvin = (float)(((uint16_t)data[1] << 8) | data[0]) * 0.02;
    // TODO: data[2] is the 'PEC' - a CRC-8 of the command and data returned.
    //       it should be checked (see the MLX90614 datasheet) to ensure
    //       the accuracy of the returned data against I2C line noise.
    Serial.print("Kelvin: "); Serial.println(kelvin);

     // Wait for next sample period

Ink Head


I'm using Nicholas C Lewis' Inkshield device to control a HP C6602 cartridge.

HP F4480

I am using a pile of trashed HP F4480 DeskJet printers as a source of motors, gears, and encoders.

Here are some information I have discovered about the internals of this printer:

Rotary optical encoder board

This board monitors the 1200 DPI optical encoder disk attached to the main paper handling roller in the printer.

It uses quadrature encoding, and can monitor both forward and reverse direction.

I am using the 'Encoder' library from the [1] Arduino library collection.

Pin 1 is the kerf on the CPU board connection

Pin Function
4 Output A
3 Vcc 3.3v
2 Output B
1 Gnd

Printhead Controller

The HP F4480 printhead carriage monitors a 1200 DPI optical encoder strip, which is the feedback to the carriage motor, and manages the shift registers to the matrix printhead.

These electronics will not be used by BrundleFab, and are bypassed - the IR sensor for the optical encoder is directly wired to the ATmega323.

DC Motor/Encoder Interfaces

I scavenged the connectors from the HP printers and build some extension cabling for the X and Y axis controls.


Wire colorcode key:

Color Function
White/Orange Ground
Orange/Write 3.3v
White/Blue Encoder A
Blue/White Encoder B
White/Purple Motor -
Purple/White Motor +

DC Motors

Although the printhead DC motor was designed to be driven at 30v, it operates fine at 12v, PWM at 50% for nominal operation.


Overall Design

From the front of the printer, the X axis is from left (negative X - the feed bin area) to right (positive X - the part bin area).

Past the part bin, there is a 'cleaning' chute area where excess powder will fall during the print cycle.

The conceptual design is for the powder wipe to immediately follow the print head, and the print head never executes a negative X movement until the Z slice is complete.

The X axis is controlled by a stepper motor, which pulls on a braided (non-stretching) fishing line attached to the Y axis trolley.

The Y axis is controlled by a DC motor + linear encoder, mounted on the inkjet carriage of the HP4480 printer. As I have multiple HP4480s, I will use a mounting system that will allow me to easily interchange the inject carriage, so as to replace the Y axis movement in case of failure.

The Z-part and E-feed axes will be driven by two NEMA17 steppers, driving a 40cm trapezoidal (Tr8x4) drive screw. See the Piston section for details.


The powder bed frame is constructed from recycled MDF material (recycled from various IKEA flat-pack furniture pieces that outlived their life span).

MDF has the advantage of being cheap, readily available, and easy to cut accurately with home shop tools.

Although I chose melanine-covered MDF for this prototype printer, any smooth-surfaced stiff material should work for a powderbed frame. A smaller version using acrylic, or a larger version using 4mm aluminum sheet would be feasible.

The OpenSCAD files are parameterized to allow for easy adaptation to different target build volumes, and material widths. (See the hardware sources above)


Currently I only have NEMA 17 motors, so I have built a piston insert for half of the frame. The left side of the frame will be unused for this prototype, until I get larger stepper.

Instead of ripping the frame apart, I came up with the idea of using an insert - a divider with a base (making an inverted "T" shape) and the piston plates are on each side of the T.

The insert uses two NEMA 17 motors with integral 40cm Tr8x4 screws, 4 pieces of MDF, and some scrap sheet metal a motor mounts. The endstops, although in the same physical location, are configured differently for each axis.

For the Z axis, which starts at the top of the piston chamber and moves down, the endstop is for Maximum Z.

For the E axis, which starts at the bottom of the piston chamber and moves up, the endstop is for Minimum E.

This piston design jams easily on even small amounts of powder grit if you attempt a precision fit - varying amounts of humidity will cause swelling in the MDF, and a tight fit will easily become a jammed piston.

To solve this issue, my piston is undersized by approx 1mm on all sides, and a slightly oversized vinyl fabric is glued on top of the piston head. The vinyl fabric creates an adequate seal, even with the undersized piston head.

Print Media Material Testing

These early tests were done with 'hand printing' an object (manual layer deposition, and using a needle bottle to apply large binder droplets).

Granulated Sugar + Water


  1. Lay down 10mm of granulated sugar
  2. Sift a layer of 1mm of granulated sugar
  3. Apply 1mm droplets of (colored) water to the granulated sugar via a needle bottle (unknown tip size)
  4. Go to 2. until part build volume is complete
  5. Lay down 10mm of granulated sugar
  6. Heat at 120C (250F) in oven for 1 hour
  7. Let cool
  8. Remove from build container, and remove excess sugar


The resulting object was stiff, but easily crumbled. Water dispersion through the granulated sugar had an approx 5mm radius, and substantially filled in the interior of the part (wireframe cube).


  • Droplet size should be smaller
  • Either a finer granularity or pressure packing of the media should reduce the spot size of the print head
  • A food safe adhesive should be tried to increase bonding strength
    • In-powder adhesive (such as meringue powder) activated by water
    • In-suspension adhesive (such as egg whites)

Powdered Confectionery Sugar + Water

  1. Lay down 10mm of granulated sugar
  2. Sift a layer of 2mm of granulated sugar, and pack down to 1mm.
  3. Apply 1mm droplets of (colored) water to the powdered sugar via a needle bottle (unknown tip size)
  4. Go to 2. until part build volume is complete
  5. Lay down 10mm of granulated sugar
  6. Heat at 120C (250F) in oven for 1 hour
  7. Let cool
  8. Remove from build container, and remove excess sugar


Sugar did not re-crystallize, I suspect the cornstarch at fault here.


  • Powdered Confectionery Sugar is not suitable for printing, due to the cornstarch content.

Powdered Sugar/Meringue Powder + Alcohol/Water

  • Powder base is granulated sugar and meringue powder
  • Adhesive is alcohol and water


  1. Lay down 10mm of powder
  2. Sift a layer of 2mm of powder, and pack down to 1mm.
  3. Apply 1mm droplets of (colored) adhesive to the powder via a needle bottle (unknown tip size)
  4. Go to 2. until part build volume is complete
  5. Lay down 10mm of granulated sugar
  6. Heat at 120C (250F) in oven for 1 hour
  7. Let cool
  8. Remove from build container, and remove excess sugar


  • Sugar/Meringue powder is % by mass
  • Alcohol/Water is % by volume
Sugar Meringue Powder Water Alcohol Results
90% 10% 50% 50% Small droplet size (1mm), no capillary creep from the droplets; resulting object could be rinsed of excess powder


  • Should be a sufficient working material, need to experiment with different ratios.

Granulated Sugar + HP C6602 Black Ink (multiple pass, no fusing)

  • Powder base is granulated sugar
  • Binder is HP C6602 Black Ink


  1. Lay down 10mm of granulated sugar
  2. Ink calibration pattern at 96DPI
  3. Repeat pattern 10 times
  4. Let sit overnight to fully dry


  • The 'binder' simply colored the granulated sugar, as expected.
  • A very small amount of binding was observed, but not enough to allow even light handling of the layer

Granulated Sugar + HP C6602 Black Ink (1mm layer, 4 sprays per dot, fusing at 68C)

  • Powder base is granulated sugar
  • Binder is HP C6602 Black Ink
  • Fuser set to make a 1500mm/minute pass
    • Unfortunately, post-recoat..
  • Ambient sugar temperature 33C, post-fuser temperature 68C


  1. Lay down 10mm of granulated sugar
  2. Ink calibration pattern at 96DPI, 4 sprays per dot
  3. Apply powder recoat of 1mm
  4. Heat with fuser at 1500mm/minute - black temperature recorded as 68C.
  5. Repeat from (2) for 24 layers


  • The 'binder' simply colored the granulated sugar, as expected.
    • This was primarily a 'conservative baseline' for the fuser
  • Some binding was observed, enough to allow partial vacuum depowdering
  • Object could not be handled


  • A higher fusing temperature is needed for caramelization of the sugar
  • Fuser should be run after inking, not after repowdering

Granulated Sugar (fuser stalled, heat shield at 190C)

  • Powder base is granulated sugar
  • Fuser on for 30 seconds at 190C


  1. Lay down 10mm of granulated sugar
  2. Turn on fuser for 30s at 190C


  • This was totally by accident - fuser got stuck on return pass, and overheated an uninked powder area.
  • Nicely bound approx 1mm of granulated sugar, without ink.
  • Recoating blade was hot - may be a concern if it caramelizes unwanted areas.


  • If fuser is run at a high temperature, a heat break may be needed between the fuser and the recoat blade.

Granulated Sugar (fuser at 250mm/minute, heat shield at 300C)

  • Powder base is granulated sugar
  • Fuser on, cutout temperature at 300C at the heat shield
  • Fuser pass rate is 250mm/minute


  1. Lay down 1mm of granulated sugar
  2. Ink layer
  3. Turn on fuser (300C 'safety cutout' at heat shield)
  4. Pass fuser over sugar at 250mm/minute


  • Inked area has variable quality of fusion
    • First few cm fused are very lightly fused
    • Approx 5cm of correctly fused inked area, unfused plain powder
    • Last few cm have plain powder fused, inked area has pooling effects
  • Pooled areas tend to expand in the Z direction, and are scraped off during recoat
  • Interior uninked areas lightly fused, difficult to depowder


  • Fuser needs to pass at a variable rate - slower during warm up, then faster once target brightness achieved.

Powdered Sugar (fuser at 250mm/minute, heat shield at 300C)

  • Powder base is powdered sugar
  • Fuser on, cutout temperature at 300C at the heat shield
  • Fuser pass rate is 250mm/minute


  1. Lay down 1mm of powdered sugar
  2. Ink layer
  3. Turn on fuser (300C 'safety cutout' at heat shield)
  4. Pass fuser over sugar at 200mm/minute for 6s (warm-up), then 300mm/minute for the rest of the pass


  • Powdered sugar seems to require more energy to fuse than granulated
  • 1mm thick layer with 6 sprays per dot - not enough ink penetration for intra-layer binding
  • Extruder hit maximum limit - last layer had multiple fuser passes
    • Last layer had good fusing.


  • Fuser needs to apply more energy for powdered sugar
    • Slower single pass?
    • Multiple passes?
    • Separate recoat and fusing passes?