Arduino Animatronic ögon (7 / 8 steg)
Steg 7: programmering
Alla filer är i sketchbook.zip.
Först är här koden för att få din servon centrerad. Det problem du står inför är att få servo positionen korrekt. Tänk på dessa servona gå från 0 till 180 grader.
Så Sammanfattningsvis vi vill ange servon till 90 och 90 så dess i mitten av servon "rörelseomfång". Sedan kan vi sätta vågrätt (x-axeln) och vertikalt (y-axeln) begränsar. För som du kan använda den eyes_servo_single_test ändra horServo.write(); och vertServo.write();
[eyes_servo_single_test koden]
#include < Servo.h >Servo horServo;
Servo vertServo;
void setup() {
horServo.attach(8);
vertServo.attach(9);
}
void loop() {
horServo.write(80);
vertServo.write(40);
}
[SLUTET CODE]
Nästa skulle jag använda eyes_full_servo_test igen koppla in din höga och låga värden för servon så kan du se om du har någon bindande. Jag byggde i en blinkande nyckel så att du kan visualisera vad steg din på. Du kan alltid stoppa den halvvägs genom att dra USB-sladden.
[eyes_full_servo_test koden]
//==================Detta är en snabb servo position test jag gjorde för mitt öga projekt
Servon flytta från de inställda postions för X- och Y-axeln
Testa en uppsättningar LED hög 20 sekunder, långa blink.
Testar två anger servon på position 40,0 för 6,5 sekunder, två blinkar.
Testa tre anger servon på position 80,0 för 7,5 sekunder, tre blinkar.
Testa fyra anger servon på position 0,70 för 8,5 sekunder, fyra blinkar.
Testa fem uppsättningar servon på position 0,110 9,5 sekunder, fem blinkar.
DU BEHÖVER TRYCKA PÅ RESET NÄR TESTET ÄR KLAR
#include < Servo.h > //servo bibliotek
Servo horServo; x-axeln servo
Servo vertServo; y-asxis servo
int ledde = 13.
void setup() {
horServo.attach(8); x-axeln servo stift 8
vertServo.attach(9); y-axeln servo pin 9
pinMode ledde (, OUTPUT);
}
void loop() {
//==================TEST ONE=============//
Servon i vila eller center position.
horServo.write(80);
vertServo.write(40);
blinka en gång
digitalWrite (ledde, högt);
Delay(20000);
digitalWrite (ledde, låg);
//============Test Two=================//
testa två blinkar två gånger
horServo.write(20); x lämnade gräns
vertServo.write(40);
blinka två gånger
digitalWrite (ledde, högt);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(5000);
//=================Test Three==================//
testa tre blinkar tre gånger
horServo.write(80); x rätt gräns
vertServo.write(40);
blinka tre gånger
digitalWrite (ledde, högt);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(5000);
//==================Test four==================//
Testa fyra blinkar fyra gånger
horServo.write(80);
vertServo.write(0); y övre gräns
blinka fyra gånger
digitalWrite (ledde, högt);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(5000);
//=================Test Five===================//
Testa fem blinkar fem gånger
horServo.write(80);
vertServo.write(110); y nedre gräns
blinkar fem gånger
digitalWrite (ledde, högt);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (ledde, låg);
Delay(5000);
//=====================END======================//
Servon tillbaka till vila eller center. Testa slutade träff RESET eller vänta för evigt
horServo.write(80);
vertServo.write(40);
digitalWrite (ledde, högt);
While(1) {}
}
[SLUTET CODE]
Koden använder PI för att flytta ögonen i en radie. Du behöver för att du har din servon på stift 8 och 9 eller ändra det i koden. Du är övertygade om att allt är korrekt inställd kan du ställa in EZ kontakterna på plats.
[eyes_sketch koden]
#include < math.h >
#define pi 3.14159265358979323846
#define twopi (2 * pi)
flyta circleradius = 50; 50 varje sida - gör ingen mer någon av din max gränsvärden
flyta stepnumber = 360;
float stepangle;
#include < Servo.h > //include servo bibliotek för servo kontroll
Servo horServo; servo för vänster/höger rörelse
Servo vertServo; servo för upp/ner rörelse
byte randomhor; slumpmässig vågräta position när variabeln
byte randomvert; random vertikalt läge när variabeln
int randomdelay; slumpmässig fördröjning när variabeln
#define HLEFTLIMIT 40 //define vänstra gräns på horisontella (vänster/höger) servo
#define HRIGHTLIMIT 80 //define högra gräns på horisontella (vänster/höger) servo
#define VTOPLIMIT 70 / / definiera övre gräns på vertikal (upp/ned) servo
#define VBOTLIMIT 110 //define nedre gräns på horisontal (upp/ned) servo
void setup()
{
horServo.attach(8); horisontella servo på stift 8
vertServo.attach(9); vertikala servo på pin 9
randomSeed(analogRead(0)); Skapa några slumpmässiga värden med hjälp av en osammanhängande analoga stift
stepangle = twopi/stepnumber;
för (int jag = 0; jag < stepnumber; i ++) {
float vinkel = jag * stepangle;
float x = sin (vinkel) * circleradius;
float y = cos (vinkel) * circleradius;
x = karta (x, 1-circleradius, circleradius, 0, 2 * circleradius);
y = karta (y, 1-circleradius, circleradius, 0, 2 * circleradius);
horServo.write(x); skriva till horisontella servo
vertServo.write(y); skriva till horisontella servo
Delay(10);
}
}
void loop()
{
randomhor = random (HLEFTLIMIT, HRIGHTLIMIT); sätta gränser
randomvert = random (VTOPLIMIT, VBOTLIMIT); sätta gränser
randomdelay = random(1000, 4000); flyttas sekunders 1-4
horServo.write(randomhor); skriva till horisontella servo
vertServo.write(randomvert); skriva till vertikala servo
Delay(randomdelay); fördröja en slumpmässig mängd tid (inom värden som ovan)
} [Slutet CODE]