Występowanie w projekcie robotyki może być zarówno ekscytujące, jak i edukacyjne, szczególnie gdy budujesz coś namacalnego jak robot związany z linią. Wykorzystanie Arduino, jednego z najpopularniejszych mikrokontrolerów, czyni proces dostępny nawet dla początkujących. W tym przewodniku przeprowadzimy Cię przez kroki, aby utworzyć prosty robot związany z linią, który może autonomicznie poruszać się po ścieżce.
Materiały, których potrzebujesz
- Arduino Uno - Mózg twojego robota.
- Moduł sterownika silnika (L298N) - Aby kontrolować silniki.
- Silniki DC z kołami - do ruchu.
- Podwozie - Rama do przechowywania wszystkich komponentów.
- Moduł czujnika linii (np. QRE1113) - Aby wykryć linię.
- Pakiet akumulatora - źródło zasilania robota.
- Przewody zworki - dla połączeń.
- Tablica chleba - dla połączeń prototypowych.
- Śruby, nakrętki i śruby - Aby złożyć podwozie.
Krok 1: Montaż podwozia
Podwozie służy jako podstawa twojego robota. Zacznij od przymocowania silników DC do podwozia za pomocą śrub i nakrętek. Upewnij się, że silniki są bezpiecznie naprawione, aby zapobiec ruchowi podczas pracy. Przymocuj koła do wałków silnika i ustaw pakiet akumulatora i Arduino na podwoziu. Upewnij się, że wszystkie komponenty dobrze pasują i są w zasięgu ręki do okablowania.
Krok 2: Okablowanie silników
Podłącz silniki DC do modułu sterownika (L298N). Sterownik silnika działa jako interfejs między Arduino a silnikami, umożliwiając Arduino kontrolowanie prędkości i kierunku bez przeciążenia.
// Connect motor A
const int motorA_EN = 9;
const int motorA_IN1 = 7;
const int motorA_IN2 = 8;
// Connect motor B
const int motorB_EN = 10;
const int motorB_IN3 = 5;
const int motorB_IN4 = 6;
void setup() {
// Motor A
pinMode(motorA_EN, OUTPUT);
pinMode(motorA_IN1, OUTPUT);
pinMode(motorA_IN2, OUTPUT);
// Motor B
pinMode(motorB_EN, OUTPUT);
pinMode(motorB_IN3, OUTPUT);
pinMode(motorB_IN4, OUTPUT);
}
Krok 3: Podłączenie czujnika linii
Czujnik linii wykrywa kontrast między linią a powierzchnią. Zazwyczaj czujniki te mają diody LED i fotodiody podczerwieni do wykrywania powierzchni odbijających. Podłącz odpowiednio VCC i GND czujnika z odpowiednio 5V i GND Arduino. Piny wyjściowe czujnika będą podłączone do cyfrowych lub analogowych pinów Arduino na podstawie typu czujnika.
// Line sensor pins
const int sensorLeft = A0;
const int sensorRight = A1;
void setup() {
pinMode(sensorLeft, INPUT);
pinMode(sensorRight, INPUT);
}
Krok 4: Pisanie kodu Arduino
Kod Arduino odczytuje wartości czujnika i odpowiednio steruje silnikami, aby podążać za wierszem. Poniżej znajduje się prosty przykład wyglądu kodu:
// Define motor pins
const int motorA_EN = 9;
const int motorA_IN1 = 7;
const int motorA_IN2 = 8;
const int motorB_EN = 10;
const int motorB_IN3 = 5;
const int motorB_IN4 = 6;
// Define sensor pins
const int sensorLeft = A0;
const int sensorRight = A1;
// Threshold for line detection
const int threshold = 500;
void setup() {
// Initialize motor pins
pinMode(motorA_EN, OUTPUT);
pinMode(motorA_IN1, OUTPUT);
pinMode(motorA_IN2, OUTPUT);
pinMode(motorB_EN, OUTPUT);
pinMode(motorB_IN3, OUTPUT);
pinMode(motorB_IN4, OUTPUT);
// Initialize sensor pins
pinMode(sensorLeft, INPUT);
pinMode(sensorRight, INPUT);
// Start serial communication for debugging
Serial.begin(9600);
}
void loop() {
int leftSensor = analogRead(sensorLeft);
int rightSensor = analogRead(sensorRight);
Serial.print("Left: ");
Serial.print(leftSensor);
Serial.print(" | Right: ");
Serial.println(rightSensor);
if (leftSensor > threshold && rightSensor > threshold) {
// Move forward
moveForward();
}
else if (leftSensor < threshold && rightSensor > threshold) {
// Turn right
turnRight();
}
else if (leftSensor > threshold && rightSensor < threshold) {
// Turn left
turnLeft();
}
else {
// Stop
stopMovement();
}
}
void moveForward() {
digitalWrite(motorA_IN1, HIGH);
digitalWrite(motorA_IN2, LOW);
digitalWrite(motorB_IN3, HIGH);
digitalWrite(motorB_IN4, LOW);
analogWrite(motorA_EN, 200);
analogWrite(motorB_EN, 200);
}
void turnRight() {
digitalWrite(motorA_IN1, HIGH);
digitalWrite(motorA_IN2, LOW);
digitalWrite(motorB_IN3, LOW);
digitalWrite(motorB_IN4, LOW);
analogWrite(motorA_EN, 200);
analogWrite(motorB_EN, 0);
}
void turnLeft() {
digitalWrite(motorA_IN1, LOW);
digitalWrite(motorA_IN2, LOW);
digitalWrite(motorB_IN3, HIGH);
digitalWrite(motorB_IN4, LOW);
analogWrite(motorA_EN, 0);
analogWrite(motorB_EN, 200);
}
void stopMovement() {
digitalWrite(motorA_IN1, LOW);
digitalWrite(motorA_IN2, LOW);
digitalWrite(motorB_IN3, LOW);
digitalWrite(motorB_IN4, LOW);
analogWrite(motorA_EN, 0);
analogWrite(motorB_EN, 0);
}
Krok 5: Zasilanie robota
Po wykonaniu wszystkich połączeń podłącz pakiet akumulatora do Arduino i sterownika silnika. Upewnij się, że biegunowość jest poprawna, aby zapobiec uszkodzeniu komponentów. Przed włączeniem się jest dobrą praktyką, aby testować połączenia z multimetrem.
Testowanie i kalibracja
Po zasilaniu umieść robota na powierzchni z czystą linią (np. Czarna taśma na białym papierze). Obserwuj, jak zachowuje się i dokonuje niezbędnych korekt. Może być konieczne dostosowanie progu czujnika lub dostosowania prędkości, zmieniając wartości PWM w kodzie, aby osiągnąć optymalną wydajność.
Wskazówki dotyczące sukcesu
- Zapewnij stabilne połączenia: Luźne przewody mogą powodować przerywane zachowanie. Użyj tablicy do prototypowania i rozważ połączenia lutowe w celu stałej konfiguracji.
- Użyj czujników jakości: Niezawodne czujniki linii mogą znacznie poprawić wydajność robota.
- Kalibruj czujniki: Różne powierzchnie i warunki oświetlenia mogą wpływać na odczyty czujników. Odpowiednio kalibruj swoje progi.
- Zoptymalizuj kod: Wydajny kod zapewnia szybkie czasy reakcji. Upewnij się, że w twojej pętli nie ma niepotrzebnych opóźnień.
Ulepszenia i dalsza nauka
Po pomyślnym zbudowaniu podstawowego robota opierającego się na linii, rozważ dodanie większej liczby funkcji, aby ulepszyć jego możliwości:
- Wykrywanie skrzyżowania: Umożliwić swojemu robotowi podejmowanie decyzji na skrzyżowaniach.
- Kontrola prędkości: Zaimplementuj dynamiczne regulacje prędkości w oparciu o wejście czujnika.
- Kontrola bezprzewodowa: Dodaj moduły Bluetooth lub Wi-Fi, aby zdalnie sterować robota.
- Unikanie przeszkód: Włącz czujniki ultradźwiękowe do poruszania się po przeszkodach.
Zbudowanie robota podążającego za linii z Arduino to fantastyczny sposób na zanurzenie się w świecie robotyki i systemów wbudowanych. Uczy podstawowych pojęć, takich jak integracja czujników, kontrola motoryczna i podejmowanie decyzji w czasie rzeczywistym. Dzięki cierpliwości i eksperymentowaniu możesz rozszerzyć ten podstawowy projekt na bardziej złożony i zdolny robot. Szczęśliwy budynek!