Guide e TutorialIngegneria

Progettiamo un robot evita ostacoli (parte 3)

In quest’ultima parte procederemo con la costruzione e programmazione del robot con Arduino.

Costruzione robot evita ostacoli

Iniziamo la costruzione del robot evita ostacoli procedendo dall’assemblaggio del telaio e delle ruote come da istruzioni contenute nella confezione (qualsiasi kit ne è provvisto). A montaggio ultimato, il vostro telaio si presenterà come quello di fig. 6 o 14.

Continuiamo cominciando ad assemblare il circuito elettrico. Una posizione ottimale per posizionare i componenti sul telaio viene mostrata in fig. 14.

Figura 14

Il primo passo è la creazione della pista GND sulla breadboard e il posizionamento del ponte H sulla stessa. Si procede poi alla messa a terra dello stesso secondo lo schema di fig. 15.

Figura 16

Dopodiché si collega alla pista 5V, creata su un’altra fila della breadboard (possibilmente dalla parte opposta alla GND, come mostrato nella fig. 16), del ponte H. Dalla figura sono state tolte le messe a terra per maggiore chiarezza.
Si procede anche alla connessione dei quattro cavi (verdi in fig.16) preposti al comando dei motori.

Figura 16

Si collegano poi i motori come in fig. 17, tenendo a mente fig. 9 e che per ogni motore c’è un pin associato alla direzione positiva e uno a quella negativa.

Figura 17

Colleghiamo ora uno dei led, aggiunti per completezza con gli esercizi prima esposti, che si accenderà quando la macchina non ha ostacoli davanti. Entrambi i led che verranno montati sono facoltativi e facilmente escludibili dal progetto. Si faccia riferimento a fig. 18.

Figura 18

Il collegamento del sensore ultrasuoni richiede l’utilizzo di entrambe le breadboard: montiamo il sensore sulla seconda ma colleghiamo VCC e GND dello stesso alle piste della prima breadboard (come in fig. 19). Gli altri due pin del sensore, ECHO e TRIG, vanno montati come in fig. 19.

Figura 19

Il led rosso, che sarà montato sulla seconda breadboard, si collega esattamente come il verde, scegliendo il pin su Arduino come in fig. 20.

Ora non resterebbe che collegare le batterie come in fig. 20; tuttavia, non essendo ancora caricato il codice sulla scheda, il robot si accenderebbe senza compiere nessuna azione.
Una seconda soluzione, che si è dimostrata più stabile dell’utilizzo delle batterie, è quella di alimentare il robot con una power bank, (quelle usate per la ricarica dei cellulare vanno bene), la quale si può direttamente collegare alla porta USB di Arduino e fornisce la tensione giusta (5V). Per mezzo di alcuni sensori e componenti si è dimostrato necessario l’utilizzo congiunto di batterie e power bank, a seconda delle specifiche.

Figura 20

Codice

Si presenta qui il codice diviso in varie sezioni, per rendere chiaro il funzionamento di ognuna.

Nella prima parte definiamo tutte le variabili che si riferiscono ai pin cui sono collegati i componenti: i due led, le due direzioni per i motori, il sensore ultrasuoni. Si definiscono anche le due variabili che ci consentiranno di calcolare la distanza: duration e distance. Le prime dovranno essere di tipo const int, poiché il loro valore non deve cambiare, le seconde semplicemente int.

Nella seconda parte scriviamo il setup(), dichiarando tutte i pin come OUTPUT<c/ode> ad eccezione del pin echo, che sarà un pin di input. Si aggiunge una riga che stabilisce un collegamento seriale tra PC e scheda, utile in fase di debugging - può essere omessa una volta che ci si è accertati del corretto funzionamento del robot.

Si apre il loop() andando ad attivare il sensore ultrasuoni: si invia un segnale con il primo comando, si attende un millesimo di secondo e si interrompe detto segnale; col pin di echo il sensore lo percepisce ed acquisisce l’informazione sul tempo passato.
Si calcola poi la distanza come mostrato negli esercizi sul sensore ultrasuoni. In ultimo si può decidere di stampare su Monitor Seriale il valore di distanza.

Si procede utilizzando le istruzioni condizionali per differenziare il comportamento del robot: se la distanza dall’ostacolo è minore di un valore prefissato (qua impostato pari a 30 cm), si dovrà far girare la macchina. L’operazione di sterzatura viene implementata andando ad attivare le ruote con una direzione l’una opposta all’altra. Ovviamente se invece la distanza dagli ostacoli è maggiore della soglia, il robot deve procedere in avanti.
Si impostano anche i led in modo che si accendano a seconda di uno o dell’altro caso.
Dopo la curva si può impostare un piccolo delay per evitare che tra una lettura e l’altra della distanza il robot riprenda ad andare dritto anche se non ha terminato la sterzata.

Qui viene mostrato il codice completo.

Crediti

La seguente guida è stata realizzata da Gruppo Efesto ed è una trascrizione ed impaginazione delle slides di supporto utilizzate nel corso delle lezioni tenute da membri del Gruppo Efesto nel corso del 2017 presso le scuole superiori A. Volta e I. Newton di Roma.

Riferimenti

    1. Adrirobot. Modulo bluetooth transceiver host slave/master tipo hc-05. http://www.adrirobot.it/Modulo_hc-05/modulo_hc-05.htm
    2. Arduino.cc. How to spot a counterfeit Arduino. https://www.arduino.cc/en/Products/Counterfeit
    3. Arduino.cc. Un po’ di storia. https://playground.arduino.cc/Italiano/StoriaDiArduino
    4. Hernando Barragàn. La storia non raccontata di Arduino. https://arduinohistory.github.io/it.html.
    5. Elec. Freaks. Hc sr-04 datasheet. http://www.micropik.com/PDF/HCSR04.pdf.
    6. IlSole24Ore. Arduino, ecco le ragioni dello scontro. Quel marchio conteso tra Italia e Usa. http://www.ilsole24ore.com/art/tecnologie/2015-02-22/arduino-ecco-ragioni-scontro-quel-marchio-conteso-italia-e-usa-154735.shtml?uuid=ABlLezyC&refresh_ce=1
    7. Processing. https://processing.org/.
    8. 10 anni di Arduino. https://www.wired.it/gadget/computer/2014/03/28/10-anni-di-arduino/

 

Salvatore Campolo
Laureato in Ingegneria Meccanica, appassionato di motori e musica. Mi piace scoprire la ragione scientifica delle cose.

    You may also like

    Leave a reply

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *