An experimental sculpture which uses a motorized mirror to explore anthropomorphism in inanimate objects through motion – by rapidly changing perspectives. Using a camera and being able to rotate on two axes, the panel reacts to a person’s face and will either be shy, frantic or neglecting your presence. The motions can be hectic and abrupt or slow and deliberate to convey these personalities based on the PAD emotional state model and Laban Movement Analysis.
The Watch was built in openFrameworks utilizing computer vision, the Arduino and servo motors. The project consists of various parts:
– Mirror Construction
The construction for the mirror was entirely made out of MDF wood. The pieces were made to hold the mirror, webcam and the servos.
The viewing angle is important for the camera. A hole was made in the mirror using a drill press with a ½” Diamond Hole Saw. The webcam was embedded directly behind the mirror in the center. This way the camera’s viewing angle will always rotate with the mirror.
Finally, to give the sculpture a finishing touch I made a shell out of ½“ polystyrene foam board, sanded it down and painted it was a layer of white spray paint.
– Servo motors
For rotation the mirror on the x- and y-axis, I used 2 servos with an Arduino. Connecting them to the Arduino is pretty straightforward. Simply connect the Vcc and Ground respectively and wire the output directly to an Arduino pin.
As for the servos themselves, the first servo is the Hitec HS-5485HB Servo, which controls y-axis rotation, and the second servo Hitec HS-5645MG Servo rotates the mirror on the x-axis. The HS-5485HB is a fairly cheap servo with a reasonable amount of torque. Unfortunately, I needed a servo with even higher torque to operate the x-axis rotation, because the mirror is approximately 4 inches away from the pivot point of the second servo. With the mirror weighing about 2lbs (32oz) the required servo torque would be 32 * 4 = 128 oz-in.
Using the stronger HS-5645MG servo came with a power supply problem. A stronger servo requires more power and unfortunately the Arduino and USB isn’t capable of provide the necessary ampere to move servo. Instead I used an external power supply of 4 AA batteries.
Along with the servos, I picked up 2 mounts called ServoBlocks that would allow you to connect multiple servo very easily (and they look bad ass as well).
The entire software is written in openFrameworks and utilizes the add-on libraries ofxCv, ofxTweenzor, ofxUI and firmata serial communication. In order to detect a person’s face, I used the standard frontal face haarcascade from Kyle McDonald’s ofxCv. If multiple faces are detected, it cycles through all the objects and only sees the biggest object as a face.
Ability to control and create smooth motion is essential to depict anthropomorphism. A tweening library ofxTweenzor was used in order to achieve this. The tween would allow control over the beginning and end points, delay, tweening time and the type of tween through one single command (identical to tweening in Flash). The tween variable is then send as serial data to the Arduino which drives the servos.
ofxUI is used to visualize data such as personality state and show the variables of the servos.
In my piece, I showcased the personalities Shy, Franctic, Ignoring as an experiment to capture anthropomorphism. These personalities can be described in summary in the following models as:
PAD Emotional State:
- Shy: displeasure, non-arousal, submissive
- Frantic: displeasure, high arousal, dominant
- Ignoring: displeasure, non-arousal, dominant
Laban Movement Analysis:
- Shy: sustained time, indirect space
- Frantic: quick time, direct space
- Ignoring: quick time, direct space
With the models above, the following motion patterns were formed:
- Shy: delayed, slow movements looking downwards (negative x axis)
- Frantic: abrupt and fast movements going in any direction
- Ignoring: fast deliberate movements towards a certain point
- firmataExample for serial communication
- Arduino Nano v3
- 1x Hitec HS-5485HB Servo
- 1x Hitec HS-5645MG Servo
- 2x Standard Hitec ServoBlocks
- Microsoft LifeCam Cinema 720p
- Connects Arduino on launch and resets the servos to the neutral servo position.
- Performs an idle motion (sweeping from left to right) state when no face is detected.
- When face is detected and user is close enough for 500ms, disables idle state and randomly select one out of three personalities.
- If “Shy”, delay and move left or right very slowly facing down.
- If “Frantic”, rapidly shake randomly left/right and up/down.
- If “Ignore”, move left or right / up or down with a fast motion.
- Rotates servo in a certain range in the x- and y-axis based on personality.
- Continues until face detection is lost.
- If face detection is lost for 10 seconds, reset to idle state.
- Buffer time of 4 seconds if the face detection suddenly dropped
- Neat UI with ofxUI to visualize everything on screen
- Resets to neutral servo position on exit.