Arduino vägg att undvika robot (9 / 9 steg)
Steg 9: Felsökning och utforska koden
Första, låt oss reda ut vad jag misstänker kommer att vara ditt enda problem; ultrasonic sensorn verkar inte fungera.
Vi behöver ta reda på om vi får något från sensorn första. För att starta felsökning, först se till att alla 4 kablar är korrekt anslutna till båda sensorn själv och till arduino.
Fortfarande ingen glädje?
Prova att titta på koden du skickade över. Även om ultraljud sensorn läser ett variabelvärde, utlöser det 2 olika stater för motorn: både framöver eller en framåt och en bakåt. Här är koden för tillståndet framåt:
void forward()
{
vidarebefordra @ full fart
digitalWrite 12, låg. Anger riktningen på kanal A
digitalWrite (9, låg). Lossa bromsen för kanal A
analogWrite (3, 255); Snurrar motorn på kanal A i full fart
digitalWrite 13, hög. Ange riktning av kanal B
digitalWrite 8, låg. Lossa bromsen för kanal B
analogWrite (11, 255); Snurrar motorn på kanal B i full fart
}
Från ovan, kan du se att 3 variabler anges för varje motor. Riktningen kan anges till låg eller hög för varje kanal för att fastställa framåt. Detta är en kodning alternativ för sortera ut framåt standardtillstånd motorerna i stället för att byta kablarna för verkställt kanaler fysiskt.
Nu måste vi titta på koden för den andra staten. Jag har döpt denna turn_right men verkligen detta godtyckliga, beroende på hur motorn är kopplad och användning av hög & låg ställa motor anvisningarna.
Hur är detta viktigt för ultrasonic sensor mätning? Om koden för båda motor påstår är exakt samma så ultraljud sensorn kunde gör allt rätt och ringa rätt kommandon på rätt tider. Genom att titta på koden, blir detta uppenbart (nu när du vet vad du söker efter!). Det kommer att ta ingenting mer än ändrar riktning inställningen för stift 12 eller stift 13 från hög/låg till motsatsen.
Om det inte löser ditt problem, måste vi ta en titt på vad de ultrasonic sensorn är att se. Den kod i fråga här är följande:
void oneSensorCycle()
{
för (uint8_t jag = 0; jag < SONAR_NUM; i ++) {
Serial.Print(i);
Serial.Print("=");
Serial.Print(cm[i]);
Serial.Print ("cm");
}
Serial.println();
}
Tidigare i koden finns det en annan närstående stycke:
void setup() {
Serial.BEGIN(9600);
Jag nämner detta så att du kan se till att inkludera det i eventuella anpassningar du kan göra till koden.
Denna följetong avsnitt i koden ingår så att du kan få en avläsning av värden från din sensor. Detta gäller för varje sensor och koden hittar du (det är ganska lätt att hitta koden för ganska mycket någon arduino kompatibel sensor).
Om du vill se värdena måste du koppla in din arduino av USB igen och öppna Arduino IDE. När öppna, se till att din arduino ses av datorn (Verktyg > Serial Port > Välj port). Också kontrollera igen att Arduino Uno styrelsen väljs i Verktyg > styrelsen menyn.
Vi vill övervaka vad sensorn är att se och det finns 2 sätt att lansera seriell bildskärmen som gör det möjligt att göra så. Du kan antingen välja "Serial Monitor" från Verktyg-menyn eller välja det knappen som ser ut som ett förstoringsglas överst höger på Arduino IDE. Genom att välja någon av dessa, bör du se roboten stanna upp en sekund och sedan ge en avläsning i fönstret Serial Monitor. Om Läs värdena inte variera från 0cm måste du kontrollera anslutningarna på arduino och på sensorn igen. Du kan ha blandat upp GND/5V eller utlösa/Echo stift.
Om dessa förslag inte lösa ditt problem jag skulle bli mycket förvånad och kan bara föreslå att det är möjligt att någonstans längs vägen du kan ha på något sätt bort några kritiska kod eller kanske inte klistras in i den fullständiga koden till Arduino IDE? Försök att se till att du har kopierat och klistrat in den fullständiga koden i IDE innan du överför den till Arduino UNO.
Om du har några andra frågor, kommentera gärna och jag kommer att försöka besvara problem i en uppdatering.