Visualizzazione post con etichetta kit robot car. Mostra tutti i post
Visualizzazione post con etichetta kit robot car. Mostra tutti i post

domenica 18 marzo 2018

Robot Car con nodeMCU - Software








Questo e' il terzo e' ultimo post di una serie che descrive la realizzazione del progetto RobotCar con nodeMCU controllato da applicazione Android.

I post precedenti sono: RobotCar - Assemblaggio e RobotCar con nodeMCU

I questo post conclusivo descrivo e condivido il software per l'applicazione Andoird realizzato con AppInventor e lo scketch per il nodeMCU per il controllo del RobotCar.


RobotCar Android Controller


Siccome questo progetto e' rivolto per dei giovanissimi ho realizzato l'applicazione per Android con l'ottimo MIT App Inventor.

L'app Android e' molto semplice e' puo' essere estesa a piacere.
Ha la funzione principale di spiegare come controllare un dispositivo remoto con delle semplici chiamate HTTP GET.

Per i piu' esperti, dico subito che il meccanismo di comunicazione e' molto antiquato ed utilizza dei parametri nella URL come si faceva a meta' anni 90. 
Tuttavia, siccome e' orinetato a dei giovanissimi, ho scelto questa modalita' per renderla comprensibile.

Per chi realizza il progetto suggerisco di implementare un server REST. Tuttavia' sono solo dettagli.


Interfaccia Grafica






Come anticipato l'interfaccia grafica e' semplicissima. E' composta da 4 pulsanti che rappresentano le 4 direzioni di movimento del RobotCar.








Gli oggetti utilizzati sono i seguenti






Ho utilizzato un layout a tabella (5 righe e 5 colonne). Ho anche usato due label (senza testo) per ottenere uno spaziamento corretto dei pulsanti.

Per chi vuole usare l'app direttamente senza realizzarla in AppInventor ho messo il file APK sul mio GitHub [RobotCar - Progetto Completo]

Blocchi AppInventor




Il "codice" e' molto semplice come l'interfaccia.

Questa app presuppone che il RobotCar sia in ascolto all'indirizzo 192.168.10.10. Ovviamente potete cambiarlo con un indirizzo IP di vostro gradimento (il RobotCar crea un rete WiFI chiamata RoboCar-01).

Il codice fa si' che ad ogni pressione di un pulsante di controllo, una HTTP GET venga inviata al RobotCar con un parametro chiamato comado che puo' assumere un valore corrispondente alla direzione di movimento desiderata:
  • AVANTI
  • INDIETRO
  • DESTRA
  • SINISTRA
  • FERMO
Da notare che il comando FERMO, che fa immediatamente fermare il RobotCar, viene inviato quando il pulsante viene rilasciato.
Quindi il RobotCar si muove, nella direzione prescelta, finché' il pulsante rimane premuto.











RobotCar WebServer per nodeMCU


Il RobotCar e' controllato da un nodeMCU fissato sul suo telatio.
Ho implementato un semplice WebServer sul nodeMCU in modo da poter ricevere i comandi provenienti dall'app Android e da attuare il controllo sui motori.




I GPIO del nodeMCU da utilizzare sono definiti nelle linee 5 - 9. 

Il codice imposta il nodeMCU in modalita' AccessPoint e crea una rete WiFi chiamata RobotCar-01

Nella linea 43 configuro il webserver per eseguire la funzione muovi_robocar al ricevimento di un HTTP GET all'url: http://192.168.10.10/robocar

La funzione muovi_robocar  e' molto semplice e in funzione del parametro comando, letto dalla query HTTP, richiama al funzione di movimento del RobotCar relativa.

Ogni funzione di movimento del RobotCar, aziona i motori destro e sinistro in modo appropriato.


Test del RobotCar


Concludo questo progetto con il test del RobotCar









Robot Car con nodeMCU








Nel primo post della serie [qui], ho descritto come assemblare i vari componenti che formano il kit del robot car.

A questo punto il robot car ha la necessita' di essere controllato per potersi muovere.

In questo post descrivo i passi necessari per installare il cervello (un nodeMCU) ed il driver dei 2 motori CC collegati alle ruote.

Componenti Necessari


Per portare a termine i passi descritti in questo post sono necessari i seguenti componenti


nodeMCU








Il nodeMCU e' un ottima scelta in quanto associa al micro controllore anche il dispositivo WiFi che mi permette di controllare da remoto il RobotCar.


(Mini) BreadBoard da 170 fori






Per comodità' ho usato una mini breadboard con 170 punti di connessione.
E' possibile usare una più' comune breadboard da 400 punti senza particolari problemi

Sulla mini breadboard montero' il nodeMCU e realizzero' le poche connessioni necessarie per realizzare questo progetto.


Scheda driver motori L298N





Nel Kit e' inclusa la scheda di controllo dei motori in corrente continua. E' basata sull'integrato L298.

In questo post (L298N Driver Motori con Arduino) descrivo in dettaglio come si utilizza la scheda di controllo.









Filo e Cavetti di connessione






Gomma adesiva


Per fissare i vari componenti sul telaio del RobotCar, uso una gomma adesiva come questa











Passiamo ora all'assemblaggio dei componenti sul telaio del RobotCar.



Passo #1:  Saldatura alimentazione motori






I motori sono dotati di due terminali metallici su cui bisogna saldare un filo di alimentazione.

Inserisco un filo e ne ripiego leggermente l'estremità, quasi a formare un piccolo uncino.

Questo rende il collegamento più' solido e duraturo.










Ora con il saldatore ben caldo, applicoun po' di stagno in modo da saldare i fili di alimentazione al connettore metallico del motore.














Questo e' il risultato ottenuto.









Passo #2:  Fissaggio mini-breadboard al telaio


Applico un po' di gomma adesiva al fondo della mini-breadboard






Ora con una lieve pressione, faccio aderire la mini-breadboard al telaio del RobotCar.


Se la vostra breadboard e' dotata di adesivo sul fondo potete evitare l'uso della gomma adesiva











Passo #3:  Passaggio fili alimentazione motore


Faccio passare i fili di alimentazione dei motori nelle fessure presenti nel telaio del RobotCar come indicato in figura






Faccio passare i fili con delicatezza per evitare di staccarli dai motori.







Questo e' il risultato ottenuto.








Passo #4:  Montaggio nodeMCU su mini-breadboard


In questo passo, inserisco il nodeMCU sulla mini-breadboard in modo simmetrico, lasciando una fila libera per parte.







La inserisco tutta da un lato, in modo da lasciare due colonne libere sulla sinistra
















Passo #5:  Posizionamento scheda L298N


Infine posiziono, sul telaio del RobotCar, la scheda L298N, per il controllo dei motori.

Anche in questo caso mi aiuto con la gomma adesiva.








Passo #6:  Schema bread-board


Nelle due figure sotto, lo schema breadboard da realizzare.
















Passo #7:  Cablaggio circuito


Adesso, che tutti i componenti sono correttamente posizionati sul RobotCar, inizio a creare il circuito sulla mini-breadboard  usando dei cavetti DuPont (rainbow wire) 


Inizio connettendo il filo rosso (positivo) e quello nero (negativo), dal porta batterie alla bread-board come indicato in figura.





Adesso collego due piccoli spezzoni di filo, dalla scheda L298N alla breadboard come in figura.





Il filo blue va connesso al positivo della batteria, mentre il filo bianco al negativo.






Adesso collego i fili di alimentazione dei due motori alla scheda L298N come in figura.

L'ordine rosso-nero non e' cosi' importante, in quanto e' facilissimo modificare lo sketch in modo da far ruotare i motori nel verso corretto.












Ora collego l'alimentazione alla scheda nodeMCU. 

Come si vede in figura collego il polo negativo della batteria a GND sul nodeMCU.

Allo stesso modo, collego il polo positivo al pin Vin del nodeMCU.





Infine, collego i cavetti di controllo dei motori dal nodeMCU alla scheda L298N.

I collegamenti sono i seguenti:

Lato scheda L298N:

  • filo marrone: pin IN1 
  • filo giallo: pin IN2
  • filo verde: pin IN3
  • filo grigio: pin IN4





Lato scheda nodeMCU:
  • filo marrone: pin D0
  • filo giallo: pin D1
  • filo verde: pin D3
  • filo grigio: pin D4





Ed ecco il RobotCar completamente assemblato e con il circuito cablato in maniera corretta





Passi Successivi

Ora che il RobotCar e' completament5e assemblato e cablato posso concentrarmi sulla parte software.

Devo sviluppare due componenti:

  • applicazione per dispositivo mobile: uso l'ottimo AppInventor in quanto il progetto e' orientato a chi non sa' ancora programmare
  • sketch per nodeMCU che implementa un web server che controlla il movimento del RobotCar


Tratterò' l'argomento software in un post separato







mercoledì 2 agosto 2017

Robot Car - Pilotaggio via Scratch -

Questo post e' il quarto di una serie di post legati alla realizzazione e alla programmazione di un Robot Car





Nel primo post [Robot Car - Assemblaggio -] ho spiegato come assemblare il kit di montaggio del Robot Car che si puo' comprare online [qui]

Nel secondo post [Robot Car - Assemblaggio Driver dei Motori -] ho spiegato come realizzare un semplice driver per i motori collegati alle ruote del Robot Car






Nel terzo post [s2pi - Programmare Raspberry Pi usando Scratch 2.0] ho spiegato come tramite l'utilizzo di s2pi (da me sviluppato) sia possibile programmare il Raspberry Pi usando l'ambiente off-line Scratch 2.0




In questo posto spiego come far muovere il Robot Car tramite un semplice programma Scratch.


Pannello di Comando


L'interfaccia di pilotaggio del Robot Car e' molto semplice. Comprende 4 frecce per i movimenti in avanti e indietro e per le rotazioni a destra e sinistra.
Al cento delle 4 frecce si trova un pulsante che serve per arrestare il Robot Car in caso di necessita'

Per semplicita' ho usato degli sprite che sono presenti nella libreria di immagini inclusa in Scratch 2.0




Una volta premuta la bandierina verde per far inizare il programma, Robot Car rimane fermo in attesa di un comando. Il pilota facendo click con il mouse su una delle frecce invia il comando relativo di movimento al Robot Car che quindi si spostera' in avanti o indietro per 1 secondo, oppure ruotera verso destra o verso sinistra in funzione del comando ricevuto.


Programma Scratch


Di seguito il programma Scratch commentato.
Per semplicita' usiamo il costrutto dei messaggi disponibile in Scratch.

Per ogni freccia definiamo un semplice codice che invia un messaggio broadcast includendo la direzione di movimento.

Per la freccia in avanti definiamo il messaggio: avanti.
In maniera analoga per la freccia indietro definiamo il messaggio: indietro
Seguendo la stessa logica definiamo i messaggi per le frecce di rotazione














In questo modo ogni volta che il pilota, con il mouse, fa' click su una freccia un messaggio broadcast relativo viene inviato


Qui sotto vediamo il programma Scratch da assegnare allo sfondo.
La logica e' molto semplice:

All'avvio del programma inizializziamo i motori chiamati DX (destra) e SX(sinistra) andando ad impostare il numero di pin GPIO del Raspberry Pi che sono usati per controllare il motore. 

A questo punto il Robot Car e' pronto per muoversi e rimane in attesa di un comando.
Sempre nello script dello sfondo andiamo ad intercettare i messaggi broadcast inviati tramite il click su una delle frecce o del pulsante di stop.

Se il messaggio ricevuto e' avanti allora andiamo ad attivare sia il motore DX che il motore SX con la velocita' massima 0.99 (range utilizzabile 0.4 - 0.99) in direzione avanti. A questo punto il Robot Car inizia a muoversi in avanti. Dopo 1 secondo fermiamo entrambi i motori.

Stessa logica per tutti gli altri messaggi di direzione.

L'unica differenza e' che per i messaggi destra e sinistra solo uno dei due motori viene attivato, permettendo quindi al Robot Car di fare una rotazione verso la direzione voluta.

Per semplicita' ho anche definito un blocco Ferma_Motore in quanto viene utilizzato varie volte nel codice.





A questo punto non ci resta che far partire il programma e pilotare il Robot Car. :)







venerdì 28 luglio 2017

Robot Car - Assemblaggio Driver dei Motori -

Nel primo post della serie [qui] ho descritto come assemblare i vari componenti che formano il kit del robot car.

A questo punto il robot car ha la necessita' di essere controllato per potersi muovere.
In questo post descrivo i passi necessari per installare il cervello (un raspberry pi zero) ed il driver dei 2 motori CC collegati alle ruote.

Componenti Necessari


Per portare a termine i passi descritti in questo post sono necessari i seguenti componenti

Raspberry Pi Zero





Io uso un Raspberry pi zero per le ridotte dimensioni. Altre versioni del Raspberry Pi possono essere utilizzate per questo progetto senza particolari problemi.

Suggerisco se possibile l'utilizzo di un Raspberry Pi Zero W in quanto include a bordo il wifi senza la necessita' di dongle esterni.


(Mini) BreadBoard




Per comodita' ho usato una mini breadboard con 170 punti di connessione.
E' possibile usare una piu' comune breadboard da 400 punti senza particolari problemi



IC L293(D)




Per comodita' ho usato un integrato L293D. Se avete un L293 ancora meglio.


Filo e Cavetti di connessione







Passiamo ora all'assemblaggio e alla realizzazione del driver per i motori collegati alle ruote.



Passo 1:  Saldatura alimentazione motori






I motori sono dotati di due terminali metallici su cui bisogna saldare un filo di alimentazione.
Inseriamo un filo e ripieghiamo leggermente l'estremita' quasi a formare un piccolo uncino. Questo rende il collegamento piu' solido e duraturo.










Ora con il saldatore ben caldo applicate un po' di stagno in modo da saldare i fili di alimentazione al connettore metallico del motore.








Questo e' il risultato che si dovrebbe ottenere.





Passo 2:  Fissaggio Raspberry Pi Zero al telaio

Per eseguire questo passo,  oltre al Rapsberry Pi, c'e' bisogno di una vite e bulloncino (presenti nel kit RobotCar) e opzionalmente di un punto gomma adesiva.




Come si nota il Raspberry Pi e' dotato di 4 fori di ancoraggio. Noi ne useremo uno solo in questo post.







Qui indico con une freccia il foro su cui avvitare il Raspberry Pi





Dall'estremita' opposta, siccome non e' presente un foro nel telaio, applico un punto gomma adesivo per fissare meglio la scheda Raspberry Pi al telaio del RobotCar





Questo e' il risultato finale che si dovrebbe ottenere











Passo 3:  Applicazione mini Breaboard sul telaio





Ho rimosso la pellicola protettiva dal fondo della mini breaboard  e l'ho fissata sul telaio nello spazio disponibile tra il porta batterie e la scheda Raspberry Pi installata al passo precedente.




Passo 4:  Passaggio fili alimentazione motore


Faccio passare i fili di alimentazione dei motori nelle fessure presenti nel telaio del RobotCar come indicato in figura




Fate passare i fili con delicatezza onde evitare di staccarli dai motori.




Questo e' l'effetto finale che dovreste ottenere








Passo 5:  Montaggio IC L293

In questo passo ho inserito il circuito integrato L293D, a 16 pin, nella mini breadboard

Importantissimo notare il riferimento su un lato del chip (una mezza luna scanalata) e un cerchietto scanalato che indica il pin #1 come indicato in figura





Ho inserito con delicatezza l'integrato con il pin #1 in corrispondenza della linea 6 come indicato in figura.

Nota:

Alle volte risulta un po' difficile inserire l'integrato nella breadboard. Se capita cio' non insistere e non sforzare.
Consiglio di guardare bene i pin dell'integrato e di raddrizzarli in caso alcuno siano leggermente piegati.






Questo e' il risultato che si dovrebbe ottenere


Passo 6:  Cablaggio circuito driver per motori

Ho eseguito i cablaggi come indicato nelle figure qui sotto














Ora inserisco i fili di alimentazione del motore di sinistra




Ora inserisco i fili di alimentazione del motore destra



Ora inserisco il filo nero che esce dal porta batterie (negativo o massa)





Ora collego il pin #2 del Raspberry Pi (+5V) al pin #1 del L293D come indicato in figura











Ora inserisco il filo rosso che esce dal porta batterie (positivo) ed aggiungo un filo dal piedino #12 del L293 a massa (basso a destra sulla mini breadboard)






Ora porto a massa il pin # 5 del L293D






Ora collego i pin #35 e #37 del Raspberry Pi (GPIO 19 e GPIO 26) alla breadboard come indicato in figura






Ora collego i pin #38 e #40 del Raspberry Pi (GPIO 20 e GPIO 21) alla breadboard come indicato in figura






Ora collego i pin #39 (GND o massa)alla breadboard come indicato in figura







Questo e' il risultato finale che dovreste ottenere










Conclusioni

Al termine di questo secondo post abbiamo montato sul telaio il cervello del RobotCar e cioe' il Raspberry Pi Zero

Abbiamo anche creato, utilizzando un unico integrato  L293, il driver per i due motori. Questo ci permette di pilotare ogni singolo motore e farlo girare in avanti e all'indietro a differenti velocita', quindi permettendo al RobotCar di muoversi andando avanti e indietro e di ruotare a destra e sinistra.

Nei prossimi post trattero' la parte software di controllo.

Come al solito commenti costruttivi sono ben accetti