Zaloguje się
or
Tel +48 698 615 740

Podłączenie czujników do robota i zaprogramowanie line-followera

18 listopada, 2021

W artykule zostanie omówione zaprogramowanie oraz podłączenie czujników do robota z którego utworzymy line-followera. Będzie on podążał za czarną linią która będzie na białym tle.

Spis treści

  • Zamontowanie czujników do “podstawy”
  • Podłączenie czujników
  • Zaprogramowanie line-followera
  • Konfigurowanie czujników
  • Pliki do pobrania

Zamontowanie czujników do “podstawy”

Do zbudowania line-followera potrzebujemy zapoznać się z wcześniejszym artykułem dotyczącego podłączenia zasilania robota, oraz z tym jak sterować szybkością , możecie to zrobić tutaj. Nasz line-follower będzie się różnił tym, że nie nie ma potrzeby podłączenia do niego pada, ponieważ trasę będzie mu wyznaczać czarna taśma, na białej powierzchni. Nowością będą tylko czujniki kolorów które pozwolą odróżnić białe od czarnego.

Podłączenie czujników

Zaczniemy od zapoznania się ze schematem podłączenia czujników.

PINY CZUJNIKAPINY ARDUINO
S0A0, A6
S1A1, A7
S2A3, 4
S3A2, 5
OUTA4, 2
VCC+5V
GNDGND

W pinach arduino są po dwa piny ponieważ mamy dwa czujniki, także podłączamy je zgodnie z powyższą tabelą.

Zaprogramowanie line-followera

Po podłączeniu czujników zajmiemy się kodem, wykorzystamy tutaj funkcję których używaliśmy w artykule z podłączania i wykorzystania modułów silnika w robocie, ale na razie zacznijmy od początku.

Definiujemy wszystkie silniki, oraz dwa czujniki w następujący sposób

//silnik 1
#define out1 13
#define out2 12
//silnik 2
#define out3 10
#define out4 11
//silnik 3
#define out5 9
#define out6 8
//silnik 4
#define out7 6
#define out8 7
//obroty silnika
#define PWM 3
//czujnik 1
#define S0 A0
#define S1 A1
#define S2 A3
#define S3 A2
#define sensorOut A4
//czujnik 2
#define S00 A6
#define S01 A7
#define S02 4
#define S03 5
#define sensor 2

Silniki dostosowujemy pod swoje piny, aby wszystkie ruszały się w prawidłową stronę również jest to omówione w jaki sposób to zrobić w artykule z podłączania i wykorzystania modułów silnika w robocie.

Kiedy nasze koła kręcą się tak jak chcemy przechodzimy do funkcji setup gdzie ustawiamy wszystkie wejścia i wyjścia, Serial.begin() przyda nam się do późniejszego testowania.

void setup() {
  Serial.begin(9600);

  pinMode(out1, OUTPUT);
  pinMode(out2, OUTPUT);
  pinMode(out3, OUTPUT);
  pinMode(out4, OUTPUT);
  pinMode(out5, OUTPUT);
  pinMode(out6, OUTPUT);
  pinMode(out7, OUTPUT);
  pinMode(out8, OUTPUT);

  pinMode(PWM, OUTPUT);

  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);

  pinMode(S00, OUTPUT);
  pinMode(S01, OUTPUT);
  pinMode(S02, OUTPUT);
  pinMode(S03, OUTPUT);
  pinMode(sensor, INPUT);

  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);

  digitalWrite(S00, HIGH);
  digitalWrite(S01, LOW);
}

Przejdźmy teraz do głównej funkcji loop, gdzie zaprogramujemy całość, nie będzie ona zbyt długa ze względu na to, że będziemy używać funkcji

void loop() {
  analogWrite(PWM, 75);//ustawiamy prędkość

  int lewy = zrobPomiar(S2, S3, sensorOut);//wywołujemy funkcje która zrobi nam pomiar dla pierwszego czujnika
  int prawy = zrobPomiar(S02, S03, sensor);//wywołujemy funkcje która zrobi nam pomiar dla drugiego czujnika
  
  if (lewy > 20 && prawy < 17 ) {//jeżeli lewy czujnik widzi wartość powyżej 20 (taśmę), a prawy wartość poniżej 17(białe), to skręć w lewo
    analogWrite(PWM, 85);
    skrecLewo();    
  } else if  (lewy < 17 && prawy > 20) {//jeżeli lewy czujnik widzi wartość poniżej 17 (białe), a prawy wartość powyżej 20(taśmę), to skręć w prawo
    analogWrite(PWM, 85);
    skrecPrawo();
  } else {//w przeciwnym wypadku jedz prosto
    jedzDoPrzodu();
  }
}

Poniżej podaję jeszcze funkcje które będą niezbędne do działania naszego programu, wklejamy je pod funkcją loop.

int zrobPomiar(int x, int y, int z) {
  int frequencyRed = 0, frequencyGreen = 0, frequencyBlue = 0, suma = 0;

  digitalWrite(x, LOW);//x = s2
  digitalWrite(y, LOW);//y = s3

  frequencyRed = pulseIn(z, LOW);//z = out

  digitalWrite(x, HIGH);
  digitalWrite(y, HIGH);

  frequencyGreen = pulseIn(z, LOW);

  digitalWrite(x, LOW);
  digitalWrite(y, HIGH);

  frequencyBlue = pulseIn(z, LOW);

  suma = frequencyRed + frequencyGreen + frequencyBlue;

  return suma;
}

void jedzDoPrzodu() {
  digitalWrite(out1, LOW);
  digitalWrite(out2, HIGH);

  digitalWrite(out3, LOW);
  digitalWrite(out4, HIGH);

  digitalWrite(out5, LOW);
  digitalWrite(out6, HIGH);

  digitalWrite(out7, LOW);
  digitalWrite(out8, HIGH);
}
void skrecLewo() {
  digitalWrite(out1, LOW);
  digitalWrite(out2, HIGH);

  digitalWrite(out3, LOW);
  digitalWrite(out4, HIGH);

  digitalWrite(out5, LOW);
  digitalWrite(out6, LOW);

  digitalWrite(out7, LOW);
  digitalWrite(out8, LOW);
}
void skrecPrawo() {
  digitalWrite(out1, LOW);
  digitalWrite(out2, LOW);

  digitalWrite(out3, LOW);
  digitalWrite(out4, LOW);

  digitalWrite(out5, LOW);
  digitalWrite(out6, HIGH);

  digitalWrite(out7, LOW);
  digitalWrite(out8, HIGH);
}

Konfigurowanie czujników

Aby ustawić prawidłowe wartości w instrukcjach warunkowych musimy skalibrować naszego robota i ustalić który czujnik to lewy, a który prawy, jako tester przygotujmy białą kartkę z naklejonym kawałkiem taśmy, następnie przesuwamy taśmę najpierw w lewą stronę, później w prawą i na środek pomiędzy czujnik, sprawdzamy wtedy jakie wyniki zwracają nam czujniki i dostosowujemy do tego wartości w instrukcjach if, w moim wypadku było to powyżej 20 czarne, a poniżej 17 białe. Wartości odczytujemy z monitora portów szeregowych.

Po poprawnym skalibrowaniu, nasz robot powinien śledzić czarną linię. Cały kod znajduje się do pobrania poniżej.

Pliki do pobrania

Sticky
Możliwość komentowania Podłączenie czujników do robota i zaprogramowanie line-followera została wyłączona
Adrian Wojtala

Adrian Wojtala

Ma 21 lat. Studiuje informatykę na Uniwersytecie DSW, ukończył technikum o profilu technik-informatyk. Interesuje się programowaniem i w przyszłości ma plan zostać back-end developerem. Swoją przygodę z Arduino rozpoczął podczas praktyk od września 2021 r.

Comments are closed.

Strona korzysta z plików cookies w celu realizacji usługi i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.