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
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ń.
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
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
/*
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);
}
/*
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);
}
Common Course Links
Common Course Files
Rzeczy, których możesz potrzebować
-
Amazon5V DC motor on Amazonamzn.to
-
Amazon5V DC motor on eBayebay.us
-
AmazonSunFounder Arduino Learning kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
AliExpress5V DC motor on AliExpresss.click.aliexpress.com
Zasoby i odniesienia
-
DokumentacjaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kit¶docs.sunfounder.com
-
ZewnętrznyPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Pliki📁
Biblioteki Arduino (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB