Enkla ljus efter Robot (5 / 6 steg)
Steg 5: Programmera Arduino
Läsa in följande program i Arduino.Programmet kan hämtas här:
http://www.zagrosrobotics.com/files/Mag_Light_Follower_04062013.ino
Programmet använder ett terminalprogram för att kommunicera med roboten. Du kan använda den Serial Monitor inom Arduino utvecklingsmiljön. Du kan också använda Hyperterminal eller Realterm (antingen som kommer att vara lättare att använda).
I programmet ingår grundläggande motorisk kontrollfunktioner:
"f" - framåt
"b" - bakåt
"l" - rotera vänster
"r" - rotera höger
's "- stopp
Dessa kommando kan användas för att ange riktningen för din motors.
Det nya kommandot "g" som lades till programmet för detta projekt kommer att säga roboten att börja leta efter ljuskällan.
Analog ingång stiften 0 och 1 kommer att läsa det analoga värdet från den fotosensor och konvertera det till ett heltal mellan 0 och 255.
Varje motor har en riktning och PWM (hastighet) värde. PWM-värde begränsas mellan 0 och 255.
################################### Arduino code ###############################
Linje efter exempel 4/6/2013
int pwm_a = 10; PWM kontroll för motor utgångar 1 och 2 är på digital stift 10
int pwm_b = 11; PWM kontrollen för motor utgångar 3 och 4 är i digital stift 11
int dir_a = 12; riktning kontrollen för motor utgångar 1 och 2 är i digital stift 12
int dir_b = 13. riktning kontroll för motor utgångar 3 och 4 är på digital stift 13
int incomingByte = 0; för inkommande seriella data
int encoderCount = 0;
int encoderOld = 0;
int encoderState = 0;
int sensorState = 0;
int lightsensor_left = 0;
int lightsensor_right = 0;
int temp_var = 0;
int vinst = 2; styrsystemet få var
CONST int encoderPin = 2;
CONST int sensorPin = 3;
void setup()
{
pinMode (pwm_a, produktionen); Ställa in kontroll stiften att utgångar
pinMode (pwm_b, produktionen);
pinMode (dir_a, produktionen);
pinMode (dir_b, produktionen);
analogWrite (pwm_a, 0); ange både motorer som körs vid (100/255 = 39) % intermittens (långsam)
analogWrite (pwm_b, 0);
Serial.BEGIN(115200);
Serial.Print ("Zagros Robotics, Inc.");
Serial.Print ("trollkarl ljus efterföljare Demo 4/6/2013\n");
}
void loop()
{
Serial.Print ("Zagros Robotics, Inc.");
om (Serial.available() > 0) {
Läs den inkommande byten:
incomingByte = Serial.read();
}
Läs ljussensorer
lightsensor_left=analogRead(0);
lightsensor_right=analogRead(1);
Serial.println(lightsensor_left);
Serial.println(lightsensor_right);
Switch(incomingByte)
{
fallet ":
digitalWrite (dir_a, låg);
analogWrite (pwm_a, 0);
digitalWrite (dir_b, låg);
analogWrite (pwm_b, 0);
Serial.println("Stop\n");
incomingByte ='* ';
bryta;
fallet "f":
digitalWrite (dir_a, låg);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, låg);
analogWrite (pwm_b, 255);
Serial.println("Forward\n");
incomingByte ='* ';
bryta;
fallet "b":
digitalWrite (dir_a, hög);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, hög);
analogWrite (pwm_b, 255);
Serial.println("Backward\n");
incomingByte ='* ';
bryta;
fallet "l":
digitalWrite (dir_a, låg);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, hög);
analogWrite (pwm_b, 255);
Serial.println ("rotera Left\n");
incomingByte ='* ';
bryta;
fallet "r":
digitalWrite (dir_a, hög);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, låg);
analogWrite (pwm_b, 255);
Serial.println ("rotera Left\n");
incomingByte ='* ';
bryta;
fallet "g": //follow ljuset
vinna = 3;
temp_var = (lightsensor_left - lightsensor_right) * få;
om (temp_var > 0)
{
digitalWrite (dir_a, hög);
digitalWrite (dir_b, låg);
Serial.println ("rotera Left\n");
}
annat
{
digitalWrite (dir_a, låg);
digitalWrite (dir_b, hög);
Serial.println ("rotera Right\n");
}
Serial.println(temp_var);
temp_var=ABS(temp_var);
IF(temp_var > 255)
{
temp_var = 255;
}
analogWrite (pwm_a, temp_var);
analogWrite (pwm_b, temp_var);
bryta;
fallet "v":
Serial.println ("Version 04042013a\n");
incomingByte ='* ';
bryta;
Delay(500);
}
} / / end loop