Stap 5: Controleren of de regel die volgt op routine
De regel die volgt op routine behandelt de berekeningen en foutafhandeling.
VOID follow_line (int line_position) //follow de lijn
{
switch(line_position)
{
Deze gevallen omgaan met de situatie waar de lijn verloren is en de poging om te draaien naar de lijn
regel heeft verplaatst van de linker rand van sensor
Case 0:
digitalWrite (dir_a, laag);
analogWrite (pwm_a, 200);
digitalWrite (dir_b, hoge);
analogWrite (pwm_b, 200);
Serial.println ("Left\n draaien");
breken;
regel heeft verplaatst uit de juiste bewerking van de sensor
Case 7000:
digitalWrite (dir_a, hoge);
analogWrite (pwm_a, 200);
digitalWrite (dir_b, laag);
analogWrite (pwm_b, 200);
Serial.println ("Right\n draaien");
breken;
Deze regel berekenen de fout voor de lus van de controle. 3500 is de "setpoint" en kan worden aangepast om de positie van de lijn die de robot is schieten voor.
standaard:
fout = (float) line_position - 3500;
de snelheid van de motor op basis van evenredige en afgeleide PID termen instellen
KP is het een drijvende proportionele constante (misschien beginnen met een waarde rond 0.5)
KD is de drijvende afgeleide constante (misschien beginnen met een waarde van ongeveer 1)
Merk op dat wanneer het doen van PID, het is zeer belangrijk dat u uw borden rechts, of anders de
controle lus zullen unstable
Dit zijn de variabelen die moeten worden aangepast om te fine-tunen van de controle-lus
KP =. 5; Dit is de waarde van de proporational
KD = 1; Dit is de afgeleide waarde
PV = kp * fout + kd * (fout - lastError);
lastError = fout;
PWM waarden (motorsnelheid) moet tussen 0 en 255. Deze code beperkt de waarden. Het beperkt ook de lage kant van de PWM-waarde. Afhankelijk van de batterijen, de motoren en de belasting, zal de motoren meestal kraam op een veel grotere waarde de 0. In dit voorbeeld is de low-end 170.
Dit codes grenzen de PV (motorsnelheid pwm waarde)
limiet PV aan 55
Als (PV > 55)
{
PV = 55;
}
Als (PV < -55)
{
PV = -55;
}
Dit berekend de individuele PWM-waarde voor elke motor, Let op het sign verschil.
m1Speed = 170 + PV;
m2Speed = 170 - PV;
motor snelheid instellen
Hiermee stelt u de bijgewerkte motor snelheid en richting
digitalWrite (dir_a, laag);
analogWrite (pwm_a, m2Speed);
digitalWrite (dir_b, laag);
analogWrite (pwm_b, m1Speed);
breken;
}
} / / Volg regel end