Kontrollera en Roomba robot med Arduino och Android (7 / 8 steg)
Steg 7: Kontrollera Roomba via Bluetooth
För att slutföra vår första delen av projektet, låt oss installera en Bluetooth-modul (HC-06) till vårt Arduino. I ovanstående diagram visar hur man gör. HC-06 är oftast settle-upp från fabriken med en överföringshastighet av 9600. Det är viktigt att du ändrar det till 19.200 förenlig med Arduino-Roomba kommunikationshastighet. Du kan göra att skicka en AT-kommandot till modulen (AT + BAUD5 där "5" är koden för 19.200).
Om du har några tvivel om hur HC-06 fungerar, ta gärna en titt på min instructable: ansluta "stuff" via Bluetooth / Android / Arduino.
För att styra Roomba, vi kommer att använda en generisk App som utvecklats av mig att kontrollera mobila robotar, med MIT AppInventor 2: "MJRoBot BT fjärrkontroll". Appen kan laddas ner gratis från Google store via länken: App: MJRoBot BT fjärrkontrollen.
Applikationen har ett enkelt gränssnitt, så att du kan skicka kommandon till BT modul i båda, textläge eller direkt via förprogrammerade knappar (varje gång en knapp trycks ner, en karaktär skickas):
- w: frammåt
- s: bakåt
- d: höger
- a: vänster
- f: sluta
- p: på / av (används inte på denna första del)
- m: manuell / automatisk (används för att starta om Roomba om ett hinder som en klippa finns i felsäkert läge)
- +: Hastighet +
- -: Hastighet -
Du kan också skicka andra kommandon som text vid behov. Det finns också ett textfönster för meddelanden som tas emot från BT-modulen. Denna funktion är mycket viktigt under testfasen, det kan användas på samma sätt som den "Serial Monitor".
Den loop() delen av koden kommer att "lyssna" bluetooth-enheten och beroende av kommando tas emot, ta en åtgärd:
void loop()
{
checkBTcmd(); Kontrollera om en comand mottas från BT fjärrkontroll
manualCmd ();
}
Funktion checkBTcmd() visas nedan:
void checkBTcmd() / / kontrollera om ett kommando tas emot från BT fjärrkontroll
{
om (BT1.available())
{
kommandot = BT1.read();
Bt1.flush();
}
}
När ett kommando tas emot, tar funktionen manualCmd() anslagna åtgärden:
void manualCmd()
{
Switch (kommando)
{
fallet är ":
startSafe();
Serial.Print ("Roomba i felsäkert läge");
Bt1.Print ("Roomba BT Ctrl OK - felsäkert läge");
Bt1.println('\n');
kommandot = "f";
playSound (3).
bryta;
fallet "f":
driveStop(); stänga av båda motorer
writeLEDs ('s', t ', ' o ', 'p');
State = kommando;
bryta;
fallet "w":
enhet (motorSpeed, 0);
writeLEDs ("", "g", "o" ");
State = kommando;
bryta;
fall skulle ":
driveRight(motorSpeed);
writeLEDs ("r", "i", "g", "h");
bryta;
fallet "a":
driveLeft(motorSpeed);
writeLEDs ("l", "e", "f", 't');
bryta;
fallet ":
enhet (-motorSpeed, 0);
writeLEDs ("b", "a", "c", "k");
State = kommando;
bryta;
fallet "+":
om (statligt == "w")
{
motorSpeed = motorSpeed + 10.
om (motorSpeed > MAX_SPEED)
{
motorSpeed = MAX_SPEED;
}
kommandot = 'w';
} annat {kommandot = staten.}
bryta;
fallet "-":
om (statligt == "w")
{
motorSpeed = motorSpeed - 10.
}
om (motorSpeed < MIN_SPEED)
{
motorSpeed = MIN_SPEED;
}
Serial.println(motorSpeed);
kommandot = staten.
bryta;
}
}