Lezione 27/31: Car-5 SunFounder Smart Car Segue la Tua Mano usando Arduino | Robojax
Introduzione
Hai mai desiderato costruire un robot che risponda intuitivamente alla tua presenza? Questo progetto trasforma un'auto intelligente SunFounder standard in un veicolo controllato tramite gesti che segue la tua mano. Invece di usare un telecomando o un'app per smartphone, questa auto utilizza una combinazione di sensori a ultrasuoni e a infrarossi per rilevare la posizione e la distanza della tua mano, permettendoti di guidarla a sinistra, a destra o in avanti con semplici movimenti naturali.
Questo progetto fa parte del Corso Arduino Robojax (Lezione 27/31) ed è realizzato utilizzando il kit Arduino SunFounder 3-in-1. È un modo eccellente per imparare la fusione dei sensori, dove più sensori lavorano insieme per creare un comportamento più complesso e reattivo. Il valore nel mondo reale qui sta nel capire come combinare diversi tipi di input per prendere decisioni, un concetto fondamentale nella robotica e nell'automazione.
Ecco alcune idee pratiche che potresti sviluppare basandoti su questa logica:
- Mostre Interattive: Crea un piccolo display robotico che segue i visitatori per attirare la loro attenzione.
- Piattaforma Autonoma che Evita Ostacoli: Modifica il codice per far navigare l'auto in una stanza evitando ostacoli invece di seguire una mano.
- Kit Robotico Educativo: Usa questo come progetto fondamentale per insegnare agli studenti l'integrazione dei sensori, la logica e il controllo dei motori.
- Carrello Intelligente per Consegne: In un ambiente controllato, questa logica potrebbe essere adattata per un piccolo carrello che segue una persona in un magazzino o in una fabbrica.
Hardware e Componenti
Questo progetto utilizza i componenti inclusi nel kit Arduino SunFounder 3-in-1. I componenti principali che utilizzerai sono:
- Telaio dell'auto intelligente SunFounder: La piattaforma fisica con ruote e motori.
- Scheda Arduino: Il "cervello" dell'auto che esegue il codice.
- Sensore a Ultrasuoni (HC-SR04): Utilizzato per misurare la distanza da un oggetto (la tua mano) davanti all'auto.
- Due Sensori a Infrarossi (IR) per l'Evitamento Ostacoli: Montati sui lati sinistro e destro per rilevare la presenza della tua mano su quei lati.
- Driver Motori: Un modulo (spesso L298N o simile) utilizzato per controllare la velocità e la direzione dei motori dell'auto in base ai segnali provenienti da Arduino.
- Sorgente di Alimentazione: Batterie per alimentare Arduino e i motori.
Guida al Cablaggio
Come menzionato nel video, il cablaggio per questo progetto è identico a quello spiegato nelle lezioni precedenti per l'auto che evita ostacoli. I sensori e i motori sono tutti collegati ai pin digitali e analogici di Arduino. Per un riferimento visivo, consulta lo schema di cablaggio per l'auto intelligente SunFounder.
Il codice definisce i pin specifici utilizzati per ogni componente, che sono dettagliati nella sezione successiva.
Spiegazione del Codice
Questa sezione si concentra sulle parti configurabili dall'utente del codice che potresti voler regolare per la tua auto. Il programma completo è disponibile per il download sulla pagina delle risorse Robojax.
All'inizio dello sketch, troverai le definizioni dei pin. Queste sono le righe più critiche da capire se hai cablato la tua auto in modo diverso dall'istruttore.
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;
Ecco cosa fa ciascun gruppo di pin:
- Pin Motori (A_1A, A_1B, B_1A, B_1B): Questi sono i pin collegati al driver motori per controllare i due motori. Le etichette "A" e "B" si riferiscono tipicamente rispettivamente ai motori sinistro e destro. Devi cambiarli se il tuo driver motori è collegato a pin Arduino diversi.
- Pin Sensori IR (rightIR, leftIR): Questi pin di ingresso digitale leggono il segnale dai sensori a infrarossi sinistro e destro. Un valore di
0significa che un ostacolo (la tua mano) è stato rilevato, mentre1significa che il percorso è libero. - Pin Sensore a Ultrasuoni (trigPin, echoPin): Il
trigPinè un'uscita che invia un breve impulso ultrasonico, e l'echoPinè un ingresso che legge la durata dell'impulso riflesso per calcolare la distanza.
All'interno della funzione loop(), troverai la logica di comportamento principale. C'è una singola variabile che potresti voler regolare:
int speed = 150;
Questa variabile speed controlla la potenza inviata ai motori durante il movimento. Può variare da 0 (fermo) a 255 (velocità massima). Puoi aumentare questo valore (ad esempio, a 200) per un'auto più veloce o diminuirlo (ad esempio, a 100) per movimenti più controllati e lenti.
Il codice contiene anche funzioni come moveForward(), turnLeft() e turnRight(). Queste funzioni sono utilizzate per controllare il movimento dell'auto e vengono chiamate in base alle letture dei sensori. Non devi modificarle, ma puoi usarle come elementi costitutivi per creare i tuoi comportamenti personalizzati.
Come Funziona la Logica "Segui la Tua Mano"
La magia di questo progetto risiede nel modo in cui Arduino interpreta i dati dei tre sensori. La logica è semplice e viene eseguita continuamente nella funzione loop().
Innanzitutto, l'auto misura la distanza da un oggetto direttamente davanti a sé utilizzando il sensore a ultrasuoni. Poi, controlla i due sensori a infrarossi per vedere se un oggetto si trova sul lato sinistro o destro. Il processo decisionale è il seguente:
- Avanzare: Se la distanza misurata dal sensore a ultrasuoni è maggiore di 5 cm ma inferiore a 10 cm, l'auto avanza. Questo crea una zona "ottimale" in cui l'auto seguirà la tua mano.
- Girare a sinistra: Se la distanza non è in quella zona, l'auto controlla i sensori IR. Se il sensore sinistro è bloccato (la tua mano è a sinistra) e il sensore destro è libero, l'auto gira a sinistra.
- Girare a destra: Al contrario, se il sensore destro è bloccato e il sinistro è libero, l'auto gira a destra.
- Fermarsi: Se nessuna di queste condizioni è soddisfatta—ad esempio, se la tua mano è troppo lontana o troppo vicina—l'auto si ferma.
Questo semplice insieme di regole consente all'auto di reagire dinamicamente alla posizione della tua mano, creando un comportamento di inseguimento fluido e intuitivo.
Dimostrazione dal Vivo del Progetto
Nella dimostrazione video, l'istruttore mostra il comportamento dell'auto in tempo reale. Il monitor seriale viene utilizzato per visualizzare la distanza letta dal sensore a ultrasuoni. Quando l'auto è ferma e la tua mano è lontana (ad esempio, 36 cm), rimane ferma. Non appena metti la mano nella zona di 5-10 cm davanti all'auto, questa inizia ad avanzare.
La dimostrazione evidenzia anche la logica di sterzata. Quando metti la mano sul lato sinistro dell'auto, il sensore IR sinistro viene attivato e l'auto gira a sinistra. Allo stesso modo, mettere la mano sul lato destro fa girare l'auto a destra. L'auto continuerà a seguire la tua mano mentre la muovi, fermandosi solo quando la mano viene rimossa dal raggio dei sensori o è troppo vicina. Questo conferma che la fusione dei sensori e la logica funzionano come previsto, creando un progetto reattivo e divertente.
Capitoli
- [00:00] Introduzione all'auto intelligente che segue la mano
- [00:35] Informazioni sul corso e kit Arduino Robojax
- [01:41] Panoramica del progetto e configurazione del codice
- [02:19] Spiegazione delle definizioni dei pin e della configurazione
- [03:19] Logica del codice per seguire la tua mano
- [05:48] Dimostrazione dal vivo dell'auto in azione
- [07:28] Dimostrazione finale e revisione delle prestazioni
/*
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
Cose di cui potresti avere bisogno
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Risorse e riferimenti
-
DocumentazioneDocumentazione per il kit di apprendimento SunFounder 3 in 1 IoT/Smart Car.docs.sunfounder.com
-
Esterno
File📁
Librerie Arduino (zip)
-
Codice sorgente del kit di apprendimento Smart Car 3-in-1 di SunFounder
3in1-kit-main-v2.zip12.80 MB