perjantai 1. maaliskuuta 2013

Arduino insect

I started to do the second project from Arduino book because I have limited parts to use and it seemed really interesting. So I started by gluing two servos together and disassembling two rc helicopters.



This is the first version of the Arduino insect:


The legs were really bad and it didn't move an inch. Then i followed the book and got two wire hangers. The legs were far more better and the insect even moved very slow. This is the second version or third version because I added the PING sensor to be the eyes. It doesn't work yet but i'm working on it.



Version 1 video:



And the actual code how it moves. The idea is to move servos at different time.

-------------------------------------------------------------------------
The insect can move by calling the method
-------------------------------------------------------------------------


#include <Servo.h>

Servo frontServo;
Servo rearServo;

int centerPos = 90;
int frontRightUp = 72;
int frontLeftUp = 108;
int backRightForward = 75;
int backLeftForward = 105;

void moveBackRight() {
 frontServo.write(frontRightUp);
rearServo.write(backRightForward-6);
delay(125);
frontServo.write(centerPos);
rearServo.write(centerPos-6);
delay(65);
frontServo.write(frontLeftUp+9);
rearServo.write(backLeftForward-6);
delay(125);
frontServo.write(centerPos);
rearServo.write(centerPos);
delay(65);
}


void moveBackward() {
 frontServo.write(frontRightUp);
rearServo.write(backRightForward);
delay(125);
frontServo.write(centerPos);
rearServo.write(centerPos);
delay(65);
frontServo.write(frontLeftUp);
rearServo.write(backLeftForward);
delay(125);
frontServo.write(centerPos);
rearServo.write(centerPos);
delay(65);
}

void moveForward()
{
  frontServo.write(frontRightUp);
  rearServo.write(backLeftForward);
  delay(125);
  frontServo.write(centerPos);
  rearServo.write(centerPos);
  delay(65);
  frontServo.write(frontLeftUp);
  rearServo.write(backRightForward);
  delay(125);

  frontServo.write(centerPos);
  rearServo.write(centerPos);
  delay(65);
}

void setup()
{
 frontServo.attach(2);
rearServo.attach(3);
}

void loop()
{
  moveBackRight();
  delay(150);
}


-------------------------------------------------------------------------
Move turn left
-------------------------------------------------------------------------


#include <Servo.h>

Servo frontServo;
Servo rearServo;

int centerTurnPos = 81;
int frontTurnRightUp = 63;
int frontTurnLeftUp = 117;
int backTurnRightForward = 66;
int backTurnLeftForward = 96;

void moveTurnLeft()
{
 frontServo.write(frontTurnRightUp);
rearServo.write(backTurnLeftForward);
delay(125);
frontServo.write(centerTurnPos);
rearServo.write(centerTurnPos);
delay(65);
frontServo.write(frontTurnLeftUp);
rearServo.write(backTurnRightForward);
delay(125);
frontServo.write(centerTurnPos);
rearServo.write(centerTurnPos);
delay(65);
}

void setup()
{
 frontServo.attach(2);
rearServo.attach(3);
}

void loop()
{
  moveTurnLeft();
  delay(150);
}

-------------------------------------------------------------------------
Ping and moving (not tested yet)
-------------------------------------------------------------------------

 #include <Servo.h>
#define trigPin 12
#define echoPin 13

Servo frontServo;
Servo rearServo;

/*Servo motors global variables */
int centerPos = 90;
int frontRightUp = 72;
int frontLeftUp = 108;
int backRightForward = 75;
int backLeftForward = 105;
int walkSpeed = 150;
int centerTurnPos = 81;
int frontTurnRightUp = 63;
int frontTurnLeftUp = 117;
int backTurnRightForward = 66;
int backTurnLeftForward = 96;

/*Ping distance measurement*/
long distanceCm() {
int duration, distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
}
 
 
  void center() {
   frontServo.write(centerPos);
  rearServo.write(centerPos);
  }



void moveTurnLeft()
{
 frontServo.write(frontTurnRightUp);
rearServo.write(backTurnLeftForward);
delay(125);
frontServo.write(centerTurnPos);
rearServo.write(centerTurnPos);
delay(65);
frontServo.write(frontTurnLeftUp);
rearServo.write(backTurnRightForward);
delay(125);
frontServo.write(centerTurnPos);
rearServo.write(centerTurnPos);
delay(65);
}


void moveBackRight() {
 frontServo.write(frontRightUp);
rearServo.write(backRightForward-6);
delay(125);
frontServo.write(centerPos);
rearServo.write(centerPos-6);
delay(65);
frontServo.write(frontLeftUp+9);
rearServo.write(backLeftForward-6);
delay(125);
frontServo.write(centerPos);
rearServo.write(centerPos);
delay(65);
}

void moveBackward() {
 frontServo.write(frontRightUp);
rearServo.write(backRightForward);
delay(125);
frontServo.write(centerPos);
rearServo.write(centerPos);
delay(65);
frontServo.write(frontLeftUp);
rearServo.write(backLeftForward);
delay(125);
frontServo.write(centerPos);
rearServo.write(centerPos);
delay(65);
}

void moveForward()
{
  frontServo.write(frontRightUp);
  rearServo.write(backLeftForward);
  delay(125);
  frontServo.write(centerPos);
  rearServo.write(centerPos);
  delay(65);
  frontServo.write(frontLeftUp);
  rearServo.write(backRightForward);
  delay(125);

  frontServo.write(centerPos);
  rearServo.write(centerPos);
  delay(65);
}

void setup()
{
 frontServo.attach(2);
rearServo.attach(3);
Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop()
{
   Serial.print(distance);
  delay(150);
}

This is the current version of insect with better legs. Now it can move forward a little bit better. It also has a place for PING sensor but I didn't add it yet.


Ei kommentteja:

Lähetä kommentti