Here is a link to the video on YouTube:
http://youtu.be/O8E3QBfjXO0
Here is a picture of the Arduino and motor control shield attached to the robo raptor:
Here is a picture taken from the video of it in demo mode:
After that picture was taken I managed to get it working on its batteries.
Here is the code for the demo.
// Robo-Raptor Demo
// demonstrates several actions the robo raptor can take.
// Written December 2013 by Bob Davis
#include AFMotor.h
#include Servo.h
// create servo object to control a servo
Servo myservo;
// mororr moves the right leg
// create motor #2, 64KHz pwm
AF_DCMotor motorr(2, MOTOR12_64KHZ);
// motorl moves the left leg
// create motor #4, 64KHz pwm
AF_DCMotor motorl(4, MOTOR12_64KHZ);
// motorw wiggles the tail, head moves too
// create motor #1, 64KHz pwm
AF_DCMotor motorw(1, MOTOR12_64KHZ);
// motorh moves the head up and down
// create motor #3, 64KHz pwm
AF_DCMotor motorh(3, MOTOR12_64KHZ);
char INBYTE;
// Set A6 as an output pin for speaker
int SpkrPin = 19;
int roar;
void setup() {
motorr.setSpeed(255); // set the speed to 255/255
motorl.setSpeed(255); // set
the speed to 255/255
motorw.setSpeed(255); // set
the speed to 255/255
motorh.setSpeed(255); // set
the speed to 255/255
pinMode(SpkrPin,
OUTPUT);
// The servo is on
pin 9
myservo.attach(9);
}
void loop() {
// Sequence of Motor
control commands:
// wait for tail
switch to get started
// wiggle tail back
and forth
// raise and lower
head three times
// take a few steps
walking forward
// make a roaring
sound
// Wait for tail
switch to start demo
while
(analogRead(A0) != '0'){}
// wiggle tail
motorw.run(BACKWARD); // wiggle
right
delay(200); // pause
motorw.run(RELEASE); //
stopped
delay(300);
motorw.run(FORWARD); // wiggle left
delay(200); // pause
motorw.run(RELEASE); //
stopped
delay(300);
motorw.run(BACKWARD); // wiggle
right
delay(200); // pause
motorw.run(RELEASE); //
stopped
delay(300);
motorw.run(FORWARD); // wiggle
left
delay(200); // pause
motorw.run(RELEASE); //
stopped
delay(300);
motorw.run(BACKWARD); // wiggle
right
delay(200); // pause
motorw.run(RELEASE); //
stopped
delay(300);
motorw.run(FORWARD); // wiggle
left
delay(200); // pause
motorw.run(RELEASE); //
stopped
delay(300);
// raise and lower
head
motorh.run(FORWARD); // raise
head
delay(300); // pause
motorh.run(BACKWARD); // lower
head
delay(300); // pause
motorh.run(RELEASE); //
stopped
delay(500);
motorh.run(FORWARD); // raise
head
delay(300); // pause
motorh.run(BACKWARD); // lower
head
delay(300); // pause
motorh.run(RELEASE); //
stopped
delay(500);
motorh.run(FORWARD); // raise
head
delay(300); // pause
motorh.run(BACKWARD); // lower
head
delay(300); // pause
motorh.run(RELEASE); //
stopped
delay(500);
// walk straight
forward
motorr.run(FORWARD); // right
foot forward
delay(300); // pause
motorr.run(BACKWARD); // right
foot backward
delay(300); // pause
motorr.run(RELEASE); // stop
right foot
delay(300); // pause
motorl.run(FORWARD); // left
foot forward
delay(300); // pause
motorl.run(BACKWARD); // left
foot backward
delay(300); // pause
motorl.run(RELEASE); // stop
left foot
delay(300); // pause
motorr.run(FORWARD); // right
foot forward
delay(300); // pause
motorr.run(BACKWARD); // right
foot backward
delay(300); // pause
motorr.run(RELEASE); // stop
right foot
delay(300); // pause
motorl.run(FORWARD); // left
foot forward
delay(300); // pause
motorl.run(BACKWARD); // left
foot backward
delay(300); // pause
motorl.run(RELEASE); // stop
left foot
delay(300); // pause
motorr.run(FORWARD); // right foot forward
delay(300); // pause
motorr.run(BACKWARD); // right
foot backward
delay(300); // pause
motorr.run(RELEASE); // stop
right foot
delay(300); // pause
motorl.run(FORWARD); // left
foot forward
delay(300); // pause
motorl.run(BACKWARD); // left
foot backward
delay(300); // pause
motorl.run(RELEASE); // stop
left foot
delay(300); // pause
//open mouth
myservo.write(0);
delay(300);
// roar
for (roar=200; roar
> 0; roar--) {
digitalWrite(SpkrPin, HIGH); //
sets the speaker on
delay(random(10)); // waits
for a fraction of a second
digitalWrite(SpkrPin, LOW); //
sets the speaker off
delay(random(10)); // waits
for a fraction of a second
}
//close mouth
myservo.write(90);
delay(300);
}
Hey, cool project, Im working on something similar, but using the IR to control everything instead, instead of tearing apart the robot.
ReplyDeletemine should be able to control any of the robosapien robots or the wowwee robots except the robosapien V1, which I have an alternative bit of code to do that with.
Thanks for sharing.Great article very good job .. keep it up..
ReplyDeleteGmail Technical Support
Hi Bob. Thanks for sharing all of your projects. Recently, I purchased a pre-owned RoboRaptor with the intention of disassembly and review of Mark Tilden's Nervous Networks in action. Along the way, I have been thinking of replacing the control board with a custom one. Your work with Arduino is encouraging. A few questions: 1) Do you have a picture of how and where you mounted another servo for individual bite control? 2) Did you use a motor driver interface between the CPU I/O and the servo motors? 3) Do you publish schematics in your book? Connectors are well labeled, but I'm willing to learn from your experience. Thanks for your response. Regards, Ron_C
ReplyDeleteHi Bob. Thanks for sharing all of your projects. Recently, I purchased a pre-owned RoboRaptor with the intention of disassembly and review of Mark Tilden's Nervous Networks in action. Along the way, I have been thinking of replacing the control board with a custom one. Your work with Arduino is encouraging. A few questions: 1) Do you have a picture of how and where you mounted another servo for individual bite control? 2) Did you use a motor driver interface between the CPU I/O and the servo motors? 3) Do you publish schematics in your book? Connectors are well labeled, but I'm willing to learn from your experience. Thanks for your response. Regards, Ron_C
ReplyDelete