Close

Build log 9- Left side schematic and code

A project log for Animatronic Iron Man MKIII suit

RFID tags in the gloves control shoulder rockets pods, hip pods, forearm missile, back flaps and wireless helmet.

jeromekeltyjeromekelty 04/26/2014 at 06:390 Comments

Here's the schematic for the left side control system. There are a few notes on the diagram but it's pretty straightforward. When parts were purchased for the suit the ID12 tag reader was only available in a 5V version, which was powered by the Arduino. Since the servos are powered by a 6V battery pack it was easiest to just use a 9V battery for the Arduinos and 6V packs for the servos because you need to isolate the power supply for the Arduino due to the electrical noise generated by the servos.

Now that the ID12 is available in a low voltage version it would be simpler to power everything from a 6V battery pack and use a 3.3V Arduino ProMini and use a 3.3V DC/DC converter to supply isolated power the Arduino.

A larger image is available here.

Here's the code for the left side-


#include <NewSoftSerial.h>
#include "Servo.h"          // include the servo library

Servo podServo;             // servo to move hip pods
Servo leverServo;            // servo to move hip pod levers
Servo rotateServo;         // servo to rotate hip pods
Servo leftflapServo;        // servo to move left back flap
Servo rightflapServo;     // servo to move right back flap

NewSoftSerial mySerial = NewSoftSerial(2, 3);

int RFIDResetPin = 13;
int ledPin1 = 6;                  // control pin for left hip pod LEDs
int ledPin2 = 5;                 // control pin for right hip pod LEDs
int servoPin1 = 10;            // control pin for left flap servo
int servoPin2 = 11;            // control pin for right flap servo
int servoPin3 = 9;            // control pin for pod servo
int servoPin4 = 8;            // control pin for lever servo
int servoPin5 = 7;            // control pin for rotate servo
int soundPin = 12;           // control pin for flare sound

//Register your RFID tags here
char tag1[13] = "440085E77452";
char tag2[13] = "440085FC330E";
char tag3[13] = "440085F97840";
char tag4[13] = "4400863914EF";


void setup(){
Serial.begin(9600);
mySerial.begin(9600);

podServo.attach(servoPin3);                 // attaches the servo on pin 9 to the servo object
leverServo.attach(servoPin4);               // attaches the servo on pin 8 to the servo object
rotateServo.attach(servoPin5);             // attaches the servo on pin 7 to the servo object
leftflapServo.attach(servoPin1);             // attaches the servo on pin 10 to the servo object
rightflapServo.attach(servoPin2);         // attaches the servo on pin 11 to the servo object
podServo.write(155);                              // rotate the pod servo to 135 degrees
leverServo.write(145);                            // rotate the lever servo to 135 degrees
rotateServo.write(165);                          // rotate the pod rotation servo to 170 degrees
leftflapServo.write(170);                         // rotate the left flap servo to 170 degrees
rightflapServo.write(10);                        // rotate the right flap servo to 10 degrees
pinMode(ledPin1, OUTPUT);                 // sets the LED pin as an output
pinMode(ledPin2, OUTPUT);                // sets the LED pin as an output
digitalWrite(ledPin1, LOW);                    // turn off LEDs
digitalWrite(ledPin2, LOW);                   // turn off LEDs
pinMode(soundPin, OUTPUT);             // sets the sound pin as output
digitalWrite(soundPin, LOW);                // turn off sound pin


pinMode(RFIDResetPin, OUTPUT);
digitalWrite(RFIDResetPin, HIGH);



}

void loop(){

char tagString[13];
int index = 0;
boolean reading = false;

while(Serial.available()){

int readByte = Serial.read();                 //read next available byte

if(readByte == 2) reading = true;         //begining of tag
if(readByte == 3) reading = false;        //end of tag

if(reading && readByte != 2 && readByte != 10 && readByte != 13){
//store the tag
tagString[index] = readByte;
index ++;
}
}

checkTag(tagString);                //check if it is a match
clearTag(tagString);                  //clear the char of all value
resetReader();                          //reset the RFID reader
}

void checkTag(char tag[]){
///////////////////////////////////
//Check the read tag against known tags
///////////////////////////////////

if(strlen(tag) == 0) return; //empty, no need to contunue

if(compareTag(tag, tag1)){                 // if matched tag1, do this
mySerial.print('A');

}else if(compareTag(tag, tag2)){        // if matched tag2, do this
podServo.write(90);                          // rotate the pod servo to 90 degrees
delay(500);                                        // wait half a second
leverServo.write(95);                        // rotate the lever servo to 90 degrees
delay(1000);
rotateServo.write(5);                         // rotate the pod rotation servo to 10 degrees
delay(1500);
leverServo.write(145);
delay(500);
digitalWrite(soundPin, HIGH);          // turn sound on
delay(10);                                           // wait ten milliseconds
digitalWrite(soundPin, LOW);           // turn sound off
digitalWrite(ledPin1, HIGH);             // turn on LEDs
digitalWrite(ledPin2, HIGH);            // turn on LEDs
delay(50);                                         // wait 50 milliseconds
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn off LEDs
digitalWrite(ledPin2, HIGH); // turn off LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn off LEDs
digitalWrite(ledPin2, HIGH); // turn off LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn off LEDs
digitalWrite(ledPin2, HIGH); // turn off LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn off LEDs
digitalWrite(ledPin2, HIGH); // turn off LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
delay(50);
digitalWrite(ledPin1, HIGH); // turn on LEDs
digitalWrite(ledPin2, HIGH); // turn on LEDs
delay(50);
digitalWrite(ledPin1, LOW); // turn off LEDs
digitalWrite(ledPin2, LOW); // turn off LEDs
leverServo.write(95); // rotate the lever servo to 90 degrees
delay(1500);
rotateServo.write(165); // rotate the pod servo to 135 degrees
delay(1000);
leverServo.write(145);
delay(500);
podServo.write(155); // rotate the pod servo to 135 degrees
delay(2000);
leftflapServo.write(125); // rotate the left flap servo to 125 degrees- full up
rightflapServo.write(55); // rotate the right flap servo to 55 degrees- full up
delay(500);
leftflapServo.write(170); // rotate the left flap servo to 170 degrees- full down
rightflapServo.write(10); // rotate the right flap servo to 10 degrees- full down
delay(500);
leftflapServo.write(125); // left flap full up
delay(500);
leftflapServo.write(170); // left flap full down
delay(500);
rightflapServo.write(55); // right flap full up
delay(500);
rightflapServo.write(10); // right flap full down



}else{
Serial.println(tag); //read out any unknown tag
}

}

void lightLED(int pin){
///////////////////////////////////
//Turn on LED on pin "pin" for 250ms
///////////////////////////////////
Serial.println(pin);

digitalWrite(pin, HIGH);
delay(250);
digitalWrite(pin, LOW);
}

void resetReader(){
///////////////////////////////////
//Reset the RFID reader to read again.
///////////////////////////////////
digitalWrite(RFIDResetPin, LOW);
digitalWrite(RFIDResetPin, HIGH);
delay(150);
}

void clearTag(char one[]){
///////////////////////////////////
//clear the char array by filling with null - ASCII 0
//Will think same tag has been read otherwise
///////////////////////////////////
for(int i = 0; i < strlen(one); i++){
one[i] = 0;
}
}

boolean compareTag(char one[], char two[]){
///////////////////////////////////
//compare two value to see if same,
//strcmp not working 100% so we do this
///////////////////////////////////

if(strlen(one) == 0) return false; //empty

for(int i = 0; i < 12; i++){
if(one[i] != two[i]) return false;
}

return true; //no mismatches
}

Discussions