Progettiamo un robot evita ostacoli (parte 1)
Introduzione
Cos’è Arduino?
Arduino è una piattaforma di prototipazione open-source a basso costo, realizzata sotto il marchio Arduino.cc. La versatilità di Arduino è una delle caratteristiche principali che ne consente un vasto impiego in diversi settori; è adatta sia per progetti amatoriali che per scopi più tecnici ed avanzati ed è spesso utilizzata per la costruzione di stampanti 3D, macchine CNC, droni.
Storia
La storia di Arduino ha inizio nel 2005 [3], ad Ivrea, dalle menti di Massimo Banzi, Tom Igoe, David Cuartielles, Gianluca Martino e David Mellis. Lo scopo era di rendere disponibile agli studenti di Interaction design, campo nel quale anche i fondatori erano impegnati, una scheda facile da utilizzare, a basso costo e che consentisse la rapida prototipazione di dispositivi, in modo da far fronte ai problemi del preesistente mercato di controllori elettronici caratterizzato da alti costi e scarso utilizzo di interfacce controllore/utente.
Inizialmente la scheda veniva costruita da società esterne al progetto originale, che acquistavano da Arduino la licenza ad utilizzare il marchio ufficiale e il blueprint permettendo così ad Arduino di percepire delle royalties. Una delle compagnie produttrici era la Smart Projects di Gianluca Martino.
Gli altri quattro fondatori e quest’ultimo furono successivamente protagonisti di una controversia [6] in merito alla registrazione del marchio in Italia e negli Stati Uniti che si è risolta solo negli ultimi anni.
Sebbene le schede ufficiali vengano prodotte con le modalità appena descritte, il circuito elettrico è stato reso open-source, dando così la possibilità a tutti di costruire cloni di Arduino e ad altri produttori di immettere sul mercato schede strutturalmente identiche ma prive del marchio Arduino.cc, e di conseguenza senza garanzia di qualità [2].
La diffusione di Arduino è ad oggi planetaria, con milioni di schede vendute e decine di modelli disponibili a seconda delle esigenze dei makers. Molte sono anche le communities nate tra gli utenti, volte allo scambio di conoscenze, idee, progetti ed aiuto.
Come si usa Arduino
Non esiste, in generale, un’unica modalità per poter utilizzare la piattaforma Arduino ma occorrono alcuni elementi essenziali, almeno in fase di prototipazione:
- la scheda;
- i jumper wires, o cavi Dupont;
- un cavo USB;
- L‘IDE.
Questi elementi saranno comuni ad ogni progetto.
Solitamente i collegamenti tra i vari componenti non richiedono saldature. Per saper usare con efficacia Arduino è utile conoscere delle basi di elettrotecnica che ci aiutano a creare dei circuiti ben bilanciati, riducendo i rischi di danneggiamento sia per i componenti che per la scheda; almeno per i progetti più semplici, per principianti, è sufficiente fare attenzione a non creare cortocircuiti, collegare direttamente alimentazione e massa a terra, ecc. Per circuiti con pochi carichi la corrente che la scheda eroga ed il voltaggio di 5V risultano adeguati senza aggiunta di componenti come transistor, trasformatori e resistori.
Il codice
I vari componenti collegati tra loro e con la scheda Arduino non possono eseguire nessuna operazione se questa non viene prima programmata. Il controllore è il componente del circuito predisposto a questo compito.
L’utente può programmare la scheda nell’IDE dedicato in qualsiasi editor di testo, (anche se l’IDE è consigliato in quanto assiste la programmazione attraverso autoindentazione, funzioni predefinite, rilevatore di errori e compilatore) in un linguaggio derivato di C chiamato Wiring [4], a sua volta basato su Processing [7].
Si rimanda a questa guida per le principali funzioni che si utilizzano nella scrittura di programmi (chiamati sketch). Uno sketch Arduino è sempre composto da due parti, come si può vedere sotto, chiamate setup()
e loop()
: la prima viene eseguita una sola volta dopo l’avviamento della scheda (si impostano le comunicazioni tra scheda stessa e componenti, lo stato di INPUT o OUTPUT di alcuni di essi, l’accesso ai registri ecc.), la seconda contiene tutte le istruzioni che si desidera far eseguire in ciclo in maniera continuativa.
Ecco come si presenta il più semplice dei programmi di Arduino, comunemente chiamato ”Blink” (richiede solo la scheda in quanto il pin 13 ha un led incorporato):
E` consigliato leggere attentamente la guida sopra linkata se non si è mai programmata una scheda Arduino e non si conoscono quindi le funzioni principalmente utilizzate. Fornisce anche dei richiami di programmazione come istruzioni condizionali ed istruzioni di ciclo.
La breadboard
Per poter utilizzare i componenti senza saldature occorre una breadboard (fig. 3), una piastra di materiale plastico su cui sono praticati dei fori dove vengono posizionati i pin dei componenti e dei cavi. I collegamenti elettrici vengono realizzati per contatto tra le parti metalliche dei pin e dell’interno della breadboard tenendo conto dei collegamenti mostrati in fig. 4.
Ne esistono di svariate dimensioni e forme ma tutte hanno le stesse caratteristiche, la differenza sta nel numero effettivo di punti. E` buona norma non utilizzare le breadboard per circuiti ad alta tensione o ad alta frequenza nonchè quelli caratterizzati da cablaggi complessi, per i quali sono più opportune le schede forate. E` possibile che dopo molti utilizzi i contatti si logorino e la breadboard perda la sua funzionalità. Nel nostro progetto utilizzeremo due breadboard di quelle mostrate in fig. 3.
Cenni di elettrotecnica
E’ possibile, consultando i datasheet dei vari componenti, calcolare i resistori (o altri componenti a seconda del funzionamento) da inserire nei circuiti per effettuare un buon bilanciamento di potenza e proteggere i componenti stessi da danni a causa di malfunzionamenti.
Si veda esempio con un led (fig. 5). Se la tensione che passa ai capi di un elemento è troppo alta occorre limitare la corrente con una resistenza. Avendo V{cc}=5V (tensione con cui viene polarizzato il LED), V{f}=1.7V (tensione ai capi del LED) e I{f}=15mA (corrente max che il LED può supportare) si giunge al valore della resistenza risolvendo l’equazione di maglia:
Componenti
Ecco un elenco dei componenti che andremo ad utilizzare, oltre ai già citati Arduino Uno, led e breadboard.
Telaio con riduttori per motori DC
Questo semplice telaio con due ruote motrici e una di supporto è ottimo per imparare le basi del comando di robot Arduino.
Il motore DC (DC = direct current = corrente continua) è uno dei device più utilizzati con Arduino per mettere in rotazione oggetti (ruote, palette, ventole ecc). Il funzionamento di un motore DC è basato sull’interazione tra alcune bobine percorse da corrente continua e un campo magnetico generato da un magnete permanente: quest’ultimo induce una forza elettromotrice nelle prime che iniziano a ruotare. Esistono diverse soluzioni costruttive a seconda degli utilizzi e delle potenze richieste: per i nostri scopi sono più che sufficienti i motori che vengono utilizzati nelle comuni macchine radiocomandate.
Normalmente i motori DC miniaturizzati per scopo di modellismo (come quelli qui presentati, fig. 7) sono in grado di ruotare a delle velocità intorno ai 10000 rpm. Vale la seguente relazione, detta P la potenza (che è funzione di tensione ai capi degli avvolgimenti e corrente che scorre in essi), n il numero di giri e T la coppia motrice disponibile sull’albero:
Le potenze sviluppate da questi motori sono generalmente basse, quindi si capisce come anche T , che è ciò che dà la spinta necessaria a muovere il robot sarà una quantità piccola e spesso insufficiente.
Si inserisce quindi tra motore e ruota un riduttore che, attraverso una serie di ingranaggi (ruote dentate di plastica, per queste applicazioni), riduce la velocità di rotazione delle ruote lasciando la potenza praticamente (si dovrebbero considerare i rendimenti) inalterata e aumentando quindi la coppia disponibile.
Ponte H L293d
Il ponte H (eng: H-bridge, fig. 8) è un circuito integrato che serve per controllare due motori tramite schede esterne (ad esempio Arduino). Mentre un motore DC direttamente collegato ad Arduino potrebbe soltanto essere messo in rotazione alla velocità massima (o più basse facendo passare meno corrente: in che modo?), il ponte H è progettato per poter fornire al motore la corrente nel modo opportuno per ottenere la direzione e la velocità richiesta.
Si tenga a mente lo schema elettrico mostrato in fig. 9 che evidenzia le uscite (in inglese pinout) del componente.
Sensore ultrasuoni HC SR-04
Il sensore ultrasuoni che utilizzeremo sfrutta il principio di funzionamento dei radar o dei sonar: invia un segnale non udibile e registra il tempo di percorrenza tra andata e ritorno ricavando, in questo caso, la distanza tra il veicolo e l’ostacolo.
Si può leggere nella scheda tecnica [5] il ciclo di lavoro di questo dispositivo nonché alcuni parametri elettrici interessanti.
Nella prossima parte saranno proposti dei veloci esercizi per capire il funzionamento dei componenti che andranno a costituire il robot e la loro corretta programmazione.
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
-
- Pixabay, Arduino.
- Arduino.cc. How to spot a counterfeit Arduino. https://www.arduino.cc/en/Products/Counterfeit
- Arduino.cc. Un po’ di storia. https://playground.arduino.cc/Italiano/StoriaDiArduino
- Hernando Barragàn. La storia non raccontata di Arduino. https://arduinohistory.github.io/it.html.
- Elec. Freaks. Hc sr-04 datasheet. http://www.micropik.com/PDF/HCSR04.pdf.
- 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
- Processing. https://processing.org/.
- 10 anni di Arduino. https://www.wired.it/gadget/computer/2014/03/28/10-anni-di-arduino/
Con un sensore infrarosso Sharp cambia qualcosa riguardo la programmazione?
Salve, si qualcosina cambia! Nel caso in cui si voglia usare il sensore di distanza infrarosso Sharp, bisogna innanzitutto decidere quale acquistare, vanno in base alla distanza di misurazione: 30cm, 80cm, 150cm. Il sensore ha tre piedini: 5v, GND e dati. Collegati i primi due, il terzo va ad un pin analogico e nel codice andranno fatte le seguenti modifiche: vanno tolte tutte le righe di codice del calcolo della distanza tramite sensore ad ultrasuoni, dichiarata una variabile int distance = 0; e una int pinSensore = numeropin; prima del setup (numeropin sarà il numero del piedino al quale si decide di collegare il sensore). In quest’ultimo va dichiarata la tipologia di pin: pinMode(pinSensore, INPUT); e infine nel loop va usata la variabile distance cosi: distance = analogRead(pinSensore);