Stap 6: codering
Code is hieronder
Code uitgelegd:
De continue servo's nemen een gegevensinvoer als normale servo's, maar in plaats daarvan de interpretatie van die gegevens als een hoek interpreteren ze die gegevens als een snelheid. Voor meest continu servo's is de hoek (90) stop, (0) is volledig omgekeerde en (180) is volledige snelheid vooruit. De voorbeeld-auto gebruikt continuous servo's waarmee (95) stop, (0) voor volle snelheid revers en (190) voor volle snelheid vooruit. Het is wellicht dit in rekening nemen en bewerken van uw code gebaseerd uit uw servo keuze. In de voorbeeldcode is de voorwaartse richting (75) en (115). Dit is omdat de servo's zijn gespiegeld aan elkaar gemonteerd. Dus vooruit voor een wordt via reverse-voor de andere.
De sensoren worden gelezen in de code. Ze krijgt een waarde tussen 0-1023. Als de geretourneerde waarde laag is ziet de sensor een lichte kleur (wit). Wanneer de resultaatwaarde hoog is ziet de sensor een donkere kleur (zwart). De code maakt gebruik van "k", die een constante is tuning. "k" is afgesneden het vaststellen of de kleur zwart is. Dit kan worden aangepast op basis van milieu verlichting en oppervlakte reflectiviteit. De auto in het volgende voorbeeld gebruikt een snede af van 500.
Er zijn 3 sensoren op de auto. Rechts, links, en Center. Het generale concept van dit algoritme is dat de auto probeert te houden altijd de links en rechts sensoren aan elke kant van de lijn en de center-center op de lijn zelf.
- Als rechts en links Zie wit en het centrum zwart ziet van de auto gaat vooruit.
- Als rechts en Center Zie zwart en links wit ziet de auto merkt een bocht naar rechts en draait rechts.
Als de linker- en Center Zie zwart en rechts wit ziet de auto merkt een linksaf en draait links.
- Als het midden rechts helemaal ziet, realiseert het als een fail veilig dat het naast de baan en back-up voor.8 seconden terug te keren naar het spoor.
De seriële print outs zijn alleen voor het testen en het fijnstellen van de "k" waarde indien nodig. Ze hebben geen functie aan de werkelijke prestaties van de auto zelf.
#include
Servo servoLeft; Define links servo Servo servoRight; Definiëren van de juiste servo int k = 500; Wit/zwart kalibratie afgesneden
void setup {servoLeft.attach(10); / / links servo ingesteld op digitale pin 10 servoRight.attach(9); / / Set juiste servo naar digital pin 9 Serial.begin(9600);}
void loop {/ / Lees de input op analoge pin 0: int sensorleft = analogRead(A0); int sensorright = analogRead(A1); int sensorcenter = analogRead(A2); / / rechte
Als (sensorleft < k & & sensorright < k & & sensorcenter > k) {}
servoLeft.write(75); FWD servoRight.write(115); }
links
Als (sensorleft > k & & sensorright < k & & sensorcenter > k) {}
servoLeft.write(55); linker servoRight.write(90); } / / rechts
Als (sensorleft < k & & sensorright > k & & sensorcenter > k) {}
servoLeft.write(100); Righ servoRight.write(135); }
veiligheid weg
Als (sensorcenter < k) {}
servoLeft.write(100); Re servoRight.write(90); delay(800); }
Serial.Print(sensorleft); Serial.Print(""); Serial.Print(sensorright); Serial.Print(""); Serial.Print(sensorcenter); Serial.Print("");
}