Dziś przedstawię najprostszy możliwy przykład programu line follower działającego na robocie RedBot Basic Kit. RedBot Basic Kit jest wyposażony w trzy czujniki odbiciowe światła podczerwonego, dzięki temu idealnie nadaje się do budowy prostego robota line follower (budowa czegoś bardziej zaawansowanego wymagałaby użycia dodatkowych czujników lub listwy z czujnikami).
Pozostałe części cyklu:
Mój program powstał na bazie przykładu dostarczanego przez producenta, ale do uzyskania zadowalających efektów musiałem go mocno zmodyfikować. Idea działania jest bardzo prosta:
- po dołączeniu zasilania robot czeka na naciśnięcie przycisku
- po naciśnięciu przycisku robot startuje
- podczas jazdy sprawdzamy okresowo stan lewego i prawego czujnika (środkowy nie jest używany), w zależności od odczytanych stanów robot steruje odpowiednio silnikami:
Lewy czujnik Prawy czujnik Akcja Jasno Jasno Jazda do przodu Jasno Ciemno Skręcanie w lewo Ciemno Jasno Skręcanie w prawo Ciemno Ciemno Jazda do tyłu
Poniżej znajduje się kod programu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#include <RedBot.h> RedBotMotors motors; // czujniki IR RedBotSensor lSen = RedBotSensor(A6); RedBotSensor rSen = RedBotSensor(A7); // piny przycisku i głośnika #define BEEPER 9 #define BUTTON_PIN 12 // poziomy jasności tła i linii const int bgLevel = 600; const int lineLevel = 700; // flaga trybu standby volatile boolean standby = true; void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); tone(BEEPER, 2000, 750); delay(1000); } void loop() { // czekaj na nacisniecie przycisku if (digitalRead(BUTTON_PIN) == LOW) standby = false; if (!standby) { // jasno pod oboma czujnikami -> jedz do przodu if (lSen.read() < bgLevel && rSen.read() < bgLevel) motors.drive(-100); // ciemno pod oboma czujnikami -> cofnij się else if (lSen.read() > lineLevel && rSen.read() >lineLevel) motors.drive(100); // ciemno pod prawym czujnikiem -> skrec w prawo else if (rSen.read() > lineLevel) { motors.leftDrive(-100); motors.rightBrake(); } // ciemno pod lewym czujnikiem -> skrec w lewo else if (lSen.read() > lineLevel) { motors.rightDrive(-100); motors.leftBrake(); } } else motors.brake(); } |
Na filmie możecie zobaczyć robota w akcji.
Robota RedBot Basic Kit dostarczył sklep internetowy dla elektroników Kamami.pl.
Ciekawy i pomocny artykuł.
Bardzo ciekawe rozwiązanie, pozdrawiam.