Paso 5: Revise la línea que sigue la rutina
La línea que sigue la rutina encarga de los cálculos y manejo de errores.
void follow_line (int line_position) //follow la línea
{
Switch(line_position)
{
Estos casos manejan la situación donde se pierde la línea y el intento de girar hacia la línea
línea se ha movido desde el borde izquierdo del sensor
caso 0:
digitalWrite (dir_a, LOW);
analogWrite (pwm_a, 200);
digitalWrite (dir_b, HIGH);
analogWrite (pwm_b, 200);
Serial.println ("gira Left\n");
rotura;
línea se ha movido fuera de la edición correcta del sensor
caso 7000:
digitalWrite (dir_a, HIGH);
analogWrite (pwm_a, 200);
digitalWrite (dir_b, bajo);
analogWrite (pwm_b, 200);
Serial.println ("gire de\n");
rotura;
Esta línea calcular el error para el bucle de control. 3500 es el "valor" y puede ajustarse para mover la posición de la línea que el robot está buscando.
por defecto:
error = (float) line_position - 3500;
establecer la velocidad del motor basada en términos PID proporcionales y derivativas
KP es la constante proporcional Floating-Point (tal vez de inicio con un valor de alrededor de 0.5)
KD es la constante derivado de punto flotante (tal vez comience con un valor alrededor de 1)
Tenga en cuenta que al hacer el PID, es muy importante llegar sus muestras del derecho, o en otro lugar el
lazo de control será inestable
Estas son las variables que se deben ajustar para ajustar el lazo de control
KP =. 5; Este es el valor de proporational
KD = 1; Este es el valor derivado
PV = kp * error + kd * (error - lastError);
lastError = error;
Valores PWM (velocidad del motor) deben estar entre 0 y 255. Este código limita los valores. También limita con el extremo inferior del valor PWM. Dependiendo de las baterías, motores y carga, los motores serán generalmente puesto en un valor mucho mayor del 0. En este ejemplo, el extremo inferior es 170.
Esto códigos límites PV (valor de pwm de velocidad del motor)
límite PV 55
Si (PV > 55)
{
PV = 55;
}
Si (PV < -55)
{
PV = -55;
}
Esto calcula el valor PWM individual para cada motor, tenga en cuenta la diferencia de señal.
m1Speed = 170 + PV;
m2Speed = 170 - PV;
establecer velocidades de motor
Esto establece la velocidad del motor actualizada y la dirección
digitalWrite (dir_a, LOW);
analogWrite (pwm_a, m2Speed);
digitalWrite (dir_b, bajo);
analogWrite (pwm_b, m1Speed);
rotura;
}
} / / fin de línea siga