Robot jeżdżący po czarnej linii to klasyczny projekt wprowadzający w robotykę. Czujniki IR wykrywają granicę linii, a Arduino decyduje o skręcie. Gotowy robot startuje na zawodach dla szkół i kółek technicznych.
Części
Część
Cena
Arduino Uno
~30 zł
Moduł L298N (mostek H)
~8 zł
2× silnik DC z przekładnią + koła
~20 zł
Moduł 5× czujników IR TCRT5000
~8 zł
Podwozie akrylowe + 1 kółko swobodne
~12 zł
Pakiet Li-Po 7,4 V 1000 mAh
~30 zł
Połączenia
L298N
Arduino
IN1, IN2 (lewy silnik)
D2, D3
IN3, IN4 (prawy silnik)
D4, D5
ENA (PWM lewy)
D9
ENB (PWM prawy)
D10
5 V (logika)
5 V Arduino
12 V (silniki)
Li-Po 7,4 V+
Czujnik IR (pin OUT)
Arduino
Skrajnie lewy
A0
Lewy
A1
Środkowy
A2
Prawy
A3
Skrajnie prawy
A4
Algorytm PID – kod
#define PRĘDKOSC_BAZA 180
#define KP 40
#define KI 0
#define KD 20
int pozycja_poprzednia = 0;
float calka = 0;
int czytajCzujniki() {
bool c[5];
for (int i = 0; i < 5; i++) c[i] = (analogRead(A0 + i) < 500);
if (!c[0]&&!c[1]&&!c[2]&&!c[3]&&!c[4]) return pozycja_poprzednia;
int suma = 0, waga = 0;
int wagi[] = {-2, -1, 0, 1, 2};
for (int i = 0; i < 5; i++) { suma += c[i] * wagi[i]; waga += c[i]; }
return waga ? suma * 100 / waga : pozycja_poprzednia;
}
void setup() {
for (int p : {2,3,4,5,9,10}) pinMode(p, OUTPUT);
}
void loop() {
int blad = czytajCzujniki();
calka += blad;
int pochodna = blad - pozycja_poprzednia;
int korekta = KP * blad + KI * calka + KD * pochodna;
pozycja_poprzednia = blad;
int lewy = constrain(PRĘDKOSC_BAZA + korekta, 0, 255);
int prawy = constrain(PRĘDKOSC_BAZA - korekta, 0, 255);
digitalWrite(2, HIGH); digitalWrite(3, LOW); analogWrite(9, lewy);
digitalWrite(4, HIGH); digitalWrite(5, LOW); analogWrite(10, prawy);
}
✅ Dostrajanie: zwiększaj KP aż robot będzie reagował, potem dodawaj KD by wyeliminować oscylacje. KI zostawiaj 0 na start.
Trasa testowa
Wydrukuj lub narysuj czarną taśmę klejącą (20–25 mm) na białym kartonie. Ostre zakręty 90° i pętle to dobry test algorytmu PID.