After a few weeks of fabrication, code and iteration our team (Anthony, Brandon and me) showed our KNOB-project to the public at the ITP Winter Show 2017. Here a little update on the latest developments and iterations since our submissions to the pcomp finals.

code / pcomp

The code/pcomp setup stayed more or less the same for this last iteration: We used a 8266 node mcu wifi-module in combination with a raspberry pi inside the knob that picked up the data from the rotary encoder at the bottom of the metal pole counting rotations of the knob. The rotations were sent to a remote server (in our case heroku-server) via a node script (proofed to be easier than python for this use). On the server-side we reprogrammed the rotations to match 1000 rotations for full brightness of the LED. The pwm-data was sent to another pi inside a white pedestal with the LED on top of it. The pi controlled the brightness of it directly. For all remote connections we used itp-sandbox as wifi-network.


For the fabrication part of the project we iterated mostly on the outer materials of the knob and the resistance of the rotational movement of the bearings. After priming it with white primer we initially wanted to paint it in rosegold - as a nod to Jeff Koons and Apple product fetishism. Then we realized that this might be a too distracting and cynical take on a generally playful concept and decided to use felt as the main outer material of the knob. The audience should want to touch it and and immediately feel comfortable with the soft material. It proved to be a good choice - the feedback from the audience was great, everybody liked the softness and feel of the felt. We chose black as it seemed to show the use by a lot of hands less fast than grey or a brighter color. It accented the general black and white color scheme of the arrangement as well. 


For the LED we built a wooden pedestal to house the raspberry pi and battery pack and painted it white.



To add more resistance to the movement we added 4 coasters to the bottom of the rotating part of the knob and padded the wooden rail in the base with thick foam. The coasters were rolling on the foam, the compression of the foam by the casters produced a slight resistance for a single caster. Multiplied by four the resistance was big enough to keep the rotating part from spinning freely when a lot of force was attached. We were initially worried about the creaking noise of one coaster, but during the show this was irrelevant as the general noise of the audience covered this. 


concept & show feedback

We changed our concept fundamentally: On Sunday, the first day of the show, we turned the LED on to full brightness with 1000 rotations clockwise on the knob. On Monday, the second show day, we reversed this tedious process and turned it slowly off with 1000 rotations counterclockwise. 

On a separate iPad screen running a webpage the audience could keep track of the number of rotations. Why a thousand? We just felt it was the right number. The direction of the rotation for the day was printed on a simple black foamboard suspended from the ceiling - it should look as simple, intuitive and familiar as a daily menu in a restaurant. 


We felt that this scaling of the interaction itself was a natural fit to the scaling of the knob: Not only the physical scale changed but as well the procedural. This focused the perception of the audience stronger on the core of the concept: to enjoy an interaction for the sake of the interaction itself - to invoke a meditative and communal state of action as the knob is usually turned with a group of people. 

In the show this iteration was well received. Not only because of its conceptually balanced approach towards the timing of the reward of the interaction, mostly the audience described a feeling of comfort in talking to strangers while performing a repetitive manual task together. One group compared the experience to a fidget spinner for groups that could be used for brainstorming activities in a board-room. Another participate recounted childhood memories of sorting peas together. 

While a few participants, mostly children, tried to raise the number of rotations, and therefore as well looked at the iPad showing the current number of rotations, the LED as main output was generally received as a minor part of the process of creating a communal experience. 

Our installation definitively hit an important aspect of technology: an interaction can create a meaningful and satisfying experience as interaction itself when it helps creating a sense of belonging and community - even without an instant gratification or a short term purpose. [link to video]

We decided not to use AR as an output as there is still a device needed by the user. This shifts the focus of the audience to the output and distracts from the physicality of the object and the interaction with this physicality - something we wanted to avoid. AR still is conceptually stronger as an output as it is in itself non-existent and weightless. It was a difficult decision but in the end a simple output as an LED and the exaggerated scale of the interaction over 1000 rotations prooved to be stronger in the context of the winter show and its abundance of interactive pieces on a small space.

We felt very honored to be part of the show and the ITP community. Thanks to whole team behind it, especially the curators Gabe and Mimi. And big thanks to our PComp and IFab professors Jeff Feddersen and Ben Light for the great guidance and feedback during the whole process. 

Here a few impressions from the show: 



For the last assignment you will be mounting a motor/servo/stepper (one or more) to something as well as mounting something to that motor/servo/stepper.  It can be completely DIY, or off-the-shelf components, or a combination of the two.

The last assignment in IFAB was again a journey: I started off with a rough idea of working with magnets, cord and geometrical patterns and finished our 7 week introduction with a three-legged robo-dog that will mine doge-coin. 

But let's start with the first attempt to capture movement. The idea was to have a system of cords with magnets attached to them running in the background of an acrylic screen. The servos where supposed to move the magnets, the change in position would move magnetic material in the front of the acrylic plate. Here a very rough first sketch:


After trying to prototype everything with cardboard, servos, fishing wire and magnets, I realized that this form of prototyping reaches its limits with moving elements. I thought a lot how I could move the magnets on the strings in the back without them interfering with each other - and came to the conclusion that this is not possible in our limited timeframe. Here parts of the failed cardboard prototype.


Unfortunately I had bought all parts already for this project before prototyping - something to consider next time. 

So I was going back to a blank page and thought about my second idea - a robot arm. I like robotics and tried to come up with a fresh idea that would go a bit further than building an arm. Robots are always considered perfect machines - I set out to build a non-perfect robot, a robot that obviously is not just a mere slave for humans but got some imperfect characteristics: A three-legged robot dog. And as imperfection is a great source for creativity (and randomised operations) it should mine bitcoin (or doge-coin) while walking around. Its functionality should be considered secondary, the character should dominate the appearance of the robot.


The three legs should be powered by three digital metal-gear servos that were once part of a mini-plotter. I wanted to keep the shape as minimal as possible - but still organic.

Now I had to tackle the mounting of the servo to the acrylic baseplate and of the legs to the servo horns. They were solid metal, so I knew they would not wear out that quickly. I decided to try to laser-cut the horn directly into the upper part of the leg. 

I took a picture of the spindle of the servo horn, hand-traced it in illustrator and tried out different diameters after measuring the horn to achieve a tight fit.

Screen Shot 2017-10-17 at 12.42.50 PM.png
Screen Shot 2017-10-17 at 2.56.50 PM.png

I was very surprised after laser-cutting in 3mm cast acrylic that the last opening fit perfectly with the servo horn and seemed to be sturdy enough to withstand light movement. My hand-tracing was far from perfect or symmetric but this seemed not to be a real issue.


After that I tried to come up with a concept for mounting the servo between to acrylic sheets like in a sandwich. Initially I wanted to cut acrylic clamps to hold the servos on the baseplate, then decided for zip ties. This proofed to be only in parts effective as the servos still had a bit of movement - I fixed this with glue in the end. I am not very happy with this mounting as I could not really glue them in perfectly after I attached the zip ties. I should have used glue and the zip-ties in combination for the beginning. But I wanted to avoid glue as much as possible for the mounting of the servos.


After conceptualizing the mounting for the servo and the leg-attachment to the servo I created the shape of the dog in Illustrator and laser-cut all parts. I made one mistake: I copied one-side of the dog to the other not realizing that only one front side would need a leg opening - as it's a three-legged dog. Too late. 

Screen Shot 2017-10-17 at 2.38.11 PM.png

Before assembling the parts, I cut the two acrylic baseplate "sandwiches" that would sit in the middle of the side-panels with the bandsaw. Laser-cutting was not needed here, the rougher surface from the band-saw cutting took the glue very well. 

I used the laser-cutter again for the openings for the latches of the zip ties.


After that I put a spacer into the non-leg corner, attached the two side panels with acrylic glue and the help of clamps to the two baseplates, drilled holes for the node-mcu / ESP8266 controller that would control the servos and finally mounted the legs.


It stood by itself but I realized that any movement of the servos would tilt the construction to the side without the leg. To prevent the dog from falling a built a little stand to stabilize it and reduce the weight on the legs. 


I kept the wiring and code very basic - the three-legged dog will not mine bitcoin yet with its random movements, I will have to re-wire and re-program using a python mining library. Here is the Arduino code specifically for the 8266 module that I found online and modified to my needs:

/* Sweep
 by BARRAGAN <http://barraganstudio.com> 
 This example code is in the public domain.
 modified 28 May 2015
 by Michael C. Miller
 modified 8 Nov 2013
 by Scott Fitzgerald

#include <Servo.h> 
Servo myservo_front;  // create servo object to control a servo 
                // twelve servo objects can be created on most boards
Servo myservo_b1;
Servo myservo_b2;

void setup() 
  myservo_front.attach(13);  // attaches the servo on GIO2 to the servo object 
void loop() 
  int pos;
  // front leg
  for(pos = 60; pos <= 100; pos += 1) // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo_front.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(5);                       // waits 15ms for the servo to reach the position 
  for(pos = 100; pos>=60; pos-=1)     // goes from 180 degrees to 0 degrees 
    myservo_front.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(5);                       // waits 15ms for the servo to reach the position 
  // back leg 1
    for(pos = 60; pos <= 100; pos += 1) // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo_b1.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(5);                       // waits 15ms for the servo to reach the position 
  for(pos = 100; pos>=60; pos-=1)     // goes from 180 degrees to 0 degrees 
    myservo_b1.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(5);                       // waits 15ms for the servo to reach the position 

  // back leg 2
    // back leg 1
    for(pos = 60; pos <= 100; pos += 1) // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo_b2.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(5);                       // waits 15ms for the servo to reach the position 
  for(pos = 100; pos>=60; pos-=1)     // goes from 180 degrees to 0 degrees 
    myservo_b2.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(5);                       // waits 15ms for the servo to reach the position 

And here is the three-legged dog in-motion. An imperfect robot with character. I am very happy with the result! 


Fabricate something using primarily two different materials.  Let’s say the project is roughly 40% one material, 40% the other.  The materials cannot be acrylic or plywood (unless you are gluing up your own plywood).  The work should be held together using fasteners of your choosing.

I always wanted to work with metal - as I never used it before, especially Aluminum. I love the buttery softness of this material. It looks industrial yet has something authentic to it. So I bought some aluminum L-Elements and decided to work with them as my first material. The second material was a bit of a journey: After first going for basswood - it's as soft as the aluminum and has a nice clean look - I finally decided for a bit more edge and used paper. A used Chinese book on data visualization I found in the trash. Somehow the shop trash shelf is really inspiring me again and again. Why combining a book on data visualization with these metal construction elements? Well, it somehow felt right at the end. But let's start from the beginning.


Because one theme of the assignment was "screws, not glues", I went screw and nuts shopping first. I loved the industrial looks of hex-head machine screws and the thumb-head machine screws. They made a perfect fit to the aluminum elements - industrial to industrial, minimal to minimal. A brutalist look. My idea was to build a heavy duty screen for my raspberry pi. Something that you can't mess around with. The basswood should cover the open parts between the aluminum elements. 

First challenge was the cutting of the metal: I wanted to have accurate cuts, the bandsaw seemed to rough for that. So I went for a metal handsaw with a angled sawing help.


And yes, I used it at a better position than in the picture above. It was pretty easy to use and the cuts were very precise. After that I sanded the cutting edges of the metal with a metal file. 

I did the same with the basswood, but used a wood handsaw. 


Same like with the metal, I sanded it after each cut. That was the easy part. Then I drilled the holes and had to pay attention to get the holes right - metal has no flex and every hole needs to sit exactly in the right place - otherwise it becomes very difficult to put all the screws in later - something I had to learn the hard way.


I combined multiple L-elements and used the basswood for the back of the screen. When I finished it I was not happy with the basswood. It was not strong enough, too soft - and I realized that wood might not be the best material for the back of a  screen regarding heat. As I wanted to use screws only, I tried to fix the position of the wood with a sandwich-concept between the two aluminum elements. 


I was not very successful - both basswood parts were still loose. I wanted to avoid putting extra screws into the aluminum from outside as I already had quite a few visible screws in the top parts. On top of this engineering issue I didn't feel to excited about the combination of the basswood with the aluminum anymore. It looked like an unequal match to the boldness of the metal.

So I looked for a more exciting combination of materials and searched the trash shelf for inspiration. After thinking about using glass (too tricky to cut.drill) I saw this book on data visualization in the trash and it felt right to use it with the screen - old and new media, re-combined. Paper and aluminum, a wood-product and a metal, a screen and a book. I had to use it. So I decided to mount the metal frame of the screen on the book. I drilled holes into the paper and used screws and a metal rail to attach the screen. 

I tried as well to add an aluminum back to the book to enforce the industrial aesthetics, but I took it off later - it was a bit too much, too far on the brutalist side.


Unfortunately while attaching this last piece, one of the aluminum standoff screws got loose /worn out from unscrewing. I am not sure but it seems the softness of the material makes it not ideal for a lot of assembling / de-assembling tasks. 

I stayed within the 40 % (paper), 40 % aluminum, 20 % (screen components, screws) ratio. 

A very rough look. But it resonated with me. I put a p5 sketch I was working on in ICM on the screen. A koi-fish is slowly cruising through his virtual pond. It somehow felt strange but right to re-imagine this technical book with an industrial construction and a poetic animation. 



I had the plan to create a sound / visual controller for Arduino tone and P5 that uses fruits as an input element. The controller would sit on a steel basket that houses the fruits, it would feature several knobs and faders and would be connected to P5 via the serial port. 


To accompany the cleanliness of the steel I wanted to combine plywood and acrylic for the topin two layers: plywood cutouts of hands sitting on top of white translucent acrylic. The goal was to avoid any glue. 

After going through the Arduino Tone lab I started writing the code and ended up using a different library for sound that would give me additional volume and wave-type control in combination with the tone library. I tested as well the P5 serial library with a potentiometer after following the steps in the serial lab and running a node server on my local machine. 

#include "volume2.h"
Volume vol;
const int numReadings = 10;

int readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
int total = 0;                  // the running total
int average = 0;                // the average

int inputPin = A0;
int inputPin1 = A4;

int analogPin= 3;
int raw= 0;
int Vin= 5;
float Vout= 0;
float R1= 10000;
float R2= 0;
float buffer= 0;

//int val1;
int encoder0PinA = 2;
int encoder0PinB = 4;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;

void setup() {
  pinMode (encoder0PinA, INPUT);
  pinMode (encoder0PinB, INPUT);
    for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;

void loop() {
    int n = digitalRead(encoder0PinA);
    if ((encoder0PinALast == LOW) && (n == HIGH)) {
    if (digitalRead(encoder0PinB) == LOW) {
    } else {
    //Serial.println (encoder0Pos);
    //Serial.print ("/");
  encoder0PinALast = n;

    raw= analogRead(analogPin);
  buffer= raw * Vin;
  Vout= (buffer)/1024.0;
  buffer= (Vin/Vout) -1;
  R2= R1 * buffer;
  Serial.print("Vout: ");
  Serial.print("R2: ");
  //int Sound = analogRead(analogPot);
  //float frequency = map(Sound, 0, 40000, 100, 1000);
  //tone(8, frequency, 10);

    // subtract the last reading:
  total = total - readings[readIndex];
  // read from the sensor:
  readings[readIndex] = analogRead(inputPin);
  // add the reading to the total:
  total = total + readings[readIndex];
  // advance to the next position in the array:
  readIndex = readIndex + 1;

  // if we're at the end of the array...
  if (readIndex >= numReadings) {
    // ...wrap around to the beginning:
    readIndex = 0;

  // calculate the average:
  average = total / numReadings;
  // send it to the computer as ASCII digits
  delay(1);        // delay in between reads for stability
  int freq = analogRead(A0);
  int volume = map(analogRead(A1), 0, 1023, 0, 255);

  vol.tone(encoder0Pos*10, SQUARE, volume); // 100% Volume
  vol.tone(freq, SQUARE, volume); // 75% Volume
  vol.tone(freq, SQUARE, volume); // 50% Volume
  vol.tone(freq, SQUARE, volume); // 25% Volume
  vol.tone(freq, SQUARE, volume); // 12.5% Volume

Having sorted out the basic functionality of the code, thinking about the parts I would need for the controller and sourcing all parts, I constructed the building files for the laser-cutter in Illustrator. This took a fair amount of time as I had to measure all parts for a perfect fit. I used the analog caliber for most of the measurements. 


Especially parts like the fader needed extra engineering / construction before laser-cutting.

Screen Shot 2017-09-30 at 10.48.34 PM.png

I used the tracing of images technique to get the positions of the controller elements ergonomically right. I used the sandwich technique of etching and cutting in combination with the two different top layers to get a seamless fit. I traced my hands for the shapes around the controller elements. 

Screen Shot 2017-10-04 at 12.46.19 AM.png

The etching layer would create a rim around the cutouts for washers and speakers to fit them underneath the top-plate.

Screen Shot 2017-10-04 at 12.51.45 AM.png

After cutting both layers the etching took too long - the laser was not strong enough to etch the required amount of material (around 3mm) out of the acrylic. With the help of one of my fellow students, Itay, I managed to used a drill and a dremel to deepen the rims around both speakers and each of the cutouts of the potentiometers. 


I used knobs from the junk shelf as they fit the white/light brown colors of wood and acrylic. 

After that I started screwing in all electronic parts - thanks to the time I spent measuring the controller elements they fit perfectly. I was relieved! 


I still had to drill the screw holes for the standoffs for Arduino and fader. 


The last part of the hardware building was the wiring. I used a perf-board to organize the multiple wires of all the elements and soldered each of them. It took me a full afternoon, but thanks to a soldering workshop earlier in my PComp class I could avoid the biggest mistakes. Still - there is plenty of room to learn for me in this particular technique.

I ended up not attaching wires to the fruits in the basket as I wanted to keep the controller as open as possible - it should be usable for sound creation and control of visuals alike.


I wanted to use magnets to keep the top secure on the steel basket but didn't attach them to the acrylic yet as I wanted to test first whether I could screw them into the acrylic as well - something to be done later this week. The same goes for the top plate consisting of two layers. They are secured and stick together because of the knobs, I still need to figure out how I can attach it safely without drilling or glue. So far all elements are functional and can be assigned different functions. I used it mainly for sound production.

So far I have not tested the sound libraries a lot, so most of the sounds are very experimental - but fun! 

I have tested the P5 serial communication with a potentiometer - so far it is a very satisfying feeling to have a physical control element instead of a trackpad.

I would as well like to put lights underneath each hand/  controller element to communicate with plants: The plant listens to the music, a sensor measures the surface conductivity that is mapped to the controller elements, they light up according to this conductivity and I can react to this interaction with the plant. Sounds a bit lofty - but worth exploring!

So far no fruits in the basket below but plenty ideas on how to continue with my first controller.


 Parts used:

  • 3mm plywood
  • 6mm white translucent acrylic
  • steel basket
  • magnets
  • Arduino Uno
  • crossfader / slider
  • 2 x potentiometer
  • rotary encoder
  • 2 x 8 Ohm speaker
  • USB cable

Tools used:

  • lasercutter
  • drill-press with hole-saw drillbit
  • Dremel
  • soldering iron


Create something using the laser cutter.  I’m looking for something more than just a simple 2D cutout or etching.

Laser Cutting Iteration 1: Cuneiform

This time I experimented with a few different techniques and approaches towards the assignment - and had to deal with a little setback in technology. My first idea was to train a neural network on cuneiform images (the earliest form of human writing that was burned in clay plates in ancient Sumerian times), then laser-etch the generated new cuneiform writings into acrylic.

(via  cdli )

(via cdli)

It should represent the change of technologies (clay stamping to laser-cutting) and content generation (humans to AI). I found a huge database of 18 000 cuneiform images online, split  them into 64x64 images and was ready to start training dcgan, a neural network, with the now much bigger dataset of 860 000 images. Then my cloud server ran into a lot of issues with the amount of data and I finally had to abandon the idea to etch ai-generated images - for now. I nevertheless tried it with the original cuneiform-writings.

Laser Cutting Iteration2: Glasses

After this setback with etching I had the idea to laser cut new eyeglasses- they should look simple, have no glued connections and fit my face.

Screen Shot 2017-09-25 at 2.40.06 PM.png

To find the perfect fit around my head and on my nose I created cardboard prototypes and varied the measurements in Illustrator slightly.


Based on the cardboard prototype I tried to come up with a modular system for the ear-parts of the frame: they should slide into the frontal parts into pre-cut holes. I cut the holes a bit smaller than the ear-parts so that they would stay in the frame.

Screen Shot 2017-09-25 at 2.47.27 PM.png

While re-sizing the holes I broke one frame and cut myself with the acrylic - it is sharp. 

After finding the right size for the parts to stick into each other I was satisfied with my basic modular system.


I tested the glasses with my fellow students at ITP and started printing more of them.


So far the feedback was positive, the frames looked simple and iconic - I used 1/8 inch ivory white opaque acrylic for the frame. I plan to add industrial grade lenses later. 

Laser Cutting Iteration 3: Augmented Storytelling

While working on the fabrication assignment, I used the newly acquired techniques for my PComp project as well. Here we should come up with a simple application that is using a digital or analog input and output. I used a photosensor to modulate movements of a laser-cut dinosaur. I found the yellow arm in the trash and cut the other parts later. Here the story of the impact of meteor thousands of years ago that probably led to the extinction of dinosaurs gets augmented with a servo and a sensor. Laser-cutting helped me to quickly prototype a T-Rex model. 

Screen Shot 2017-09-27 at 10.49.07 AM.png

Laser Cutting Iteration 4: Sculptural Piece

The laser-cutter offers clean aesthetics that strike a brutalist note. I wanted to experiment with this hidden element of the material that in its superficiality is void of any human notion - it shines in soulless beauty. 

Looking at the printed frames with white translucent acrylic lenses inserted, I wanted to explore the possibilities to create sculptural elements. The goal was to play with perfect imperfections that should in subtle way unsettle the viewer.

I thought about my personal associations with glasses. As a kid wearing glasses, other kids used to put their thumbs on my lenses as they knew I would have to clean them afterwards. They thought that this was funny - I did not like that at all. So I tried to represent these sublime form of power games with the clean material of acrylic and the perfection of the laser-cutter: The glasses should have a visible finger-print on the lenses, a thumb with hand close to them.

Screen Shot 2017-09-26 at 7.52.04 PM.png
Screen Shot 2017-09-26 at 8.24.08 PM.png

To achieve this I constructed a fingerprint in illustrator, etched the surface of the lenses with the paper-film on it and painted the fingerprint with orange acrylic color before removing the paper film.

After that I took a picture of my hand and thumb, traced it in Illustrator and laser cut this with two pieces in different color to create the illusion of space for the hand. 


For the final piece I was not sure whether I should put a servo underneath the thumb to make it move to the lens when a viewer is approaching the piece. I finally decided against it as I felt it might be an unnecessary distraction.


I put the pieces on a plywood square to give it a warm feel - that contradicts with the portrayed action.