Face With Animatronic Eyes, Motion Detection and Voice
Are you ready to create something both eerie and captivating?
Components and supplies
1
Arduino Nano
1
Mini MP3 Player Module
5
MG90S Metal Gear RC Micro Servo
1
HC-SR505 Mini Infrared PIR Motion Sensor
Tools and machines
1
Soldering Iron Wire
1
3D Printer (generic)
1
Smart Soldering Iron TS101-BC2
Apps and platforms
1
Arduino IDE
Project description
Code
Servo Test Code
cpp
Servo Motor Code
1#include <Servo.h> 2 3const int servo1 = 2; 4const int servo2 = 3; 5const int servo3 = 5; 6const int servo4 = 6; 7const int servo5 = 9; 8 9Servo myservo1; 10Servo myservo2; 11Servo myservo3; 12Servo myservo4; 13Servo myservo5; 14 15void setup() { 16 myservo1.attach(servo1); 17 myservo2.attach(servo2); 18 myservo3.attach(servo3); 19 myservo4.attach(servo4); 20 myservo5.attach(servo5); 21 22 myservo1.write(75); //right 60 - center 75 - left 90 23 myservo2.write(95); //down 70 - center 95 - up 110 24 myservo3.write(50); //close 50 - open 80 25 myservo4.write(80); //down 110 - center 80 - up 60 26 myservo5.write(90); //right 70 - center 90 - left 110 27 delay(2000); 28} 29 30void loop() { 31 // MOVE 1 32 myservo3.write(80); //close 50 - open 80 33 delay(2000); 34 myservo1.write(90); //right 60 - center 75 - left 90 35 myservo5.write(110); //right 70 - center 90 - left 110 36 delay(1000); 37 38 // MOVE 2 39 myservo1.write(60); //right 60 - center 75 - left 90 40 myservo5.write(70); //right 70 - center 90 - left 110 41 delay(1000); 42 43 // MOVE 3 44 myservo1.write(90); //right 60 - center 75 - left 90 45 myservo5.write(110); //right 70 - center 90 - left 110 46 delay(1000); 47 48 // MOVE 4 49 myservo1.write(60); //right 60 - center 75 - left 90 50 myservo5.write(70); //right 70 - center 90 - left 110 51 delay(1000); 52 53 // MOVE 5 54 myservo1.write(75); //right 60 - center 75 - left 90 55 myservo5.write(90); //right 70 - center 90 - left 110 56 delay(1000); 57 58 // MOVE 6 59 myservo2.write(70); //down 70 - center 95 - up 110 60 myservo4.write(110); //down 110 - center 80 - up 60 61 delay(1000); 62 63 // MOVE 7 64 myservo2.write(110); //down 70 - center 95 - up 110 65 myservo4.write(60); //down 110 - center 80 - up 60 66 delay(1000); 67 68 // MOVE 8 69 myservo2.write(95); //down 70 - center 95 - up 110 70 myservo4.write(80); //down 110 - center 80 - up 60 71 delay(1000); 72 73 // MOVE 9 74 myservo3.write(50); //close 50 - open 80 75 delay(2000); 76}
Face Code
cpp
Main Code
1#include <Servo.h> 2#include "SoftwareSerial.h" 3#include "DFRobotDFPlayerMini.h" 4 5// Servo pins 6const int servo1 = 2; 7const int servo2 = 3; 8const int servo3 = 5; 9const int servo4 = 6; 10const int servo5 = 9; 11 12// Servo objects 13Servo myservo1; 14Servo myservo2; 15Servo myservo3; 16Servo myservo4; 17Servo myservo5; 18 19// SoftwareSerial for DFPlayer 20SoftwareSerial mySoftwareSerial(10, 11); // RX, TX 21DFRobotDFPlayerMini myDFPlayer; 22 23// PIR sensor pin 24#define SENSORPIN 7 25 26// Timers 27unsigned long previousMillis = 0; 28const long pauseTime = 2000; // 2 seconds waiting time between steps 29bool isPlaying = false; // Audio playback status 30bool pirEnabled = true; // PIR sensor status 31 32void setup() { 33 mySoftwareSerial.begin(9600); 34 Serial.begin(115200); 35 pinMode(SENSORPIN, INPUT); 36 37 // Initialize servo motors 38 myservo1.attach(servo1); 39 myservo2.attach(servo2); 40 myservo3.attach(servo3); 41 myservo4.attach(servo4); 42 myservo5.attach(servo5); 43 44 // Servo start positions 45 myservo1.write(75); 46 myservo2.write(87); 47 myservo3.write(50); // Eyelids closed 48 myservo4.write(85); 49 myservo5.write(85); 50 delay(1000); 51 52 Serial.println(F("Initializing DFPlayer...")); 53 54 // Initialize MP3 module 55 if (!myDFPlayer.begin(mySoftwareSerial)) { 56 Serial.println(F("Unable to begin:")); 57 while (true); 58 } 59 Serial.println(F("DFPlayer Mini online.")); 60 myDFPlayer.volume(30); // Volume level (0 - 30) 61} 62 63void openEyes() { 64 myservo3.write(80); // Open the eyelids 65 delay(1000); // Wait 1 second 66} 67 68void playSound() { 69 Serial.println("DFPlayer Working..."); 70 myDFPlayer.play(1); // Play a 5-second audio file 71 delay(5000); // Wait for audio duration 72} 73 74void moveServos() { 75 Serial.println("Moving Servos..."); 76 // Left and right eye look at the upper left corner 77 myservo1.write(65); 78 myservo2.write(75); 79 myservo5.write(105); 80 myservo4.write(65); 81 delay(pauseTime); 82 83 // Left and right eye look at the lower right corner 84 myservo1.write(85); 85 myservo2.write(105); 86 myservo5.write(75); 87 myservo4.write(105); 88 delay(pauseTime); 89 90 // Eyes centered 91 myservo1.write(75); 92 myservo2.write(87); 93 myservo4.write(85); 94 myservo5.write(85); 95 delay(pauseTime); 96 97 // Eyelids close 98 myservo3.write(50); 99 delay(pauseTime); 100} 101 102void loop() { 103 int pirSensor = digitalRead(SENSORPIN); 104 105 // If the PIR sensor is active and no action has been taken 106 if (pirSensor == HIGH && pirEnabled) { 107 pirEnabled = false; // PIR sensor deactivated 108 openEyes(); // Eyes open 109 playSound(); // Audio file is played 110 moveServos(); // Servo movements are started 111 pirEnabled = true; // PIR sensor reactivated 112 } 113 114 delay(50); // A very short delay, for sensor stability 115}
Downloadable files
Eye Holder
3D Part
eye_holder_main.stl
Bars
3D Part
bars_v1.stl
Back Side
3D Part
backside.stl
Joint
3D Part
joint_v1.stl
Joint Center
3D Part
center-joint_v1.stl
Face
3D Part
face_main.stl
Eyelid
3D Part
eyelid.stl
Eyeball
3D Part
eyeball.stl
Comments
Only logged in users can leave comments