Image uploaded from ios %282%29

Project Goal

The goal of our project was to enhance the social interaction among customers during their time spent in a Chinese brunch with a global context. This was to be achieved by the use of IoT devices enabled by basic inputs and outputs controlled via the internet.

Design Context

Dim Sum restaurants are a traditional place for Chinese elder people to spend hours hanging out with friends or families and are thus spaces for social interaction. We envision a future in which these restaurants are popular among the younger generation, as well as outside of China. 

In this situation, how can we use ambient devices to ensure that the social environment is maintained and is not taken over by people checking their smartphones? 

How might we motivate people to stay away from their smart devices and interact more with others? The key to this question is to establish a positive reinforcement, or a reward, for staying away from their smart phone while dining at the table. 

Image result for dimsum restaurant


We achieved the above by rewarding patrons with a painting inspired by Chinese art. An IoT device senses whether or not each person has placed their phones on the phone tray. If they have, an electronic painter starts creating a painting. The painting will get interrupted if they pick up their phone, but will resume painting if the phone is replaced. This motivates them to stay away from their phones and interact with friends.


The biggest concern regarding our idea was to have a control over the flow of ink and also to move the outlet of ink to and fro above the canvas. To do so, we needed to find a pump which would drip paint slowly enough, as well as a motor which would move the paint dripper across slowly enough. Also the art created could not be predicted as it depended on the flow of paint drops over the canvas by gravity. During the trial process, the drops had a tendency to follow a particular flow path. Also an even application of paint over the canvas was impossible. We had to rely on the beauty of randomness as a piece of art. This indeed was working.


Taking our idea forward we decided to use the following devices to enact our scenario:-

1) A peristaltic pump to drop the paint. it is reliable as the pump is exterior and we would get paint to drip slowly enough for our purpose.

2) Motor with belt drive to achieve the linear motion from Left to Right, back and again as a cycle.

3) Switch with extended arm to act as the phone sensor.

4)Potentiometer to denote the time spent at the table which would determine the finishing time of the painting.


INPUT: phone in phone tray (press down switch) and the timer being set (potentiometer)
OUTPUT: Painting (movement of the pump and the motor)

Bill of Materials

  • Particle Photon ×2
  • Potentiometer  ×1
  • Omron 1185RE8 switch  ×2
  • Press button  ×1
  • White LED  ×2
  • Green LED  ×1
  • 1000 Ω Resistor  ×3
  • Pump  ×2
  • DC motor  ×2
  • H bridge  ×1
  • 12V power source  ×1
  • Jump wires  ×n
  • Cardboard  ×1
  • Painting canvas  ×2
  • Black thick foam core  ×1
  • Golden texture paper  ×1
  • Wood stick  ×12
  • Wax  ×1
  • White acrylic  ×1


Design Process

Task Identification

Once we fixed live painting as ambient process to enable the customers to stay away from the phone, we brainstormed on methods to paint a canvas art. The possibilities can be distilled into a single idea - use materials which look similar initially, but which have different properties as the 'canvas', and release a substance which reacts to only one of them down the canvas in a slow and controlled manner. We thought of two approaches to it:-
a) Brush controlled by a motor on a static canvas
b) Static brush on a dynamic paper

The issue with this approach was that we needed to program the art itself which would be beyond the scope of this project. So we thought of ideas where the output is just paint which would automatically create art on paper. Thus we concluded on using Canvas treated with wax to create a negative print of the desired art. So thus when ink is dropped on the paper, genuine art would be created.

For the initial prototypes we tried dropping paint with hand as droplets on a static paper sprayed with art stencil. The dropper was moved from left to right to cover the entire surface of the canvas. This worked out very well. 


Our challenge was to transform this action to be done electronically. We identified the following actions that need to be done electronically:-

1) A pump to drop the ink over the static paper and an ink container as source.
The amount of liquid pumped over a period of time need to be controlled. We needed an output of around one drop per second. Peristaltic pump was chosen to achieve this action as we could control it as we desired and would be reliable as the liquid is not in touch with the electronics in anyway. It takes the liquid from a source through the input tube and delivers it through the output tube.
2) Linear motion to move the tip of dropper from one side of the canvas to the other. 
This had to either be like a cycle (Left to Right , back to Left and then cycle continues) or a single cycle of that, but very slow. We fixed upon the second option. A motor with a belt drive was chosen to achieve this as we could achieve cyclic motion using the motor. The belt could house the output of the paint tube.

Image uploaded from ios %284%29

Circuit diagram

3) A basic on/off switch that can send signal when kept over the switch.
The weight of the phone should be enough to toggle the switch. This could be used to design the phone tray below the table.

Image uploaded from ios %285%29

Coding/basic running of devices

The required codes were plugged in and flashed to check the basic working of the devices which were found to be perfect. The following modifications were to be achieved:-

1)The motor should turn clockwise for X sec and then stay still for Y sec and do the cycle again. The values of X and Y could be changed to ensure that the total time taken was variable

2)The belt drive seemed to slipping a bit. Would need to keep the belt at tension for a perfect drive.

3)The pump outlet needs to be connected to the pressure switch via internet. If the switch is on, pump should be working and otherwise not. 

Experience Design

 Positioning - Against the initial idea of having a phone stand in the center of table and a canvas holder at the end of table, we decided to use the canvas holder as a representation of Chinese culture and keep the phone rack subtle and below the table. This is due to the fact that the sight of phone itself could be a distraction on the table. 

Reward/Censure - We had a few different ideas in mind for the reward mechanism, and tested these out with users. Initially, we wanted to stop the painting completely if any diner lifted their phones. however, this was found to be too harsh and severe of a punishment, and also would have resulted in a very bad experience (say, in case of emergencies which required diners to use their phones). 

We settled on pausing the painting if a phone was not in place, but continuing the painting process while all were phones were placed in their holders. This also gave more meaning and relevance to a diner deciding to keep their phone in the holder.

Physical architecture

First concern for the architecture was to determine a perfect housing for the motors as they would be under load and need to maintain good tension for a perfect belt drive. Foam Core was used to prototype the idea. For the canvas holder, Chinese architecture was used as an inspiration. This would also give us the flexibility to contain the ink tank within the housing design. The construction was designed into two levels, the top level containing the motors and the belt drive and the bottom level containing the peristaltic pump, tubes and the canvas. 

The switch was incorporated within a case meant to house an iphone 5 such that inserting the phone into the case fixed under the table would activate the switch. This was programmed to turn ON the pump via internet.

Concept Sketch
2017 02 26 21 03 20 01 Jacob Thomas Davidson
Work in Progress
Image uploaded from ios %283%29
Work in Progress


Control Panel Circuit Diagram
Control panel Tongtong Lu
Motor and Pump Circuit Diagram. The circuit diagram shows the connections needed to power and control a motor as well as a pump.
Circuit diagram Aditi Chalisgaonkar
Code for control panel / phone tray
int buttonPin = D0;         //button to start the project
int ledPin = D3;            //LED indicating start and end of project
int projectStatus = 0;      // 0 = off, 1 = on
int buttonState;
int brushPin1 = D1;          //represents brush movement for diner1
int brushPin2 = D5;          //represents brush movement for diner2
//int fsrPin = A0;          //pressure sensor
//int fsrReading;
//int phoneOn = 3000;       //pressure with phone
//int phoneOff = 1500;      //pressure without phone
int switchPin1 = D2;        //switch as an alternative to pressure sensor for diner1
int switchState1;
int switchPin2 = D4;        //switch to show phone down for diner2
int switchState2;
int drip1 = 0;              // 0 = no dripping, 1 = dripping
int drip2 = 0;
int potPin = A1;            //time input
int potReading = 0;
int duration = 1;           // duration in minutes
int starttime,endtime;      // start and end time of the project
void setup(){
  pinMode( buttonPin , INPUT_PULLUP);
  //pinMode( fsrPin, INPUT);
  pinMode( switchPin1, INPUT_PULLUP);
  pinMode( switchPin2, INPUT_PULLUP);
  pinMode( brushPin1, OUTPUT );
  pinMode( brushPin2, OUTPUT );
  pinMode( ledPin, OUTPUT);
  Particle.variable("pot", &potReading, INT);
void loop(){
  buttonState = digitalRead( buttonPin );
  //fsrReading = analogRead(fsrPin);
  switchState1 = digitalRead( switchPin1);
  switchState2 = digitalRead( switchPin2);
  potReading = analogRead(potPin);
  if ( buttonState == LOW && projectStatus == 0){
    //project begin
    digitalWrite(ledPin, HIGH);
    projectStatus = 1;
    //setup starttime and endtime
    if (potReading<=575){
      duration = 1;
    }else if (potReading>575 && potReading<=1150){
      duration = 2;
    }else if (potReading>1150 && potReading<=1725){
      duration = 3;
    }else if (potReading>1725 && potReading<=2300){
      duration = 4;
    }else if (potReading>2300){
      duration = 5;
    duration = duration * 60000;
    endtime = starttime + duration;
  }else if ( (buttonState == LOW || endtime == millis() ) && projectStatus == 1 ){  // if button is pressed again or time is up
    // project end
    digitalWrite( ledPin, LOW);
    projectStatus = 0;
  if (projectStatus == 1){              // project is on
    project();    //run project
  }else if(projectStatus == 0){         // project is low
    // stop brush or drippter
    digitalWrite(brushPin1, LOW);
    digitalWrite(brushPin2, LOW);
void project(){
  if (switchState1 == LOW){                  // put phone on switch
  // move brush or drippter
    digitalWrite(brushPin1, HIGH);
    if(drip1 == 0)                           // if it's not dripping now
      drip1=1;                               // let it drip
  }else if (switchState1 == HIGH){           // lift up phone from switch
    // stop brush or drippter
    digitalWrite(brushPin1, LOW);
    if(drip1==1)                             // if it's dripping now
      drip1 = 0;                             // stop dripping
  if (switchState2 == LOW){
  // move brush or drippter
    digitalWrite(brushPin2, HIGH);
    if(drip2 == 0)
      drip2 = 1;
  }else if (switchState2 == HIGH){
    // stop brush or drippter
    digitalWrite(brushPin2, LOW);
    if(drip2 == 1)
      drip2 = 0;
Tongtong Lu Click to Expand
Code for drippter
//Controls for the H bridge
int c1 = D0;
int c2 = D1;
int c3 = D2;
int c4 = D3;
//a speed of 1 indicates that painting should be taking place, and 0 that it should not
int diner1speed = 1;
int diner2speed = 0;
//These variables control the movement of the slider that moves the pipe pf the pump slowly across the painting
int movetime = 100;
int stoptime = 6000;
void setup()
  pinMode(c1, OUTPUT);
  pinMode(c2, OUTPUT);
  pinMode(c3, OUTPUT);
  pinMode(c4, OUTPUT);
  Particle.subscribe("diotDimSum1On", diner1paint);
  Particle.subscribe("diotDimSum1Off", diner1stop);
  //Uncomment these in order to have the second painting also work
  //Particle.subscribe("diotDimSum2On", diner2paint);
  //Particle.subscribe("diotDimSum2Off", diner2stop);
  Particle.variable("paint", &diner1speed, INT);
int diner1paint(const char * event, const char * data)
    diner1speed = 1;
    return 1;
int diner1stop(const char * event, const char * data)
    diner1speed = 0;
    return 1;
//Uncomment the following two function if there is a second diner
/*int diner2paint(const char * event, const char * data)
    diner2speed = 1;
    return 1;
int diner2stop(const char * event, const char * data)
    diner2speed = 0;
    return 1;
void loop()
    //Moves the pump
    digitalWrite(c3, LOW);
    digitalWrite(c4, HIGH);
    //Moves the motor for movetime amount of time
    digitalWrite(c1, LOW);
    digitalWrite(c2, HIGH);
    //Makes the motor stay still for stoptime amount of time
    digitalWrite(c1, LOW);
    digitalWrite(c2, LOW);
  else if (diner1speed ==0)
    digitalWrite(c1, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(c3, LOW);
    digitalWrite(c4, LOW);
Aditi Chalisgaonkar Click to Expand
Final Prototype
Image uploaded from ios %282%29
Final Prototype


The project was a great learning process as we indulged in a scenario completely new to us as a team and our greatest challenge was to achieve ubiquitous computing to the maximum. Though the prototype design had a long way to go to be a good example of ubiquitous computing, we were sure how to make it work better. The current mechanical design was not efficient enough to achieve what we thought of. So as a next step we would be thinking of a downsizing the whole housing and achieve the mechanism with a well thought out construction. 

DimSum Canvas
Tongtong Lu - https://youtu.be/8tBygUuKaJI
Share this Project


49-713 Designing for the Internet of Things

· 26 members

A hands-on introductory course exploring the Internet of Things and connected product experiences.

Focused on



March 6th, 2017