Introduction: Gordon Ramsay Mechatronics Face

We created a Mechatronics Gordon Ramsay face for the ME511 class at the University of Illinois at Chicago. This face can react to heat and motion stimuli detected by Arduino UNO-controlled sensors. In response to these stimuli, the face moves its mouth, eyebrows, and speaks short phrases in the voice of Gordon Ramsay.

Project design by Shahrzad Shiravi and Nikodem Stepniak.

Supplies

  • Arduino UNO R3 Controller Board
  • Servo motor (x3)
  • 3D printed servo arms
  • DHT11 Temperature and Humidity Module
  • Ultrasonic Sensor
  • DuPont Wires
  • Arduino SD Card Module
  • CQRobot Minispeaker
  • Cardboard
  • White carton
  • Wooden Platform
  • Scissors
  • Small wooden boards
  • Hacksaw
  • Epoxy
  • SD Card
  • Boxcutter

Step 1: Literature Review

1.     E.T. the Extra-Terrestrial: The E.T. character is an animatronic designed by Carlo Rambadi for the 1982 science-fiction classic. The E.T. puppet had moving arms, hands, and four switchable heads, used for portraying different facial expressions of the alien character. The puppet was a primitive yet recognizable early animatronic and cost an estimated $1.5 million to create.

2.     Arduino Steve: This is an animatronic of the Minecraft game character Steve, which rotates around its waist and moves a sword up and down. The only purpose of this product is entertainment. Steve and the sword are made out of paper and glued together. A micro-servo acts as Steve’s waist around which he rotates, and to which his head is attached. Another servo is placed horizontally on top of the first one to act as the rotating arm with the sword attached to it. The servo motors are controlled with an analog joystick through an Arduino board – moving the joystick up and down moves the sword, while moving it left and right moves the body. The animatronic does not use any additional sensors.

a.     Instructables link: https://www.instructables.com/Arduino-Steve-a-Minecraft-Animatronic/

b.     Video Link: https://youtu.be/uw0KhXSL9GI

3.     Animatronic Talking Raven: This is a Halloween decoration of a raven which moves its back feathers, body, neck, and beak. The bird, whose body is made of plywood and paper, also talks and has LED-lit eyes. All of these actions are triggered by movements detected by two infrared sensors and two ultrasound sensors. The moving parts are once again powered by servo motors. The project’s components are controlled by an Arduino board.

a.     Instruction link: https://projecthub.arduino.cc/pibyte/e8e4e542-443f-4400-a870-ab9ac8397cc7

b.     Video link: https://youtu.be/aMipZJZThTU

Step 2: Supporting Structure

When building the support structure, the primary goal was to achieve a design consisting of two layers of platforms on which the servo motors can rest at the same height as their moving joints. We started this process by printing the Gordon Ramsay face and gluing it to cardboard in order to get an idea of where the joints would be so that the platforms could be lined up at the proper height. The bottom platform is a thick wooden board with a white carton attached at the top. The top platform is also a white carton, held up by thin wooden boards. The supporting structure and cardboard with the face are also connected by the same wooden boards.

Step 3: Joint Design

There was a total of three moving joints present in the project - two eyebrows and one mouth. Each joint was controlled by a servo motor. These motors were connected to the joints via a 3D-printed arm attached to the motors. The joints themselves are cardboard cutouts of their corresponding parts on Gordon Ramsay's face.

The eyebrows are controlled by two servo motors at the top platform of the support structure. They respond to the stimuli by being raised up and down to give the appearance of Gordon Ramsay raising his eyebrows. Both motors are synchronized to respond simultaneously.

The bottom part of the mouth is moved by the servo in response to stimuli in order to make it appear that the face is talking. The mouth's movements are synchronized with the sound of the phrases said by Gordon Ramsay.

Step 4: Actuators

The actuators used for the movement of the joints were Servo motors. We chose to use Servo motors because they are cheap, easy to use, and versatile in their movements, making them an ideal selection for this project. By attaching the 3D-printed arms to the ends of the motors, we were able to use them for the simple up and down movements we needed to make the mouth and eyebrows "move"

Step 5: Sensors

Two types of sensors were used in this project - the Ultrasonic Sensor and DHT11 Temperature and Humidity module, both provided in the Arduino UNO Starter kit.

The Ultrasonic Sensor detects motion close to the sensor and activates one of two prompts during which the eyebrows and mouth move in sync with a Gordon Ramsay quote.

The DHT11 detects heat above a certain threshold and activates the other pre-programmed prompt of the face talking. It can be easily activated with a lighter or space heater.

Step 6: Programming

Here are the codes for both sensors used:


Ultrasonic: 

#include <Servo.h>

#include "SoftwareSerial.h"

#include "DFRobotDFPlayerMini.h"

#include "Arduino.h"


Servo servo1;

Servo servo2;

Servo servo3;

SoftwareSerial mySoftwareSerial(5, 6); // RX, TX

DFRobotDFPlayerMini myDFPlayer;

void printDetail(uint8_t type, int value);


int trigPin=12;

int echoPin=11;

long distance;

long duration;


void setup() {

 mySoftwareSerial.begin(9600);

 Serial.begin(115200);

 Serial.println();

 Serial.println(F("DFRobot DFPlayer Mini Demo"));

 Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

 

 if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.

  Serial.println(F("Unable to begin:"));

  Serial.println(F("1.Please recheck the connection!"));

  Serial.println(F("2.Please insert the SD card!"));

  while(true);

 }

 Serial.println(F("DFPlayer Mini online."));

 servo1.attach(10);

 servo2.attach(9);

 servo3.attach(8);

 pinMode(trigPin, OUTPUT);

 pinMode(echoPin, INPUT);


}


void loop() {

 ultra();

if 

(distance<=5){

  myDFPlayer.volume(30); //Set volume value. From 0 to 30

 myDFPlayer.play(1); //Play the first mp3

 delay(200);

 servo3.write(80);

 delay(200);

 servo3.write(90);

 delay(200);

 servo3.write(80);

 delay(200);

 servo3.write(90);

 delay(200);

 servo3.write(80);

 delay(200);

 servo3.write(90);

 delay(200);

 servo3.write(80);

 delay(200);

 servo3.write(90);

 delay(200);

 servo3.write(80);

 delay(200);

 servo3.write(90);

 delay(200);

 servo3.write(80);

 delay(200);

 servo3.write(90);

 delay(700);


 

 servo3.write(80);

  servo1.write(80);

 servo2.write(80);

  delay(200);

 servo3.write(90);

 servo1.write(95);

 servo2.write(95);

 delay(200);

  servo3.write(80);

   servo1.write(80);

 servo2.write(80);

 delay(200);

 servo3.write(90);

  servo1.write(95);

 servo2.write(95);

 delay(5000);


 }

}


void ultra(){

 digitalWrite(trigPin, LOW);

 delayMicroseconds(2);

 digitalWrite(trigPin, HIGH);

 delayMicroseconds(10);

 digitalWrite(trigPin, LOW);

 duration = pulseIn(echoPin, HIGH);

 distance = duration*0.034/2;}





Heat:

 #include <dht.h>

 #include <Servo.h>

 #include "SoftwareSerial.h"

#include "DFRobotDFPlayerMini.h"

#include "Arduino.h"

 Servo servo1;

Servo servo2;

Servo servo3;

SoftwareSerial mySoftwareSerial(5, 6); // RX, TX

DFRobotDFPlayerMini myDFPlayer;

void printDetail(uint8_t type, int value);

dht DHT;

#define DHT11_PIN 7

void setup() {

 mySoftwareSerial.begin(9600);

 Serial.begin(115200);

 Serial.println();

 Serial.println(F("DFRobot DFPlayer Mini Demo"));

 Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

 

 if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.

  Serial.println(F("Unable to begin:"));

  Serial.println(F("1.Please recheck the connection!"));

  Serial.println(F("2.Please insert the SD card!"));

  while(true);

 }

 Serial.println(F("DFPlayer Mini online."));

Serial.begin(9600);

servo1.attach(10);

 servo2.attach(9);

servo3.attach (8);

}

void loop()

{

int chk= DHT.read11 (DHT11_PIN);

Serial.print ("Temperature=");

Serial.println (DHT.temperature); Serial.print ("Humidity = "); Serial.println (DHT. humidity);

delay(1000);

if(DHT.temperature >= 24) {

  myDFPlayer.volume(30); //Set volume value. From 0 to 30

 myDFPlayer.play(2); //Play the first mp3

servo3.write (80);

servo1.write (100);

servo2.write (100);

delay(100);

servo3.write(90);

servo1.write (90);

servo2.write (90);

delay(100);

servo3.write (80);

servo1.write (100);

servo2.write (100);

delay(100);

servo3.write(90);

servo1.write (90);

servo2.write (90);

delay(100);

servo3.write (80);

servo1.write (100);

servo2.write (100);

delay(700);

servo3.write(90);

servo1.write (90);

servo2.write (90);

delay(100);

servo3.write (80);


delay(100);

servo3.write(90);


delay(100);

servo3.write (80);


delay(100);

servo3.write(90);


delay(100);

servo3.write (80);


delay(100);

servo3.write(90);


delay(100);

servo3.write (80);

delay(10000);

}

else if (DHT.temperature < 24){

servo3.write(90);

servo1.write(90);

servo2.write(90);


}


}

Step 7: Final Product

Pictures of the final product as well as a video of it working can be seen here.

Step 8: Lessons Learned/Suggestions for Improvement

As we went along with the project we found that some things could have gone more smoothly if we did it a second time. Here are a few lessons we learned:

  1. By doing this project we learned how to use an Arduino board to combine the use of multiple sensors and actuators into one product. While this was a simple mechatronics project, it gives us the blueprint for the creation of more complicated systems.
  2. Coding moving parts is tedious work. It takes many lines of code to program a few seconds of a mechatronics face talking in a very crude manner, so to create more complex robotic movements the work would be extremely difficult and time-consuming.

Additionally, we have some suggestions for improvement of the project:

  1. Create a blueprint for your supporting structure. We essentially built the structure with nothing more than a verbal plan of how it was going to look. Because of this, we ran into some problems later on as certain components would begin lining up less and less. This was fine because it was a small project, but taking the proper measurements and planning the structure is essential for anything larger.
  2. The DHT11 sensor has a very slow response time and is not very exact in its measurements. The sensor takes a few seconds to start working every time because of its slow response time. Another flaw of the DHT11 is the large increments between measurements - 1 degree Celcius. Overall, the sensor is cheap and not ideal for this project therefore it might be worth looking into different temperature modules for future mechatronics ventures.