Introduction: Smart Phone Interface

Cool way to interface your iPhone Siri or Android "ok google" smart phone "AI's" with a humanoid face!!

It will interact with any sound you plug into it via component cable. The head has the following features, when activated it will push its head through the fabric, RGB light eyes and a moving jaw programmed to follow sound.

The overall project is a proof of concept, making a smart home application more relatable. Having "picture frames" placed throughout a home gives the ability to have a interface to connect to your home, internet and your environment.

Step 1: Special Thanks To...

This Instructable is a project implemented during a " hardware hackathon" event where teams are to engineer a project within 24 hours. The theme of the hackathon is to create a project in relation to the internet.

With a team of four, the following people are in recognition and thanks for completing the project.

  • Vanessa (Programming)
  • Daiane (Hardware and mechanical design)
  • Oliver (Programming)

My team wants to give thanks to Digilent, as they created the event at my school. They supplied parts, knowledge and have a constant support for the engineering community. Their link is below representing a ton of engineering stuff!!!!

Overall the project had great results, coming out scarier than we intended. We originally wanted the gender of the AI to be a woman, but the face came out a little more manly.

We hope our project inspires you to build our talking head or implement something similar. The possibilities is endless!!

Step 2: Before You Begin!!!!!

The level of difficulty is low, considering you have some experience with Arduino. The project consists of using more creativity than being technologically advanced.

The cool factor in this project is that this can go anywhere, from a Halloween scare, to implementing it as a "AI" like Jarvis to update you on the weather, update you on items your doing, or just to say "hi!"

The following supplies below were used in crafting the interface (All electronics from Digilent):

Supplies (quantity - item)

  • 3 - Paper/foam particle board (Like the ones used to make science fair presentations on)
  • 4 - Square/rectangular foam
  • 2 - Ping pong balls
  • 2 - (5-3)V LEDs
  • 4 - Servos
  • N/A - Glue
  • N/A - Air dry modeling clay
  • 1 - Switch
  • N/A - Varying screw lengths
  • N/A - Varying screw and nut lengths
  • N/A - Speakers with component cable (Buy at Goodwill or similar)
  • N/A - Wire
  • Punched metal coil (Used to support varies objects)
  • Right angle supports both big and small
  • 2'x2' - Spandex like cloth


  • Computer (obviously)
  • Digilent board aka arduino (Link below)

  • Breadboard
  • Jumper wires
  • Hot Glue gun
  • Exacto Knife
  • Hacksaw

Due to poor conditions in regards to limited supplies, space and only 24 hours to build this, way better methods can be implemented. Build off this instructable to design a better AI interface.

Step 3: Making the Face

Designing the way the face will look like will be up to you! Our model followed using foam and air dry modeling clay to form a face.

Using foam as the base (skeleton) for the face, a general shape and size of the head can be made. Recommending a saw, cut a length of a rectangular foam piece to the width of the head, and the length consisting of the length of the head plus around 4 inches below for later mounting.

I'd recommend taking a marker and drawing the outline of the face to get a ball park estimate.

Step 4: Making the Face Continued

After drawing the face, cut the piece at the middle of the mouth, for a future jaw. Layer the foam as represented above in the picture elevating the upper head portion, use the hot glue gun to glue them together. Note to make sure the foundation of face is on a thick piece of foam roughly an 1" thick. We will need good support for holding the head and mounting it to our frame holding the head.

The lower half will represent remaining lower lip and chin, along with a little extra length for support. A picture above represents a punched hole metal length formed to act as the jaw. The length to cut depends on how width of the head along with how the servos mount to it. Ours was roughly 5 inches, seen mounted to the servos connected above. We just screwed the punched metal to the servos lightly as future calibration maybe needed.

Step 5:

Start adding foam to the face adding a skeleton to it. The servos are represented below with the jaw. I recommend glueing and screwing the lower foam jaw to the punched metal. This gives an idea of proportions, when reaching a good outline of the face, begin hot gluing the face together.

Step 6:

After finishing the skeleton of the face, the eyes will consist of two ping pong balls and cut them in half with the exacto knife. Add the "eyes" to the formed face, adding a slit to the eyes as represented in the picture to later sneak an LED into them. Hot glue the eyes down, making sure to not block the side inserts.

Step 7:

Mount the servos, using hot glue and the smaller right angle braces screwing them into the foam. Begin adding clay to the face! Make sure to pack the clay down to the foam well for stability. Make sure to emphasize the forehead, cheeks, nose and chin/lips.

Note to make sure to place a channel to the ping pong balls so no clay gets in the way to wiring the LEDs up.

Step 8: Building the Frame

Finishing the face, the box that will contain the head and controller can be built. Better methods and materials can be used, but we just cut out the presentation foam boards into a box, forming it with nuts and bolts with larger right angle pieces. The box should be as wide as the face, a hair line space between the face and the wall of the box. The height of the boxshould be the total height of the face with half to an inch of space. It needs to be enclosed for the face to have support from the box.

Step 9:

Next, the mechanics to make the face to come out of the box can be approached from many different ways. The face will come out of the box hinged at the base, a form of showing its being activated. The method used involved mounting two servos in the box to rotate a wheel. A arm will be hinged on both sides, on the wheel connected to the servo and the back of the foam backing of the face. The diagram above represents a simple model of how the face will move.

Step 10:

Time to finalize the case and the mechanics of the head. We sprayed painted ours and sanded the edges down to make it look cleaner. A concept we implemented consisted of using a cloth to cover the face to make it more mysterious. This requires the cloth to be stretched over the box tightly and kept to the frame with the punched metal. Be sure to make it tight enough to display the features of the face.

Step 11: Electronics

Hooking up the servos, and lights are self explanatory looking at the arduino code represented below. The speaker is torn apart to be put in the box.

Note: the speaker's positive wire goes to the analog pin A0 and the ground wire to the ground pin. The phone/component producing sound will plug into the component cable from the speaker.

IMPORTANT NOTE: The servos to move the head in the upward position has not been added yet! Will update.

// Sweep
// by BARRAGAN // This example code is in the public domain.

// NOTE: UART will be disabled when servo is attached to pin 0 or 1.


Servo myServo, servo2; // create servo object to control a servo // a maximum of eight servo objects can be created float reading = 0.0; float inputPin = A0; int pos = 0; // variable to store the servo position int pos2 = 0;

// set pin numbers: const int buttonPin = 29; // the number of the pushbutton pin const int ledPin = 2; // the number of the LED pin const int ledPin2 = 3;

// variables will change: int buttonState = 0; // variable for reading the pushbutton status

int sensorValue = 0; // the sensor value int sensorMin = 1023; // minimum sensor value int sensorMax = 0; // maximum sensor value

void setup() { Serial.begin(9600); myServo.attach(78); servo2.attach(81);

while (millis() < 5000) { sensorValue = analogRead(inputPin);

// record the maximum sensor value if (sensorValue > sensorMax) { sensorMax = sensorValue; }

// record the minimum sensor value if (sensorValue < sensorMin) { sensorMin = sensorValue; } }

// initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the LED pin as an output: pinMode(ledPin2, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT);

myServo.write(10); servo2.write(10);


void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin);

if (buttonState == HIGH) { // turn LED on: digitalWrite(ledPin, HIGH); digitalWrite(ledPin2, HIGH);

// read from the sensor: sensorValue= analogRead(inputPin); //new_value = sensorValue; sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255); // sensorValue = constrain(sensorValue, 0, 255); if(sensorValue > 238){ pos2 = 10; for(pos = 10; pos < 60; pos += 1) // goes from 0 degrees to 45 degrees { myServo.write(pos2); servo2.write(pos); delay(5); pos2 -= 1; } } else{ myServo.write(10); servo2.write(10); }

} else {

// turn LED off: digitalWrite(ledPin, LOW); digitalWrite(ledPin2, LOW); myServo.write(10); servo2.write(10); }


Step 12: Videos and Future Work

Heres several links to the face talking.

Overall the project was a success, but there are so many different and better ways to approach this project. Size is a factor, as to mount this on a wall different materials need to be used to make it compact. Access to a 3D printer can make a difference in the world.

With this as a proof of concept, the sky is limitless. Have fun!!! AND THANK YOU DIGILENT!!!!!!!!!!!!