RedBot Basic Kit #2 – programowanie robota w Arduino

W poprzednim artykule opisałem sposób montażu robota RedBot Basic oraz sposób instalacji bibliotek, które przygotował producent. Dziś opiszę te biblioteki.

 

Aby dołączyć bibliotekę do projektu należy na początku programu umieścić linię:

Sterowanie silnikami

Do sterowania silnikami należy użyć obiektu klasy RedBotMotors. Klasa RedBotMotors zawiera następujące metody:

  • stop() oraz coast() – obie metody robią dokładnie to samo, wyłączają napęd, ale nie hamują
  • brake() – hamowanie silników przez zwarcie ich wyprowadzeń
  • drive(int speed), drive(int speed, int duration) – jazda do przodu lub do tyłu zależnie od znaku przekazanego parametru speed (zakres wartości -255..255). W drugim wariancie w parametrze duration przekazujemy czas w milisekundach, po jakim silniki mają zostać zatrzymane
  • pivot(int speed), pivot(int speed, int duration) – obrót robota, koła będą się kręcić z prędkością speed, ale w przeciwnych kierunkach. W drugim wariancie w parametrze duration przekazujemy czas w milisekundach, po jakim silniki mają zostać zatrzymane
  • rightMotor(int speed), rightMotor(int speed, int duration), leftMotor(int speed), leftMotor(int speed, int duration) – funkcje działają podobnie do wcześniej opisanych, ale pozwalają sterować każdym z silników osobno
  • leftBrake(), rightBrake() – hamowanie pojedynczych silników przez zwarcie ich wyprowadzeń
  • leftStop(), rightStop(), leftCoast(), rightCoast() – te metody wyłączają napęd pojedynczych silników

Komunikacja z akcelerometrem

Do komunikacji z modułem akcelerometru z zestawu RedBot Basic należy użyć obiektu klasy RedBotAccel. Moduł powinien być dołączony do złącza z podpisem SENSOR, które ma wyprowadzenia A4 i A5, należy go dołączyć tak, żeby opisy wyprowadzeń na kontrolerze RedBot i module zgadzały się ze sobą. Dostępne metody to:

  • read() – funkcja odczytuje wartości przyspieszeń w trzech osiach, przyspieszenia są zapisane w polach x, y i z obiektu. Dodatkowo metoda oblicza kąty o jakie moduł czujnika został wychylony, wartości kątów znajdują się w polach angleXZ, angleXY i angleYZ.
  • enableBump() – funkcja konfiguruje czujnik do wykrywania puknięć
  • boolean checkBump() – funkcja zwraca true jeśli od jej ostatniego wywołania wykryto puknięcie
  • setBumpThresh(int xThresh) – konfiguracja czułości wykrywania puknięć (parametr xThresh powinien być w zakresie 0..255)

Obsługa czujników line follower

W zestawie znajdują się 3 czujniki line follower, dla nich również przygotowano klasę – RedBotSensor. Metody tej klasy to:

  • RedBotSensor(int pin) – konstruktor klasy inicjalizuje obsługę czujnika na wyprowadzeniu pin
  • int read() – funkcja zwraca wartość odbicia odczytaną z czujnika
  • boolean check() – funkcja zwraca true jeśli wykryto linię
  • setBGLevel(), setDetectLevel() – funkcje kalibracyjne, zapamiętują ilość światła odbitego rejestrowanego przez czujnik w danej chwili odpowiednio dla tła oraz dla linii (oczywiście czujnik należy umieścić nad powierzchnią tła lub linii w momencie wykonywania funkcji). Funkcje te należy wywołać, aby móc używać później funkcji check, jeśli zamierzasz korzystać tylko z funkcji read, nie musisz ich używać. Co jest istotne: klasę można skalibrować nie tylko do pracy z jasnym tłem oraz ciemną linią, ale i odwrotnie: ciemne tło, jasna linia
  • boolean calStatus() – funkcja zwraca true jeśli obie wartości kalibracyjne zostały ustawione

Przykładowy program

Biblioteki RedBot dla Arduino mają jeszcze kilka innych ciekawych klas, ale te przedstawione powyżej zawierają pełną obsługę tego, co jest w zestawie RedBot Basic Kit. Pierwszy przykładowy program będzie demonstracją użycia bibliotek, w kolejnym artykule postaram się zrobić coś ciekawszego. W tej chwili chciałbym, aby robot oczekiwał na puknięcie w obudowę, po puknięciu robot ma ruszyć do przodu i jechać aż napotka czarną linię. Program wygląda następująco:

Działanie programu widać na filmie:

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *