Étape 5: Examiner la ligne suite routine
La ligne qui suit la routine gère les calculs et la gestion des erreurs.
void follow_line (int line_position) //follow la ligne
{
Switch(line_position)
{
Ces cas gérer la situation où la ligne est perdue et la tentative pour faire pivoter vers la ligne
ligne a quitté le bord gauche du capteur
case 0 :
digitalWrite (dir_a, basse) ;
analogWrite (pwm_a, 200) ;
digitalWrite (dir_b, HIGH) ;
analogWrite (pwm_b, 200) ;
Serial.println ("rotation Left\n") ;
rupture ;
ligne a quitté le bon montage du capteur
cas 7000 :
digitalWrite (dir_a, HIGH) ;
analogWrite (pwm_a, 200) ;
digitalWrite (dir_b, basse) ;
analogWrite (pwm_b, 200) ;
Serial.println ("rotation Right\n") ;
rupture ;
Cette ligne calculer l’erreur pour la boucle de régulation. 3500 est la « consigne » et peut être ajusté pour déplacer la position de ligne qu'est en tournage pour le robot.
par défaut :
erreur = (float) line_position - 3500 ;
régler la vitesse du moteur basée sur les termes de PID proportionnels et dérivés
KP est la constante de proportionnelle à virgule flottante (peut-être commencer avec une valeur autour de 0,5)
KD est la constante de dérivés en virgule flottante (peut-être commencer avec une valeur de près de 1)
Notez que lorsque vous faites des PID, il est très important vous obtenez vos signes droit, sinon le
boucle de régulation sera instable
Ce sont les variables qui doivent être réglées pour affiner la boucle de régulation
KP =. 5 ; C’est la valeur de proporational
KD = 1 ; C’est la valeur dérivée
PV = kp * erreur + kd * (erreur - lastError) ;
lastError = erreur ;
Valeurs PWM (vitesse moteur) doivent être comprise entre 0 et 255. Ce code limite les valeurs. Il limite également l’extrémité inférieure de la valeur PWM. Selon les batteries, les moteurs et les charge, les moteurs en décrochera habituellement des 0 à une valeur beaucoup plus grande. Dans cet exemple, le bas de gamme est de 170.
ce codes limites le PV (valeur de la vitesse moteur pwm)
limite de PV à 55
Si (PV > 55)
{
PV = 55 ;
}
Si (PV < -55)
{
PV = -55 ;
}
Il a calculé la valeur PWM individuelle pour chaque moteur, notez la différence de signe.
m1Speed = 170 + PV ;
m2Speed = 170 - PV ;
régler les vitesses du moteur
Ceci définit la vitesse du moteur mis à jour et la direction
digitalWrite (dir_a, basse) ;
analogWrite (pwm_a, m2Speed) ;
digitalWrite (dir_b, basse) ;
analogWrite (pwm_b, m1Speed) ;
rupture ;
}
} / / fin de suivre ligne