This is a drawing machine which allows you to control the brush by sweeping your hands in front of the sensor. As the hand sweeps towards the sensor, the brush will move left, and vise versa. As the brush move to the right-most position, a tab attached to the pen holder will touch the switch, which makes the pen stop for a second.

The biggest challenge while testing it is its unstableness. A subtle change in angles will result in the shaking of the brush. In addition, it is hard for the tab to touch the switch because of the shivering. However, I like the way that shaking adds a lot of interesting texture to the brushstrokes.

touching the switch
ink marks

Code:

#include <Servo.h&gt;

//variables 
int servoPin=5; 
int switchPin=9;
int prevSenVal=0;  //the previous sensor value  
int prevAngle=0; 
int unitAngle=1;   //the angle the servo rotates 
int maxAngle=83;   //the maximum rotate angle 

Servo hobbyServo; 

void setup() {
  Serial.begin(115200);
  hobbyServo.attach(servoPin); 
  hobbyServo.write(0); // initiate with 0 degree of angle 
}

void loop() {
  if (digitalRead(switchPin)==1){    //when hit the switch, stop for 1 sec 
    delay(1000);
  }
  else{
    int currSenVal=analogRead(A0); 
    Serial.println(currSenVal);

    //compare the current sensor value to the previous one 
    // if larger, move to right; if smaller, move to left 
    if (currSenVal==prevSenVal) {     //stop
      hobbyServo.write(prevAngle); 
    }
    else if (currSenVal&gt;prevSenVal){       //servo move counterclockwise 
      int currAngle=prevAngle+unitAngle; 
      if (currAngle&gt;=maxAngle){       //stop 
        hobbyServo.write(maxAngle);
      }
      else {
        prevAngle=currAngle;          //set previous angle to be the current angle 
        prevSenVal=currSenVal;        //set previous sensor value to be the current one 
        hobbyServo.write(currAngle); 
      }
    }
    else if (currSenVal<prevSenVal){       //servo move clockwise
      int currAngle=prevAngle-unitAngle; 
      if (currAngle<=0){
        hobbyServo.write(0);
      }
      else {
        prevAngle=currAngle;  
        prevSenVal=currSenVal;
        hobbyServo.write(currAngle); 
      }
    }
  }
}