Jak zbudować prostą linię podążając za robotem z Arduino

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!

Zostaw komentarz

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.