Labyrint Problemlösaren Robot, med artificiell intelligens med Arduino (5 / 10 steg)
Steg 5: Genomför "Vänster Hand på väggen" algoritmen på Arduino kod
När vi har funktionen readLFSsensors() ändras för att den extra 2 sensorer, kan vi skriva Loop funktion för att köra algoritmen som beskrivs på det sista steget:
void loop()
{
readLFSsensors();
Switch (läge)
{
fall NO_LINE:
motorStop();
goAndTurn (vänster, 180);
bryta;
fall CONT_LINE:
runExtraInch();
readLFSsensors();
om (läge == CONT_LINE) mazeEnd();
annat goAndTurn (vänster, 90), / / eller är det ett "T" eller "Cross"). I båda fallen går till vänster
bryta;
fall RIGHT_TURN:
runExtraInch();
readLFSsensors();
om (läge == NO_LINE) goAndTurn (höger, 90),
bryta;
fall LEFT_TURN:
goAndTurn (vänster, 90);
bryta;
fall FOLLOWING_LINE:
followingLine();
bryta;
}
}
Vissa nya funktioner visas här.
followingLine() är densamma som används med följande rad Robot, där om det endast efter en linje, det måste calculatePID(); och kontrollera motors beroende av PID värden: motorPIDcontrol();
runExtraInch(): Kommer att driva roboten bara lite. Hur mycket roboten kommer att köra beror av tiden som du använder i funktionen fördröjning innan du kommandot motorn att stoppa.
void runExtraInch(void)
{
motorPIDcontrol();
Delay(extraInch);
motorStop();
}
goAndTurn (riktningen, vinkel): Denna speciella funktion är viktigt, eftersom du inte kan flytta roboten så snart du inser vilken typ av korsning du är. Kom ihåg att vi projekterat en differentiell Robot att när att göra svängar, det "vänder runt dess yxa" och så, för att flyttningen 90o och kontinuerligt följa raden, centrera av hjulen skall vara i linje med mitten av korsningen. När raden av censuren är före dess yxa, måste du köra roboten framåt om du vill justera dem. Konstanten av tid adjGoAndTurn måste justeras beroende på avståndet mellan axe och sensor linje ("d"), hastighet och storlek på hjulen (se bilden för illustration).
void goAndTurn (int riktningen, int grader)
{
motorPIDcontrol();
Delay(adjGoAndTurn);
motorTurn (riktningen, grader);
}
På denna punkt är roboten i själva verket "lösa en labyrint"! Du har bara den "första Pass". Gör inte fråga där du börjar inne i en labyrint, du kommer nå slutet.
Bröl, ett test av denna fas av projektet: