Paso 5: Programación Arduino
Cargue el siguiente programa en el Arduino.El programa puede descargarse desde aquí:
http://www.zagrosrobotics.com/files/Mag_Light_Follower_04062013.ino
Este programa utiliza un programa de terminal para comunicarse con el robot. Usted puede utilizar al Monitor Serial dentro del entorno de desarrollo Arduino. También se puede utilizar Hyperterminal o Realterm (cualquiera de las cuales será más fácil de usar).
El programa incluye las funciones de control de motor básico:
'f' - avance
'b' - al revés
'l' - rotación izquierda
'r' - girar derecha
de ' - parada
Estos comandos pueden utilizarse para configurar la dirección de sus motores.
El nuevo comando 'g' que fue agregado al programa para este proyecto le dirá el robot para empezar a buscar la fuente de luz.
Los pines de entrada analógicas 0 y 1 se lee el valor analógico de fotosensores y convertir a un entero de valor entre 0 y 255.
Cada motor tiene un sentido y el valor PWM (velocidad). El valor PWM están limitados entre 0 y 255.
################################### Arduino code ###############################
Línea de ejemplo siguiente 06/04/2013
int pwm_a = 10; Control PWM para motor salidas 1 y 2 está en el pin digital 10
int pwm_b = 11; Control PWM para motor salidas 3 y 4 es el pin digital 11
dir_a INT = 12; control de dirección motor salidas 1 y 2 está en el pin digital 12
int dir_b = 13; control de dirección motor salidas 3 y 4 es el pin digital 13
int incomingByte = 0; para los datos entrantes en serie
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 ganancia = 2; sistema de control de ganar var
const int encoderPin = 2;
const int sensorPin = 3;
void setup()
{
pinMode (pwm_a, salida); Pines de control conjunto que salidas
pinMode (pwm_b, salida);
pinMode (dir_a, salida);
pinMode (dir_b, salida);
analogWrite (pwm_a, 0); conjunto de dos motores para correr en (100/255 = 39) % ciclo de trabajo (lento)
analogWrite (pwm_b, 0);
Serial.Begin(115200);
Serial.Print ("Zagros Robotics, Inc.");
Serial.Print ("mago seguidor luz Demo 4/6/2013\n");
}
void loop()
{
Serial.Print ("Zagros Robotics, Inc.");
Si (Serial.available() > 0) {}
leer el byte entrante:
incomingByte = Serial.read();
}
leer sensores de luz
lightsensor_left=analogRead(0);
lightsensor_right=analogRead(1);
Serial.println(lightsensor_left);
Serial.println(lightsensor_right);
Switch(incomingByte)
{
de caso ':
digitalWrite (dir_a, LOW);
analogWrite (pwm_a, 0);
digitalWrite (dir_b, bajo);
analogWrite (pwm_b, 0);
Serial.println("Stop\n");
incomingByte ='* ';
rotura;
caso 'f':
digitalWrite (dir_a, LOW);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, bajo);
analogWrite (pwm_b, 255);
Serial.println("Forward\n");
incomingByte ='* ';
rotura;
caso 'b':
digitalWrite (dir_a, HIGH);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, HIGH);
analogWrite (pwm_b, 255);
Serial.println("Backward\n");
incomingByte ='* ';
rotura;
caso 'l':
digitalWrite (dir_a, LOW);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, HIGH);
analogWrite (pwm_b, 255);
Serial.println ("gira Left\n");
incomingByte ='* ';
rotura;
caso 'r':
digitalWrite (dir_a, HIGH);
analogWrite (pwm_a, 255);
digitalWrite (dir_b, bajo);
analogWrite (pwm_b, 255);
Serial.println ("gira Left\n");
incomingByte ='* ';
rotura;
caso 'g': //follow la luz
ganancia = 3;
temp_var = (lightsensor_left - lightsensor_right) * ganancia;
Si (temp_var > 0)
{
digitalWrite (dir_a, HIGH);
digitalWrite (dir_b, bajo);
Serial.println ("gira Left\n");
}
otra cosa
{
digitalWrite (dir_a, LOW);
digitalWrite (dir_b, HIGH);
Serial.println ("gire de\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);
rotura;
caso 'v':
Serial.println ("versión 04042013a\n");
incomingByte ='* ';
rotura;
Delay(500);
}
} / / fin de bucle