Lekcja 27/31: Samochód inteligentny SunFounder Car-5 podąża za Twoją ręką przy użyciu Arduino | Robojax
Wprowadzenie
Czy kiedykolwiek chciałeś zbudować robota, który reaguje intuicyjnie na Twoją obecność? Ten projekt przekształca standardowy samochodzik SunFounder Smart Car w pojazd sterowany gestami, który podąża za Twoją dłonią. Zamiast pilota lub aplikacji na smartfona, ten samochodzik wykorzystuje kombinację czujników ultradźwiękowych i podczerwieni do wykrywania pozycji i odległości Twojej dłoni, co pozwala kierować nim w lewo, w prawo lub do przodu za pomocą prostych, naturalnych ruchów.
Ten projekt jest częścią kursu Robojax Arduino (Lekcja 27/31) i został zbudowany przy użyciu zestawu SunFounder 3-in-1 Arduino. To doskonały sposób na naukę fuzji czujników, gdzie wiele czujników współpracuje ze sobą, aby stworzyć bardziej złożone i responsywne zachowanie. Praktyczna wartość tego projektu polega na zrozumieniu, jak łączyć różne typy danych wejściowych do podejmowania decyzji – to podstawowa koncepcja w robotyce i automatyce.
Oto kilka praktycznych pomysłów, które możesz rozwinąć, opierając się na tej logice:
- Interaktywne wystawy: Stwórz małą robotyczną ekspozycję, która podąża za zwiedzającymi, aby przyciągnąć ich uwagę.
- Autonomiczna platforma omijająca przeszkody: Zmodyfikuj kod, aby samochodzik poruszał się po pomieszczeniu, omijając przeszkody zamiast podążać za dłonią.
- Edukacyjny zestaw robotyczny: Wykorzystaj to jako projekt bazowy do nauczania uczniów integracji czujników, logiki i sterowania silnikami.
- Inteligentny wózek dostawczy: W kontrolowanym środowisku tę logikę można zaadaptować do małego wózka podążającego za osobą w magazynie lub fabryce.
Sprzęt i komponenty
Ten projekt wykorzystuje komponenty zawarte w zestawie SunFounder 3-in-1 Arduino. Główne komponenty, których będziesz używać, to:
- Podwozie SunFounder Smart Car: Fizyczna platforma z kołami i silnikami.
- Płytka Arduino: „Mózg" samochodzika, który uruchamia kod.
- Czujnik ultradźwiękowy (HC-SR04): Używany do pomiaru odległości do obiektu (Twojej dłoni) przed samochodzikiem.
- Dwa czujniki podczerwieni (IR) do omijania przeszkód: Zamontowane po lewej i prawej stronie w celu wykrywania obecności Twojej dłoni po tych stronach.
- Sterownik silników: Moduł (często L298N lub podobny) używany do kontrolowania prędkości i kierunku silników samochodzika na podstawie sygnałów z Arduino.
- Źródło zasilania: Baterie do zasilania Arduino i silników.
Schemat połączeń
Jak wspomniano w filmie, okablowanie tego projektu jest identyczne z tym, które zostało wyjaśnione w poprzednich lekcjach dla samochodzika omijającego przeszkody. Czujniki i silniki są podłączone do cyfrowych i analogowych pinów Arduino. Aby uzyskać wizualne odniesienie, zapoznaj się ze schematem połączeń dla SunFounder Smart Car.
Kod definiuje konkretne piny używane dla każdego komponentu, które są szczegółowo opisane w następnej sekcji.
Wyjaśnienie kodu
Ta sekcja koncentruje się na konfigurowalnych częściach kodu, które możesz chcieć dostosować do własnego samochodzika. Pełny program jest dostępny do pobrania na stronie zasobów Robojax.
Na samym początku szkicu znajdziesz definicje pinów. To najważniejsze linie do zrozumienia, jeśli podłączyłeś swój samochodzik inaczej niż instruktor.
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR=7;
const int leftIR=8;
const int trigPin = 3;
const int echoPin = 4;
Oto, co robi każda grupa pinów:
- Piny silników (A_1A, A_1B, B_1A, B_1B): To piny podłączone do sterownika silników w celu kontrolowania dwóch silników. Etykiety „A" i „B" zwykle odnoszą się odpowiednio do lewego i prawego silnika. Musisz je zmienić, jeśli Twój sterownik silników jest podłączony do innych pinów Arduino.
- Piny czujników IR (rightIR, leftIR): Te cyfrowe piny wejściowe odczytują sygnał z lewego i prawego czujnika podczerwieni do omijania przeszkód. Wartość
0oznacza wykrycie przeszkody (Twojej dłoni), a1oznacza, że droga jest wolna. - Piny czujnika ultradźwiękowego (trigPin, echoPin):
trigPinto wyjście, które wysyła krótki impuls ultradźwiękowy, aechoPinto wejście, które odczytuje czas trwania odbitego impulsu w celu obliczenia odległości.
Wewnątrz funkcji loop() znajdziesz główną logikę zachowania. Jest jedna zmienna, którą możesz chcieć dostosować:
int speed = 150;
Ta zmienna speed kontroluje moc wysyłaną do silników podczas ruchu. Może przyjmować wartości od 0 (zatrzymanie) do 255 (maksymalna prędkość). Możesz zwiększyć tę wartość (np. do 200), aby samochodzik był szybszy, lub zmniejszyć ją (np. do 100), aby uzyskać bardziej kontrolowane, wolniejsze ruchy.
Kod zawiera również funkcje takie jak moveForward(), turnLeft() i turnRight(). Te funkcje służą do kontrolowania ruchu samochodzika i są wywoływane na podstawie odczytów czujników. Nie musisz ich modyfikować, ale możesz użyć ich jako elementów składowych do tworzenia własnych, niestandardowych zachowań.
Jak działa logika „Podążaj za dłonią"
Magia tego projektu polega na tym, jak Arduino interpretuje dane z trzech czujników. Logika jest prosta i jest wykonywana w sposób ciągły w funkcji loop().
Najpierw samochód mierzy odległość do obiektu bezpośrednio przed sobą za pomocą czujnika ultradźwiękowego. Następnie sprawdza dwa czujniki podczerwieni, aby zobaczyć, czy obiekt znajduje się po jego lewej lub prawej stronie. Proces podejmowania decyzji jest następujący:
- Jedź do przodu: Jeśli odległość zmierzona przez czujnik ultradźwiękowy jest większa niż 5 cm, ale mniejsza niż 10 cm, samochód jedzie do przodu. Tworzy to strefę „idealną", w której samochód będzie podążał za Twoją ręką.
- Skręć w lewo: Jeśli odległość nie znajduje się w tej strefie, samochód sprawdza czujniki IR. Jeśli lewy czujnik jest zasłonięty (Twoja ręka jest po lewej stronie), a prawy czujnik jest wolny, samochód skręca w lewo.
- Skręć w prawo: Odwrotnie, jeśli prawy czujnik jest zasłonięty, a lewy jest wolny, samochód skręca w prawo.
- Zatrzymaj się: Jeśli żaden z tych warunków nie jest spełniony—na przykład, jeśli Twoja ręka jest zbyt daleko lub zbyt blisko—samochód się zatrzymuje.
Ten prosty zestaw zasad pozwala samochodowi dynamicznie reagować na pozycję Twojej ręki, tworząc płynne i intuicyjne zachowanie podążania.
Prezentacja projektu na żywo
W prezentacji wideo instruktor pokazuje zachowanie samochodu w czasie rzeczywistym. Monitor szeregowy jest używany do wyświetlania odległości odczytanej przez czujnik ultradźwiękowy. Gdy samochód jest bezczynny, a Twoja ręka jest daleko (np. 36 cm), pozostaje zatrzymany. Gdy tylko umieścisz rękę w strefie 5–10 cm przed samochodem, zaczyna on jechać do przodu.
Prezentacja podkreśla również logikę skręcania. Gdy ręka jest umieszczona po lewej stronie samochodu, lewy czujnik IR jest aktywowany i samochód skręca w lewo. Podobnie umieszczenie ręki po prawej stronie powoduje skręt w prawo. Samochód będzie podążał za Twoją ręką, gdy ją przesuwasz, zatrzymując się tylko wtedy, gdy ręka zostanie usunięta z zasięgu czujników lub będzie zbyt blisko. Potwierdza to, że fuzja czujników i logika działają zgodnie z założeniami, tworząc responsywny i zabawny projekt.
Rozdziały
- [00:00] Wprowadzenie do inteligentnego samochodu podążającego za ręką
- [00:35] O kursie i zestawie Robojax Arduino
- [01:41] Przegląd projektu i konfiguracja kodu
- [02:19] Wyjaśnienie definicji pinów i konfiguracji
- [03:19] Logika kodu do podążania za Twoją ręką
- [05:48] Prezentacja na żywo samochodu w akcji
- [07:28] Finalna prezentacja i przegląd wydajności
/*
Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Get this code and watch video Download and resource page https://robojax.com/RJT610
YouTube video https://www.youtube.com/watch?v=mcbJlE7-8ro
*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR=7;
const int leftIR=8;
const int trigPin = 3;
const int echoPin = 4;
void setup() {
Serial.begin(9600);
//motor
pinMode(A_1B, OUTPUT);
pinMode(A_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
//IR obstacle
pinMode(leftIR,INPUT);
pinMode(rightIR,INPUT);
//ultrasonic
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
float distance = readSensorData();
int left = digitalRead(leftIR); // 0: Obstructed 1: Empty
int right = digitalRead(rightIR);
int speed = 150;
if (distance>5 && distance<10){
moveForward(speed);
}else if(!left&&right){
turnLeft(speed);
}else if(left&&!right){
turnRight(speed);
}else{
stopMove();
}
}
float readSensorData() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2
return distance;
}
void moveForward(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void moveBackward(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void turnRight(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void turnLeft(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void stopMove() {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
Common Course Links
Common Course Files
Rzeczy, których możesz potrzebować
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Zasoby i odniesienia
-
DokumentacjaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.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