Robotyka3

Sterowanie platformą mobilną

Sprawdźmy czy platforma pojedzie do przodu.

int predkoscPrawo = 5;  
int kierunekPrawo = 4; 
int predkoscLewo = 6;                      
int kierunekLewo = 7;                        

void setup(){ 
    pinMode(kierunekPrawo, OUTPUT);   
    pinMode(kierunekLewo, OUTPUT); 
}

void loop(){
    digitalWrite(kierunekPrawo, HIGH);   
    digitalWrite(kierunekLewo, HIGH);       
    analogWrite(predkoscPrawo, 150);
    analogWrite(predkoscLewo, 150);  
}

Kod programu zaczynamy od zadeklarowania zmiennych, pod którymi zapisane będą numery złącz odpowiedzialnych za kierunek obrotu każdego z silników (kierunekPrawo i kierunekLewo) oraz prędkości obu silników (predkoscPrawo i predkoscLewo). Kierunki, sterowane cyfrowo, są dwa: przód (HIGH) oraz tył (LOW). Prędkość silnika regulujemy analogowo w zakresie od 0 do 255.

Ponieważ funkcja „loop()” wykonuje swoją zawartość w nieskończoność, musimy znacząco opóźnić kolejne wykonanie po zatrzymaniu się na mecie. Poniższy program pozwala na jazdę trwającą 2 s, następnie następuje wyłączenie silników na 10 s.

int predkoscPrawo = 5;  
int kierunekPrawo = 4; 
int predkoscLewo = 6;                      
int kierunekLewo = 7;                        

void setup() { 
    pinMode(kierunekPrawo, OUTPUT);   
    pinMode(kierunekLewo, OUTPUT); 
}

void loop() {  
    digitalWrite(kierunekPrawo,HIGH);   
    digitalWrite(kierunekLewo, HIGH);       
    analogWrite(predkoscPrawo, 150);
    analogWrite(predkoscLewo, 150);
    delay(2000);
    analogWrite(predkoscPrawo, 0);
    analogWrite(predkoscLewo, 0);
    delay(10000);
}

Zakręcanie

Są dwie metody pozwalające na obrót platformy.
Metoda pierwsza polega na znacznym obniżeniu (lub zredukowaniu do zera) prędkości jednego z silników. Jeśli lewy będzie obracał się wolniej, platforma skręci w lewo, jeśli prawy będzie się obracał wolniej, platforma skręci w prawo. Pierwszy silnik obraca się szybciej (wartość 200), drugi wolniej (wartość 100).

int predkoscPrawo = 5;  
int kierunekPrawo = 4; 
int predkoscLewo = 6;                      
int kierunekLewo = 7;                        

void setup() { 
    pinMode(kierunekPrawo, OUTPUT);   
    pinMode(kierunekLewo, OUTPUT); 
}

void loop() {  
    digitalWrite(kierunekPrawo,HIGH);   
    digitalWrite(kierunekLewo, HIGH);       
    analogWrite(predkoscPrawo, 200);
    analogWrite(predkoscLewo, 100);
    delay(2000);
    analogWrite(predkoscPrawo, 0);
    analogWrite(predkoscLewo, 0);
    delay(10000);
}

W drugiej metodzie, silniki powinny obracać się w odwrotnych kierunkach (przy takiej samej prędkości obrotu).

int predkoscPrawo = 5;  
int kierunekPrawo = 4; 
int predkoscLewo = 6;                      
int kierunekLewo = 7;                        

void setup(){ 
    pinMode(kierunekPrawo, OUTPUT);   
    pinMode(kierunekLewo, OUTPUT); 
}

void loop(){  
    digitalWrite(kierunekPrawo,LOW);   
    digitalWrite(kierunekLewo, HIGH);       
    analogWrite(predkoscPrawo, 200);
    analogWrite(predkoscLewo, 200);
    delay(2000);
    analogWrite(predkoscPrawo, 0);
    analogWrite(predkoscLewo, 0);
    delay(10000);
}

Sumo

if kolor == czarny
    if odległość == mala
        jedż prosto (atakuj)
    else
        obracaj się (szukaj)
else
    obróć się (tak, żeby zjechać z białego paska)
Strona na licencji Creative Commons Attribution-ShareAlike 3.0. Autorzy: A. Czoska, M. Komosiński, B. Kowalczyk, A. Kupś, M. Lubawy