Nel post di oggi vogliamo costruire un robot da esplorazione telecomandato con il kit Smart Car di Acebott. Il robot deve essere controllato con un joystick e mostrare l'ambiente circostante in ottica radar su un piccolo display.
Il sensore a ultrasuoni, già montato su un servomotore con un supporto in acrilico, viene utilizzato per scansionare l'ambiente circostante.
Il sistema di controllo utilizza lo shield joystick PS2 e la configurazione ESP32 D1 R32, che forse conoscete già grazie ai post sul blog dedicati al controllo del robot Bionic Spider.
Hardware
Se avete già apportato le modifiche al Joystick Shield PS2 in un blog precedente della serie Bionic Spider Controller, potete saltare il paragrafo seguente.
Per la realizzazione del progetto sono necessari:
(opzionale) Batteria di blocco da 9V + Clip per batteria
e naturalmente uno assemblato Auto robot Acebott
Poiché gli ingressi analogici dei due assi del joystick sono collegati ai GPIO 2 e 4, che sono collegati all'ADC2, questi non possono essere utilizzati contemporaneamente al modulo WLAN. Tuttavia, le connessioni IO 34 e IO35 (ADC1) si trovano direttamente accanto a queste, il che significa che la funzionalità può essere facilmente stabilita tramite un ponticello.

Figura 1: Ponte di fili tra le connessioni
Collegare i collegamenti come indicato sopra.
Poiché il LED di bordo è collegato al GPIO 2, il pin deve essere rimosso in questo punto perché altrimenti il collegamento influenzerebbe il valore della tensione dell'asse X.
Lo stesso vale per il pin D12, che interferisce con il processo di avvio e quindi non è possibile avviare il sistema con lo shield inserito. Il pulsante centrale del joystick è collegato a questa connessione, il che significa che non può più essere utilizzato. Se si desidera comunque implementarlo, è necessario ricollegarlo a una connessione libera.

Figura 2: Scudo con modifiche
Lo schermo può essere semplicemente collegato al D1 R32. Assicuratevi che il piccolo interruttore nell'angolo sinistro sia impostato su 3v3 altrimenti l'ESP32 potrebbe essere danneggiato dalla tensione eccessiva di 5V.
Estensione del display
Poiché il controller dovrebbe visualizzare l'ambiente circostante il veicolo sotto forma di schermo radar, come si vede in molti film, è necessario un display.
Qui si consiglia il Display grafico OLED da 1,3" (SH1106). Questo non solo è un display grafico di grandi dimensioni e di facile lettura, ma ha anche la giusta disposizione per la striscia di prese del modulo HC05 sullo schermo (in alto a destra). Ciò significa che il display può essere inserito senza grandi modifiche.
È necessario rimuovere solo il resistore SMD superiore accanto al pulsante A, che è stato originariamente progettato per dimezzare la tensione sul pin RXD dell'HC05 in modo da non danneggiare il modulo quando funziona con il microcontrollore UNO.
Modifica dell'immagine
Poiché il microcontrollore utilizzato (ESP32) ha un livello logico di 3,3 V, la comunicazione con il display non funzionerebbe più con una tensione dimezzata.
Software
Per la comunicazione, i pacchetti di dati vengono scambiati utilizzando UDP. Con questo protocollo di comunicazione, i pacchetti vengono semplicemente inviati senza controllare se il pacchetto è stato ricevuto.
Sebbene questo renda lo scambio di dati molto veloce, è anche insicuro, in quanto non è possibile determinare se il destinatario sta effettivamente ricevendo i dati. La comunicazione tramite rete consente inoltre una maggiore portata rispetto a ESPnow o Bluetooth, in quanto la rete può coprire una vasta area con ripetitori e punti di accesso.
In linea di principio, i due dispositivi possono comunicare tra loro in qualsiasi luogo in cui sia presente la ricezione dello smartphone.
La libreria per la comunicazione UDP è già inclusa nell'ampio pacchetto di schede per l'ESP32.
Oltre alla libreria UDP e WiFi, sono necessarie altre librerie esterne, che devono essere installate.
Questi possono essere scaricati da GitHub come file .zip tramite i seguenti link e scaricati nell'IDE Arduino sotto la voce
Sketch > include Libreria > Aggiungi libreria .zip ...
possono essere selezionati e installati.
Il ESP32Servo, ultrasuoni e veicolo Le librerie sono già incluse nel file .zip delle istruzioni. Sono già state installate anche nelle istruzioni per gli utenti avanzati.
Codice smart car
|
#include <vehicle.h> |
Spiegazione:
All'avvio, l'ESP32 si connette alla WLAN, apre una porta UDP e inizializza i motori, il sensore a ultrasuoni e il servo. Nel ciclo principale, attende i comandi UDP in arrivo e li valuta come comandi di testo. A seconda del comando, i motori vengono controllati o vengono eseguite funzioni speciali.
Con il comando BTN_A, il servo ruota il sensore a ultrasuoni in passi, misura la distanza in ogni posizione e salva l'angolo e la distanza in un array JSON. Una volta completata la scansione, il JSON viene serializzato e rinviato al mittente via UDP, dopodiché il servo torna alla posizione centrale.
Dopo ogni azione eseguita, l'ESP32 invia il feedback "RDY" per segnalare che è pronto per il comando successivo.
È possibile utilizzare il codice qui scaricare.
Una volta caricato il programma sul microcontrollore con i dati di accesso WLAN corretti, verrà visualizzato l'indirizzo IP del dispositivo. Prendete nota di questo dato perché è richiesto dal controllore.
Codice controllore
|
#include <math.h> JsonDocument doc; |
Spiegazione:
Dopo l'avvio, l'ESP32 si connette alla WLAN, inizializza il display OLED, calibra il joystick sulla sua posizione centrale e imposta i GPIO necessari per i pulsanti. Gli assi del joystick vengono analizzati continuamente nel loop principale. Se superano un valore di soglia, viene determinata la direzione di marcia e inviata via UDP come comando (ad esempio, avanti, indietro, sinistra, destra) o l'arresto se il joystick è in posizione centrale. Inoltre, è possibile attivare comandi speciali utilizzando i tasti A-F. Per evitare trasmissioni multiple, ogni comando viene inviato nuovamente solo dopo la conferma o dopo che si è verificato un timeout.
Vengono analizzati anche i pacchetti UDP in arrivo. Se viene ricevuta la risposta "RDY", il ricevitore è pronto per il comando successivo. Se invece il pacchetto contiene un oggetto JSON con dati di misura, questo viene analizzato e visualizzato come una linea sull'OLED. L'angolo e la distanza dei valori misurati rappresentano linee che partono dal centro del display. Questo crea una semplice rappresentazione grafica dell'ambiente rilevato dall'altro ESP32.
Le linee vengono create con la funzione drawLineAngle(). Le coordinate finali della linea vengono calcolate utilizzando il seno e il coseno. Potete trovare una spiegazione dettagliata nel blog Orologio retrò con GC9A01A.
È possibile utilizzare il codice qui scaricare.
Caricare il programma con i dati di accesso corretti e l'indirizzo IP del ricevitore sul microcontrollore.
Conclusione
Se ora si preme il pulsante A sul controller, il display mostrerà l'ambiente circostante nei prossimi 60 cm sotto forma di linea grafica per ogni misurazione. Un pixel corrisponde a circa un centimetro. Se si desidera un raggio di visualizzazione più ampio, è possibile regolare il programma del controller di conseguenza, ma è necessario tenere presente la lunghezza massima di 60 pixel.
Naturalmente, questo progetto pone solo le basi per le vostre estensioni e modifiche. Oltre alla scansione dell'ambiente, è possibile aggiungere altre funzioni; i pulsanti non assegnati dello shield controller sono disponibili qui.
Divertitevi a ricostruire :)






