[PROJEKT] Romi Chassis – montaż oraz sterowanie silnikami
Teraz możemy przestąpić do pisania programu. Będziemy w nim sterować silnikami tak, aby nasze podwozie poruszało się do przodu, później zatrzymało się a następnie pojechało do tyłu. Program prezentuje się następująco (znajduje się również w sekcji Plik do pobrania):
// Romi Chassis - Montaż oraz sterowanie silnikami // Patryk Mądry // Mikrokontroler 2017 r. void setup() { pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); } void loop() { delay(1500); while(1) { // Jazda do przodu digitalWrite(6,LOW); analogWrite(10,50); digitalWrite(7,LOW); analogWrite(11,50); delay(2000); // Zatrzymanie się digitalWrite(6,HIGH); analogWrite(10,0); digitalWrite(7,HIGH); analogWrite(11,0); delay(2000); //Jazda do tyłu digitalWrite(6,HIGH); analogWrite(10,50); digitalWrite(7,HIGH); analogWrite(11,50); delay(2000); //Zatrzymanie się digitalWrite(6,HIGH); analogWrite(10,0); digitalWrite(7,HIGH); analogWrite(11,0); delay(2000); } }
Pierwszym krokiem jest deklaracja, do których pinów KAmduino oraz jaką role mają piny, do których podłączone są sterowniki silników. Musimy ustawić piny numer 6, 7, 10 oraz 11 jako wyjścia:
void setup() { pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); }
Następnie przechodzimy do pętli głównej programu – zgodnie z tabelą 1 na pin DIR musi zostać podany stan niski, aby silnik poruszał się do przodu. Następnie do wyprowadzenia PWM należy doprowadzić sygnał PWM. Do tego celu wykorzystamy funkcję analogWrite(X,Y). Do funkcji tej trzeba podać dwa argumenty. Najpierw (wartość X) musimy podać pin, na którym ma zostać wygenerowany sygnał PWM (w naszym przypadku są to piny 10 oraz 11). Następnie należy podać wartość wypełnienia (wartość Y). Wartość 255 oznacza 100 % wypełnienia, a wartość 0 oznacza brak wypełnienia (brak obrotów). Im większą wartość PWM wygenerujemy, tym szybciej będzie obracał się wał naszego silnika. Na początku lepiej używać małych wypełnień, np. wartości 50…80 dla funkcji analogWrite, a następnie przejść do wyższych wartości. Chcemy, aby oba silniki obracały się w tym samym kierunku i z tą samą mocą:
// Jazda do przodu digitalWrite(6,LOW); analogWrite(10,50); digitalWrite(7,LOW); analogWrite(11,50); delay(2000);
Nasza konstrukcja będzie się poruszać przez 2 sekundy (2000 ms) do przodu. Następnie chcemy, aby się zatrzymała. Żeby to osiągnąć musimy podać w funkcji analogWrite(X,Y) jako Y wartość 0 – spowoduje to zatrzymanie się silnika. Musimy zatrzymać oba silniki (lewy oraz prawy), poniższy kod zatrzyma oba silniki na 2 sekundy:
// Zatrzymanie się digitalWrite(6,HIGH); analogWrite(10,0); digitalWrite(7,HIGH); analogWrite(11,0); delay(2000);
Następnie chcemy, aby nasza konstytucja poruszała się do tyłu. Kod wygląda bardzo podobnie jak na listingu X. Musimy tylko zmienić stan pinu DIR z niskiego na wysoki oraz zatrzymać się na 2 sekundy (2000 ms). Kod do realizacji tego zadania jest podany poniżej:
//Jazda do tyłu digitalWrite(6,HIGH); analogWrite(10,50); digitalWrite(7,HIGH); analogWrite(11,50); delay(2000); //Zatrzymanie się digitalWrite(6,HIGH); analogWrite(10,0); digitalWrite(7,HIGH); analogWrite(11,0); delay(2000);
Gdy mamy napisany kod, wgrywamy go na KAmduino UNO. Aby uruchomić moduł zasilania oraz sterowników silników, należy nacisnąć przycisk POWER znajdujący się w lewym dolnym rogu płytki (rysunek 9).
Rysunek 9. Umiejscowienie przycisku do włączania modułu zasilania wraz ze sterownikiem silników
Działanie programu zostało pokazane na poniższym wideo: