Cyber Tail
Introduction: Cyber Tail
About 25 million years ago, our ancestors lost their tails during the evolution to better adapt to the the environment. Today, as we live in the digital age, our bodies are evolving along with the cyber world. What would a cybernetic tail bring to our daily life? With the easily accessible technologies, such as Arduino and 3D printing, you can make your own cyber tail!
// This project was undertaken as part of the Computational Design and Digital Fabrication seminar in the ITECH masters program at the University of Stuttgart.
// By <PERSON>, <PERSON>, and <PERSON>
Supplies
* Arduino Uno
* Infrared reflective sensor module TRCT5000
* Accelerometer MPU6050
* Servo motor SG90 (x4)
* Capacitor (x4)
* 9v battery
* EPE foam rods
Step 1: Making the Base Frame
The base frame can hold all the necessary electronic parts. You can either download the attached 3d model and print it on a 3d printer, or just be creative and make it using foam boards, cardboards, or wood boards. 949
As long as it is strong enough to hold all the parts and a 1 kg tail shown in the exploded diagram.
Step 2: Attaching Electronic Parts to the Frame
Attached Arduino Uno, breadboard, 9v battery, and 4 mini servo motors to the frame as indicated in the assembly diagram in step 1.
Step 3: Connecting the Circuit
Follow the diagram and connect the circuit using jumping wires. Two longer wires (about 0.6 - 1m long) will be needed for extending the sensors.
Step 4: Coding
Connect Arduino Uno with computer using a USB cable and upload the cade below.
In order to use the accelerometer to get the hand position, the MPU6050 library will need to be installed on the Arduino IDE. Go to this webpage https://www.arduino.cc/reference/en/libraries/mpu6050/ and download the latest version. Then open the Library Manager in the Arduino IDE and install it from there.
int IRSensor = 10; // connect IR sensor module to Arduino pin D10
int LED = 13; // connect LED to Arduino pin 13
#include <Servo.h>
#include <Wire.h>
#include <MPU6050.h>
MPU6050 mpu;
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int pos1 = 90;
int pos2 = 90;
int pos3 = 90;
int pos4 = 90;
void setup()
{
//Acceleration sensor
Serial.begin(115200);
Serial.println("Initialize MPU6050");
while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
{
Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
delay(500);
}
// If you want, you can set accelerometer offsets
// mpu.setAccelOffsetX();
// mpu.setAccelOffsetY();
// mpu.setAccelOffsetZ();
checkSettings();
Serial.println("Serial Working"); // Test to check if serial is working or not
pinMode(IRSensor, INPUT); // IR Sensor pin INPUT
servo1.attach(3); //servo1 signal connected to pin3
servo2.attach(5); //servo2 signal connected to pin5
servo3.attach(6); //servo3 signal connected to pin6
servo4.attach(9); //servo4 signal connected to pin9
}
void checkSettings()
{
Serial.println();
Serial.print(" * Sleep Mode: ");
Serial.println(mpu.getSleepEnabled() ? "Enabled" : "Disabled");
Serial.print(" * Clock Source: ");
switch(mpu.getClockSource())
{
case MPU6050_CLOCK_KEEP_RESET: Serial.println("Stops the clock and keeps the timing generator in reset"); break;
case MPU6050_CLOCK_EXTERNAL_19MHZ: Serial.println("PLL with external 19.2MHz reference"); break;
case MPU6050_CLOCK_EXTERNAL_32KHZ: Serial.println("PLL with external 32.768kHz reference"); break;
case MPU6050_CLOCK_PLL_ZGYRO: Serial. 991