Search Code

Lekcja 24/31: Inteligentny samochód Część 2: Jazda do przodu, do tyłu, w lewo i w prawo oraz kontrolowanie prędkości samochodu

Lekcja 24/31: Inteligentny samochód Część 2: Jazda do przodu, do tyłu, w lewo i w prawo oraz kontrolowanie prędkości samochodu

24-SunFounder-Car-Speed na chodniku

Ta lekcja skupia się na drugiej fazie budowy Twojego inteligentnego samochodu: przejęciu kontroli nad jego ruchem za pomocą kodu Arduino. Podczas gdy pierwszy projekt mógł wprawić samochód w ruch w podstawowy sposób, ten przewodnik uczy, jak wydawać polecenia, aby samochód jechał do przodu, do tyłu, skręcał w lewo, w prawo i zatrzymywał się z precyzją. Nauczysz się również, jak kontrolować jego prędkość, co pozwoli na płynne przyspieszanie i zwalnianie. To fundamentalny krok dla każdego projektu robotycznego, ponieważ daje podstawową logikę do tworzenia bardziej złożonych autonomicznych zachowań.

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000

Opanowanie tych kontroli ruchu otwiera świat możliwości. Oto kilka praktycznych zastosowań tej wiedzy:

  • Roboty podążające za linią: Użyj funkcji skrętu w lewo i w prawo, aby utrzymać robota na torze.
  • Pojazdy omijające przeszkody: Zaprogramuj samochód, aby jechał do przodu, zatrzymywał się i skręcał, gdy wykryje obiekt na swojej drodze.
  • Eksploracja zdalnie sterowana: Połącz te polecenia z modułem bezprzewodowym, aby prowadzić samochód po domu lub podwórku.
  • Zautomatyzowane systemy dostaw: Stwórz mały robot, który może poruszać się między wyznaczonymi punktami, zatrzymując się i ruszając w razie potrzeby.

Sprzęt i komponenty

Ten projekt opiera się na zestawie SunFounder 3-in-1 Arduino. Nie są wymagane żadne dodatkowe komponenty poza podstawowym zestawem, ale będziesz musiał podłączyć cztery dodatkowe przewody do Arduino, aby sterować sterownikiem silnika. Niezbędne komponenty to:

  • Arduino Uno (lub kompatybilna płyta)
  • Podwozie inteligentnego samochodu SunFounder z silnikami
  • Płytka sterownika silnika (zawarta w zestawie)
  • Przewody połączeniowe
  • Zestaw baterii do samochodu
  • Kabel USB do programowania
smarcar_turning_right  powyżej
smartcar_turning_left powyżej

Przewodnik po okablowaniu

Okablowanie w tym projekcie jest kluczowe dla kontrolowania kierunku każdego silnika. Film wyjaśnia, że cztery przewody sterujące silnikiem z płytki sterownika są podłączone do pinów Arduino 5, 6, 9 i 10. Te piny są wyjątkowe, ponieważ obsługują modulację szerokości impulsu (PWM), która jest niezbędna do kontroli prędkości.

W filmie instruktor podłącza je w określonej kolejności za pomocą żółtych i niebieskich przewodów, jak pokazano na poniższym schemacie.

W filmie wspomniano o ważnej uwadze dotyczącej bezpieczeństwa: należy odłączyć zasilanie baterii samochodu (czerwony przewód do 5V i czarny przewód do GND) podczas programowania Arduino przez USB. Zapobiega to przeciążeniu portu USB i potencjalnemu jego wyłączeniu.

Wyjaśnienie kodu

Kod do tej lekcji jest skonstruowany tak, aby był łatwy do modyfikacji i zrozumienia. Klucz do sterowania samochodem leży w definicjach pinów na górze szkicu. Możesz je zmienić, jeśli zdecydujesz się użyć innych pinów na swoim Arduino.

const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

Te linie definiują piny Arduino podłączone do wejść sterownika silnika. in1 i in2 kontrolują jeden silnik, podczas gdy in3 i in4 kontrolują drugi. Ustawiając te piny na HIGH lub LOW, kontrolujesz kierunek obrotów każdego silnika.

Aby kontrolować prędkość samochodu, kod używa dwóch niestandardowych funkcji: moveForward(int speed) i moveBackwards(int speed). Te funkcje przyjmują jako argument wartość całkowitą od 0 do 255. Wartość 0 zatrzymuje silnik, a 255 to maksymalna prędkość. Na przykład, aby samochód jechał do przodu z pełną prędkością, wywołasz moveForward(255). Aby jechał do tyłu powoli, użyjesz moveBackwards(100).

Film demonstruje również sekwencję „przyspieszania” i „zwalniania” za pomocą pętli for. To potężna technika płynnego przyspieszania.

for(int i=0;i<=255;i+=5){
  moveForward(i);
  delay(100);
}

Ta pętla zaczyna się od i równego 0 i zwiększa je o 5 przy każdym przejściu, aż osiągnie 255. Za każdym razem wywołuje moveForward(i), stopniowo zwiększając prędkość samochodu. delay(100) zapewnia 100-milisekundową pauzę na każdym etapie prędkości, co czyni przyspieszanie widocznym. Podobna pętla z malejącą wartością i jest używana do zwalniania samochodu.

Demonstracja projektu na żywo

W filmie instruktor demonstruje projekt w dwóch głównych etapach. Najpierw pokazuje podstawowe ruchy samochodu. Po załadowaniu kodu „move” samochód wykonuje zaprogramowaną sekwencję: jazda do przodu przez dwie sekundy, zatrzymanie, cofanie przez dwie sekundy, zatrzymanie, skręt w lewo, a następnie skręt w prawo. To wizualnie potwierdza, że okablowanie i logika są poprawne.

Druga demonstracja skupia się na kontroli prędkości. Instruktor ładuje kod „przyspieszania”, który stopniowo przyspiesza samochód do przodu, aż osiągnie maksymalną prędkość, a następnie płynnie zwalnia do zatrzymania. Następnie pokazuje wersję ze stałą prędkością, w której samochód jedzie do przodu z prędkością 255, zatrzymuje się, a następnie cofa z mniejszą prędkością 100, a wartości są wyświetlane w monitorze szeregowym w celu weryfikacji.

Rozdziały

  • [00:00] Wprowadzenie do sterowania ruchem samochodu
  • [01:44] Konfiguracja okablowania do sterowania kodem
  • [02:07] Demonstracja ruchu do przodu i do tyłu
  • [03:18] Demonstracja skrętów w lewo i w prawo
  • [05:05] Podłączanie przewodów do pinów Arduino
  • [07:00] Wyjaśnienie kodu sterowania kierunkiem
  • [11:44] Wprowadzenie do kontroli prędkości
  • [12:16] Wyjaśnienie kodu płynnej zmiany prędkości
  • [14:45] Używanie monitora szeregowego do debugowania
  • [17:10] Demonstracja na żywo kontroli prędkości
  • [19:45] Test końcowy na zewnątrz i podsumowanie

Obrazy

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000
26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000
smartcar_turning_left
smartcar_turning_left
smarcar_turning_right
smarcar_turning_right
24-SunFounder-Car-Speed on the pavement
24-SunFounder-Car-Speed on the pavement
900-Lesson 24/31: Smart code speeds up
Język: C++
/*
Lesson 24/31: Smart code speeds up
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM

*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(9600);
  Serial.println("SunFounder Arduino Course");
  Serial.println("Lesson 3: Speed up");
  Serial.println("www.Robojax.com");
  
}

void loop() {
    
    moveForward(255);
    Serial.print("Forward at: ");
    Serial.println(255);
    delay(5000);//for 5 seconds

    Serial.println("Stopped ");
    moveForward(0);//stop the car
    delay(2000);//for 2 seconds
    
    moveBackwards(100);
    Serial.print("Reverse at: ");    
    Serial.println(100);    
    delay(5000);//for 5 seconds

    Serial.println("Stopped ");
    moveForward(0);//stop the car
    delay(2000);//for 2 seconds   
 
}

void moveForward(int speed) {
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

void moveBackwards(int speed) {
  analogWrite(in1, speed);
  analogWrite(in2, 0);
  
  analogWrite(in3, 0);
  analogWrite(in4, speed);
}
901-Lesson 24/31: Smart code speeds up (Custome code)
Język: C++
/*
Lesson 24/31: Smart code speeds up (custom code)
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM

*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(9600);
  Serial.println("SunFounder Arduino Course");
  Serial.println("Lesson 3: Speed up");
  Serial.println("www.Robojax.com");
  
}

void loop() {
  Serial.println("Loop 1: Speeding Up"); 
  for(int i=0;i<=255;i+=5){
    moveForward(i);
    Serial.print("i= ");
    Serial.println(i);
    delay(100);
  }
    Serial.println("Loop 2: Slowing down "); 
  for(int i=255;i>=0;i-=5){
    moveForward(i);
    Serial.print("i= ");
    Serial.println(i);    
    delay(100);
  }
 
}

void moveForward(int speed) {
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

Zasoby i odniesienia

Pliki📁

Biblioteki Arduino (zip)