Enkla Walker Robot (25 / 31 steg)
Steg 25: Program
Denna kod kunde definitivt vara robustare, men jag lämnar det upp till dig att utöka den.
/*
Enkla Walker Robot
av Randy Sarafan
Denna kod är en enkel fyrfotadjur robot och att ha det svara på hinder detta synsätt.
För mer information besök projektets sida:
Denna kod är baserad på både Arduino sopa exemplet av BARRAGAN
och Arduino Ping exempel av Tome Igoe
*/
#include < Servo.h >
Servo myservo; skapa objekt för att styra en servo servo
maximalt åtta servo objekt kan skapas
Servo myservo1; skapa ett andra servo objekt för att styra en servo
int pos = 80. variabel för att lagra den servo positionen för bakre benen
ändrar detta värde ändras standardpositionen för de bakre benen
int pos1 = 70. variabel för att lagra den servo positionen i frambenen
ändrar detta värde ändras standardpositionen för frambenen
bestämmer vid vilken flytta benen
int takt = 1000;
Denna konstant ändras inte. Det är den pin-kod
av sensorns utgång:
CONST int pingPin = 7.
void setup()
{
myservo.attach(9); tillmäter objektet servo servo på pin 9
myservo1.attach(10); tillmäter objektet servo servo på stift 10
myservo.write(POS); Säg servo gå för att placera i variabel "pos" - uppsättningar centrerar axeln
myservo1.write(Pos1); Säg servo gå för att placera i variabel "pos" - uppsättningar centrerar axeln
Delay(5000);
}
void loop() {
lång varaktighet, tum, cm;
PING))) utlöses av en hög puls av 2 eller fler mikrosekunder.
Ge en kort låg puls förhand för att säkerställa en ren hög puls:
pinMode (pingPin, produktionen);
digitalWrite (pingPin, låg);
delayMicroseconds(2);
digitalWrite (pingPin, hög);
delayMicroseconds(5);
digitalWrite (pingPin, låg);
Samma PIN-koden används för att läsa signalen från PING))): en hög
puls vars längd är tid (i mikrosekunder) från den sändande
ping till mottagning av dess eko av ett objekt.
pinMode (pingPin, ingång);
längd = pulseIn (pingPin, hög);
konvertera tiden till ett avstånd
tum = microsecondsToInches(duration);
om något är närmare än en fot, rygg bort
om (inches < = 12) {
Backward();
}
om ingenting är närmare än en fot, gå framåt
om (tum > 12) {
Forward();
}
}
funktion för att gå framåt
void forward() {
myservo.write (pos + 20); berätta servo gå för att placera i variabel "pos"
myservo1.write (pos1 - 20); berätta servo gå för att placera i variabel "pos"
Delay(Rate);
myservo.write (pos - 20); berätta servo gå för att placera i variabel "pos"
myservo1.write(Pos1 + 20); berätta servo gå för att placera i variabel "pos"
Delay(Rate);
}
funktion för bakningen bort
void backward() {
myservo.write (pos + 25); berätta servo gå för att placera i variabel "pos"
myservo1.write(Pos1 + 50); berätta servo gå för att placera i variabel "pos"
Delay(Rate);
myservo.write (pos - 25); berätta servo gå för att placera i variabel "pos"
myservo1.write (pos1 - 30); berätta servo gå för att placera i variabel "pos"
Delay(Rate);
}
lång microsecondsToInches(long microseconds)
{
Enligt Parallaxs datablad för PING))), det finns
73.746 mikrosekunder per tum (dvs. ljud resor på 1130 fot per
det andra). Detta ger vägsträcka som ping, utgående
och tillbaka, så vi delar med 2 att få distansera av hindret.
Se: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
återvända mikrosekunder / 74 / 2;
}