{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \f0\fs24 \cf0 //By Diogo Branco, August 2014\ //This code is in the public domain.\ //This code is free to use and alter at your will but please keep the credits.\ //This is intended to be a Self Preservation Robot. \ //The goal is to mimic some of the animal behaviour that we see in Nature when it comes to the self preservation instinct.\ //The approach will be to mimic some self preservation mechanisms except, the fighting reflex. \ //The robot will measure distance via IR sensors and when an object approaches less than 20cm, it will light an led, sounds an buzzer and finally run in the opposite direction of the obstacle detected.\ //The led is intended to mimic the puffing behaviour of some animals, that pretend to be bigger and more impressive. \ //Then the buzzer is intended to mimic the aggressive sound that some animals do like the rattle snake\ //Finally the fleeing, the most common of the self preservation strategies in Nature, runaway before becoming someone's lunch :)\ //This will also be an omni directional robot so it can flee immediately in any direction.\ \ int IRpin0 = A0;\ int IRpin1 = A1;\ int IRpin2 = A2;\ // int Led0 = 2;\ // int Led1 = 3;\ // int Led2 = 4;\ int Buzzer = 12;\ //int Buzzer = 7;\ int LeftMotorForward = 6;\ int LeftMotorBackward = 5;\ int RightMotorForward = 9;\ int RightMotorBackward = 8;\ int CenterMotorForward = 10;\ int CenterMotorBackward = 11;\ \ void setup()\ \{\ \ pinMode(IRpin0, INPUT);\ pinMode(IRpin1, INPUT);\ pinMode(IRpin2, INPUT);\ // pinMode(Led0, OUTPUT);\ // pinMode(Led1, OUTPUT);\ // pinMode(Led2, OUTPUT);\ for(int Ledx = 2; Ledx < 5; Ledx++)\{\ pinMode(Ledx, OUTPUT);\ \}\ pinMode(Buzzer, OUTPUT);\ pinMode(LeftMotorForward, OUTPUT);\ pinMode(LeftMotorBackward, OUTPUT);\ pinMode(RightMotorForward, OUTPUT);\ pinMode(RightMotorBackward, OUTPUT);\ pinMode(CenterMotorForward, OUTPUT);\ pinMode(CenterMotorBackward, OUTPUT); \ // start serial port\ Serial.begin(9600);\ Serial.println("IR distance measure");\ \ \}\ \ void loop()\ \{\ Serial.print(" Looking for obstacles...");\ analogRead(IRpin0); // Send the command to get distance\ analogRead(IRpin1); // Send the command to get distance\ analogRead(IRpin2); // Send the command to get distance\ Serial.println("DONE");\ Serial.print("Distance to obstacle 0: ");\ Serial.println(analogRead(IRpin0));\ Serial.print("Distance to obstacle 1: ");\ Serial.println(analogRead(IRpin1));\ Serial.print("Distance to obstacle 2: ");\ Serial.println(analogRead(IRpin2));\ \ if (analogRead(IRpin0) <= 70)\ \{\ Serial.print("Obstacle detected!!!");\ Serial.println("Initiating Escape Procedure! ");\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \}\ digitalWrite(Buzzer, HIGH);\ delay(50);\ digitalWrite(Buzzer, LOW);\ delay(50);\ digitalWrite(Buzzer, HIGH);\ delay(50);\ digitalWrite(Buzzer, LOW);\ delay(50);\ digitalWrite(Buzzer, HIGH);\ delay(50);\ digitalWrite(Buzzer, LOW);\ delay(50); \ moveForward();\ delay(1500);\ moveStop();\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \}\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \}\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \} \ \}\ \ if (analogRead(IRpin1) <= 30)\ \{\ Serial.print("Obstacle detected!!!");\ Serial.println("Initiating Escape Procedure! ");\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \}\ digitalWrite(Buzzer, HIGH);\ delay(50);\ digitalWrite(Buzzer, LOW);\ delay(50);\ digitalWrite(Buzzer, HIGH);\ delay(50);\ digitalWrite(Buzzer, LOW);\ delay(50);\ digitalWrite(Buzzer, HIGH);\ delay(50);\ digitalWrite(Buzzer, LOW);\ delay(50); \ moveBackward();\ delay(1500);\ moveStop();\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \}\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \}\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \} \ \}\ \ if (analogRead(IRpin2) <= 70)\ \{\ Serial.print("Obstacle detected!!!");\ Serial.println("Initiating Escape Procedure! ");\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \}\ digitalWrite(Buzzer, HIGH);\ delay(50);\ digitalWrite(Buzzer, LOW);\ delay(50);\ digitalWrite(Buzzer, HIGH);\ delay(50);\ digitalWrite(Buzzer, LOW);\ delay(50);\ digitalWrite(Buzzer, HIGH);\ delay(50);\ digitalWrite(Buzzer, LOW);\ delay(50);\ moveCenter();\ delay(1500);\ moveStop();\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \}\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \}\ for(int Ledx = 1; Ledx < 5; Ledx++)\{\ digitalWrite(Ledx, HIGH); // turn on Led0\ delay(50);\ digitalWrite(Ledx, LOW);\ \} \ \} \ \}\ \ void moveForward() //This function tells the robot to go forward \ \{\ Serial.println("");\ Serial.println("Moving forward");\ digitalWrite(CenterMotorBackward, HIGH);\ digitalWrite(CenterMotorForward, LOW);\ digitalWrite(LeftMotorBackward, LOW);\ digitalWrite(LeftMotorForward, HIGH);\ \}\ \ void moveBackward() //This function tells the robot to move backward\ \{\ Serial.println("");\ Serial.println("Moving backward");\ digitalWrite(LeftMotorForward, LOW);\ digitalWrite(LeftMotorBackward, HIGH);\ digitalWrite(RightMotorForward, HIGH);\ digitalWrite(RightMotorBackward, LOW);\ \}\ \ void moveCenter() //This function tells the robot to move center\ \{\ Serial.println("");\ Serial.println("Moving centerward");\ digitalWrite(CenterMotorForward, HIGH);\ digitalWrite(CenterMotorBackward, LOW);\ digitalWrite(RightMotorForward, LOW);\ digitalWrite(RightMotorBackward, HIGH);\ \}\ \ void moveStop() //This function tells the robot to stop moving\ \{\ Serial.println("");\ Serial.println("Stopping");\ digitalWrite(LeftMotorBackward, LOW);\ digitalWrite(LeftMotorForward, LOW);\ digitalWrite(RightMotorForward, LOW);\ digitalWrite(RightMotorBackward, LOW);\ digitalWrite(CenterMotorForward, LOW);\ digitalWrite(CenterMotorBackward, LOW);\ \}\ }