Animatronic Robot
A 3d printed robot made with some arduinos and servo's. James Bruton designed this robot. https://www.youtube.com/watch?v=jsXolwJskKM&t=481s. I made some slight changes to it.
What do you need?
Arduino uno
4x small servo, any cheap servo
3 x bigger servo MG 996R 180 degrees
m2 en m3 bolds
m5 bolt
m8 bolt
3d printer
electrical wires
soldering iron
5volt power supply 2 amps minimum
patients
The code
//code aangepast door DIJKX voor controler met twee joysticks en click button.
// vrx rechts op A0
// vrx links op A1
// sw links op A2
// sw rechts op A3
// vry rechts op A4
// vry links op A5
// 5v op 5volt arduino
// GND op GND arduino
#include <Servo.h>
int pot1;
int pot2;
int pot3;
int pot4;
int pot5;
int pot6;
float pot1Scaled;
float pot2Scaled;
float pot3Scaled;
float pot4Scaled;
float pot4aScaled;
float pot5Scaled;
float pot6Scaled;
float pot1Smoothed;
float pot2Smoothed;
float pot3Smoothed;
float pot4Smoothed;
float pot4aSmoothed;
float pot5Smoothed;
float pot6Smoothed;
float pot1SmoothedPrev;
float pot2SmoothedPrev;
float pot3SmoothedPrev;
float pot4SmoothedPrev;
float pot4aSmoothedPrev;
float pot5SmoothedPrev;
float pot6SmoothedPrev;
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
void setup() {
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
pinMode(A4, INPUT);
pinMode(A5, INPUT);
Serial.begin(115200);
servo1.attach(4);
servo2.attach(5);
servo3.attach(6);
servo4.attach(7);
servo5.attach(8);
servo6.attach(9);
servo7.attach(10);
servo1.writeMicroseconds(1200);
servo2.writeMicroseconds(1650);
servo3.writeMicroseconds(1650);
servo4.writeMicroseconds(1500);
servo5.writeMicroseconds(1550);
servo6.writeMicroseconds(1500);
servo7.writeMicroseconds(1450);
}
void loop() {
pot1 = analogRead(A0);
pot2 = analogRead(A1);
//pot3 = analogRead(A2);
//pot4 = analogRead(A3);
pot5 = analogRead(A4);
pot6 = analogRead(A5);
// scale all pots for the servo microseconds range
pot1Scaled = ((pot1 - 512) * -1.6) + 1200;
pot2Scaled = (pot2 - 512) + 1500;
//pot3Scaled = (pot3 - 512) + 1500;
//pot4Scaled = ((pot4 - 512) * 1.2) + 1500;
//pot4aScaled = ((pot4 - 512) * -1.2) + 1500;
pot5Scaled = (pot5 - 512) * 1.5;
pot6Scaled = (pot6 - 512) + 1650;
pot4Scaled = constrain(pot4Scaled,900,1500);
pot4aScaled = constrain(pot4aScaled,1500,2100);
// smooth pots
pot1Smoothed = (pot1Scaled * 0.02) + (pot1SmoothedPrev * 0.98);
pot2Smoothed = (pot2Scaled * 0.02) + (pot2SmoothedPrev * 0.98);
//pot3Smoothed = (pot3Scaled * 0.02) + (pot3SmoothedPrev * 0.98);
//pot4Smoothed = (pot4Scaled * 0.05) + (pot4SmoothedPrev * 0.95);
// pot4aSmoothed = (pot4aScaled * 0.05) + (pot4aSmoothedPrev * 0.95);
pot5Smoothed = (pot5Scaled * 0.02) + (pot5SmoothedPrev * 0.98);
pot6Smoothed = (pot6Scaled * 0.02) + (pot6SmoothedPrev * 0.98);
// bookmark previous values
pot1SmoothedPrev = pot1Smoothed;
pot2SmoothedPrev = pot2Smoothed;
//pot3SmoothedPrev = pot3Smoothed;
//pot4SmoothedPrev = pot4Smoothed;
//pot4aSmoothedPrev = pot4aSmoothed;
pot5SmoothedPrev = pot5Smoothed;
pot6SmoothedPrev = pot6Smoothed;
Serial.print(pot1Smoothed);
Serial.print(" , ");
Serial.print(pot2Smoothed);
Serial.print(" , ");
//Serial.print(pot3Smoothed);
//Serial.print(" , ");
// Serial.print(pot4Smoothed);
//Serial.print(" , ");
Serial.print(pot5Smoothed);
Serial.print(" , ");
Serial.println(pot6Smoothed);
// write servos
servo1.writeMicroseconds(pot1Smoothed);
servo2.writeMicroseconds(pot6Smoothed - pot5Smoothed);
servo3.writeMicroseconds(pot6Smoothed + pot5Smoothed);
servo5.writeMicroseconds(pot2Smoothed);
servo7.writeMicroseconds(pot2Smoothed);
//servo4.writeMicroseconds(pot4Smoothed);
//servo6.writeMicroseconds(pot4aSmoothed);
//eyes open
if (digitalRead(A3) == LOW) { //if Value read of the button ==LOW:
// delay(5); //5 milliseconds of delay
servo6.writeMicroseconds(1000);
servo4.writeMicroseconds(2000);
}
//eyes closed
if (digitalRead(A2) == LOW) { //if Value read of the button ==LOW:
//delay(5); //5 milliseconds of delay
servo4.writeMicroseconds(1500);
servo6.writeMicroseconds(1500);
}
delay(5); // run loop 200 times/second
}