The Fluid Inject Printer


In our conceptual machine we borrowed the technique of  ‘Inverse Spherification’ that was invented Ferran Adrià in the molecular gastronomy  – when a liquid droplet whichever contains calcium is submerged into an alginate bath, the droplet of liquid will then be spherified by forming a ‘gel’ like surface around the sphere. Droplets become ‘caviers’ in water depending on the sizes of injecting device.


We are carrying out series of experiments of spherifying a variety of liquid (e.g. water liquid, oil, plaster cement, yoghurt, milk etc.) as well as  investigating the physical and chemical properties of the spherified liquid.

Spherification of various water-based liquid

Forms of yoghurt droplets in alginate bath injected by syringe

Forms of milk droplets in alginate bath

Positions of yoghurt droplets in higher concerntrated alginate bath

Position of yoghurt droplets in higher concerntration of alginate bath

The simultaneous emulsification and spherification of milk in alginate bath


The first generation of the Fluid Inject Printer is a 1-axix machine with only 2 controllable parameters. It consists a stepper motor that controls the syringe’s trajectory and  a DC motor that controls the amount of injection into the alginate bath.

(1) Both devices are feeded by commands of the Arduino;

(2) Trajectory of syringe determines the location of print;

(3) While liquid is being ejected out from the syringe it becomes instantaneously ’spherified’ in the alginate bath. Hence the first form is printed.

#include <Stepper.h>

// change the steps variable to the number of steps on your motor
int steps = 100;
int switchPin = 2;    // switch input
int motor1Pin1 = 8;    // pin 2 on L293D
int motor1Pin2 = 9;    // pin 7 on L293D

// create and attaches a stepper motor
// with 100 steps to pins 0, 1, 2 and 3

// calibration
int stepLength = 50;
int liquidAmount = 25;

Stepper stepper(steps, 3, 4, 5, 6);

void setup()
// set the speed of the motor to 20 rpms
pinMode(switchPin, INPUT);
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
Serial.println(”hello world”);

void loop() {
if (Serial.available() > 0) {
int dataIn =;
switch(dataIn) {
case ‘]’:
case ‘[’:
case ‘,’: //up
digitalWrite(motor1Pin1, LOW);   // set pin 2 on L293D low
digitalWrite(motor1Pin2, HIGH);  // set pin 7 on L293D
digitalWrite(motor1Pin2, LOW);  // set pin 7 on L293D
case ‘.’: //down
digitalWrite(motor1Pin1, HIGH);   // set pin 2 on L293D low
digitalWrite(motor1Pin2, LOW);  // set pin 7 on L293D
digitalWrite(motor1Pin1, LOW);   // set pin 2 on L293D low

This entry was posted in RS3. Digital Tectonics and tagged , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

Post a Comment

Your email is never published nor shared. Required fields are marked *


− three = 1


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>