Stap 5: Programmeren van de Arduino
Het volgende programma in de Arduino laden.Het programma kan worden gedownload vanaf hier:
http://www.zagrosrobotics.com/files/Mag_Light_Follower_04062013.Ino
Dit programma gebruikt een terminalprogramma om te communiceren met de robot. Hier kunt u de seriële Monitor vanuit de ontwikkelomgeving van Arduino. Ook kunt u Hyperterminal of Realterm (een van die zal zijn gemakkelijker te gebruiken).
Het programma omvat fundamentele motorische controlefuncties:
'f' - Forward
'b' - achteruit
'l' - linksom draaien
'r' - rechtsom
de ' - stop
Deze opdracht kan worden gebruikt voor het instellen van de richting van uw motoren.
De nieuwe opdracht 'g' dat werd toegevoegd aan het programma voor dit project zal vertellen de robot om te beginnen op zoek naar de lichtbron.
De analoge input pinnen 0 en 1 zal luiden naar de analoge waarde van de photosensors en zet het op een integer waarde tussen 0 en 255.
Elke motor heeft een richting en PWM (snelheid) waarde. De waarde van de PWM zijn beperkt tussen 0 en 255.
################################### Arduino code ###############################
Lijn naar voorbeeld 4/6/2013
int pwm_a = 10; PWM-controle voor motor uitgangen 1 en 2 is op digitale pin 10
int pwm_b = 11; PWM-controle voor motor output 3 en 4 is op digitale pin 11
int dir_a = 12; richtingscontrole voor motor uitgangen 1 en 2 is op digitale pin 12
int dir_b = 13; richtingscontrole voor motor output 3 en 4 is op digitale pin 13
int incomingByte = 0; voor binnenkomende seriële gegevens
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 winst = 2; controlesysteem krijgen var
Const int encoderPin = 2;
Const int sensorPin = 3;
VOID Setup
{
pinMode (pwm_a, OUTPUT); Besturingselement instellen pinnen te worden uitgangen
pinMode (pwm_b, OUTPUT);
pinMode (dir_a, OUTPUT);
pinMode (dir_b, OUTPUT);
analogWrite (pwm_a, 0); instellen van beide motoren uit te voeren op (100/255 = 39) % taakcyclus (langzaam)
analogWrite (pwm_b, 0);
Serial.begin(115200);
Serial.Print ("Zagros Robotics, Inc");
Serial.Print ("tovenaar lichte aanhanger Demo 4/6/2013\n");
}
void loop
{
Serial.Print ("Zagros Robotics, Inc");
Als (Serial.available() > 0) {}
Lees de binnenkomende byte:
incomingByte = Serial.read();
}
Lees lichtsensoren
lightsensor_left=analogRead(0);
lightsensor_right=analogRead(1);
Serial.println(lightsensor_left);
Serial.println(lightsensor_right);
switch(incomingByte)
{
geval van ':
digitalWrite (dir_a, laag);
analogWrite (pwm_a, 0);
digitalWrite (dir_b, laag);
analogWrite (pwm_b, 0);
Serial.println("Stop\n");
incomingByte ='* ';
breken;
Case "f":
digitalWrite (dir_a, laag);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, laag);
analogWrite (pwm_b, 255);
Serial.println("Forward\n");
incomingByte ='* ';
breken;
Case "b":
digitalWrite (dir_a, hoge);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, hoge);
analogWrite (pwm_b, 255);
Serial.println("Backward\n");
incomingByte ='* ';
breken;
geval 'l':
digitalWrite (dir_a, laag);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, hoge);
analogWrite (pwm_b, 255);
Serial.println ("Left\n draaien");
incomingByte ='* ';
breken;
Case 'r':
digitalWrite (dir_a, hoge);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, laag);
analogWrite (pwm_b, 255);
Serial.println ("Left\n draaien");
incomingByte ='* ';
breken;
geval 'g': //follow het licht
krijgen = 3;
temp_var = (lightsensor_left - lightsensor_right) * krijgen;
Als (temp_var > 0)
{
digitalWrite (dir_a, hoge);
digitalWrite (dir_b, laag);
Serial.println ("Left\n draaien");
}
anders
{
digitalWrite (dir_a, laag);
digitalWrite (dir_b, hoge);
Serial.println ("Right\n draaien");
}
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);
breken;
Case "v":
Serial.println ("versie 04042013a\n");
incomingByte ='* ';
breken;
delay(500);
}
} / / einde lus