Che cos`è Arduino?

Transcript

Che cos`è Arduino?
Che cos'è Arduino?
Arduino è una piattaforma open-source utilizzata per la
costruzione di progetti di elettronica e automazione.
Arduino consiste in una scheda fisica programmabile con
micro-controllore e di una parte software, o IDE
(Integrated Development Environment), che eseguito sul
computer, viene usato per scrivere e caricare codice
informatico in linguaggio “C” nella scheda fisica.
La piattaforma Arduino è diventata molto popolare per chi
inizia ad apprendere le basi dell'elettronica. Ogni volta che
si scrive un nuovo codice, questo può essere caricato sulla
scheda fisica semplicemente utilizzando un cavo USB.
Arduino ha una forma standard che permette a case
produttrici di componenti elettronici di fornire delle
espansioni di qualsiasi tipo in modo da aumentare le
possibilità di gestione di INPUT e OUTPUT.
ARDUINO UNO
ARDUINO IDE
Con queste poche righe di codice è possibile far
lampeggiare un LED connesso ad Arduino. All'inizio questo
linguaggio può risultare complesso o di poca logica ma
basta poco tempo per capire come funziona la
programmazione e realizzare progetti complessi con
semplici combinazioni di istruzioni. Tutto sta nel GIOCARE
con questi strumenti.
Arduino è stato progettato per artisti, designer, hobbisti,
hacker, neofiti e chiunque sia interessato a creare oggetti o
ambienti interattivi. Può interagire con pulsanti, LED,
motori, altoparlanti, unità GPS, fotocamere, internet, e
anche il vostro smartphone o il vostro televisore. Questa
flessibilità combinata ad un software gratuito ha portato ad
una vasta comunità di utenti che hanno contribuito a
sviluppare codice open-source per creare progetti di
qualsiasi tipo.
Da un robot o una piastra elettrica per riscaldare le mani a
un guanto Dungeons and Dragons, Arduino può essere
usato come il cervello dietro quasi tutti i progetti di
elettronica.
GUANTO DADI DUNGEONS AND DRAGONS
E questa è solo la punta dell'iceberg. In internet sono nate
comunità e siti interamente dedicati a progetti Arduino.
Basta fare una piccola ricerca per avere una lista quasi
infinita di guide, tutorial e video su come usare Arduino.
Alcuni di questi sono Instructables, Bildr, Arduino
Playground, EMC Elettronica.
Ci sono molte varietà di schede Arduino che possono
essere utilizzate per scopi diversi. Alcune possono essere
differenti da quella sottostante, ma la maggior parte delle
schede Arduino hanno questi componenti in comune:
Alimentazione (USB / Barrel Jack)
Ogni scheda Arduino ha bisogno di essere collegata ad una
fonte di alimentazione. Arduino UNO può essere alimentato
da un cavo USB (1) proveniente dal computer o una presa
a muro (da 6 a 12 Volt massimo) che termina con un jack
Barrel (2).
Il collegamento USB è anche il modo con cui caricare il
codice nella scheda Arduino.
Pins (5V, 3.3V, GND, analogico, digitale, PWM, AREF)
I pin sulla scheda sono i connettori in cui inserire i fili per
costruire un circuito. Di solito sono di plastica e consentono
di collegare un solo cavo alla volta. Arduino ha diversi tipi
di pin, ciascuno dei quali è segnato sul bordo interno e
utilizzati per funzioni diverse.
• G N D ( 3 ) : Abbreviazione di 'GROUND', 'TERRA',
'NEGATIVO', o anche 'MASSA'. Ci sono diversi perni
GND su Arduino, ognuno dei quali può essere utilizzato
per mettere a terra il circuito.
• (4) 5V e 3.3V (5): Come si può immaginare, questi pin
forniscono 5 volt e 3,3 volt. La maggior parte dei
componenti semplici utilizzati con Arduino utilizzano
3.3 volt o 5 volt massimo.
• Analogico (6): L'area dei pins sotto l'etichetta 'Analog
In' (da A0 ad A5) sono ingressi Analogici. Questi pin
possono leggere il segnale da un sensore analogico
(come un sensore di temperatura ) e convertirlo in un
valore digitale che possiamo leggere ed usare nel
programma.
• Digitale (7): Nella parte opposta ai pin Analogici, ci sono
i pin Digitali (da 0 a 13). Questi pin possono essere
utilizzati sia per l'ingresso digitale (per verificare se un
pulsante è stato premuto ad esempio) e un'uscita
digitale (come l'alimentazione di un LED).
• PWM (8): La tilde (~) accanto ad alcuni pin digitali (3, 5,
6, 9, 10, e 11) indica la possibilità di usare tali uscite
come segnali Pulse-Width Modulation (PWM).
• AREF (9): acronimo di riferimento Analogico. La maggior
parte delle volte questo pin non è necessario. A volte è
utilizzato per impostare una tensione di riferimento
esterna (tra 0 e 5 Volt) come il limite superiore per i
pin di ingresso analogico.
Pulsante di ripristino
La scheda Arduino ha un pulsante di reset (10).
Premendolo si collegherà temporaneamente il pin di reset
a massa e quindi sarà possibile riavviare l'esecuzione di
qualsiasi codice caricato in Arduino. Questo può essere
molto utile se il codice non viene ripetuto o per operazioni
di DEBUG.
Indicatore LED di alimentazione
Appena sotto a destra della parola "UNO" sul circuito, c'è
un LED accanto alla parola 'ON' (11) molto piccola. Questo
LED dovrebbe accendersi ogni volta che si collega Arduino
ad una fonte di alimentazione. Se questa luce non si
accende, c'è una buona probabilità che qualcosa non va.
LED RX TX
TX è l'abbreviazione di trasmissione, RX è l'abbreviazione
di ricezione. Questi segni appaiono un po ovunque in
e le ttr onic a p e r ind ic ar e i p i n r e s p ons ab i l i d e l l a
comunicazione seriale. Nel nostro caso, ci sono due posti
su Arduino UNO dove troviamo la scritta TX e RX, sui pin
Digitali 0 e 1 e accanto ai LED di segnalazione TX e RX
(12). Questi LED si attivano ogni volta che Arduino sta
ricevendo o trasmettendo dati (come quando stiamo
caricando un nuovo programma sulla scheda tramite il
software Arduino IDE).
CI principale
La cosa nera con tutte le gambe in metallo è un IC, ovvero
un Circuito Integrato (13). Pensate a questo come il
cervello vero e proprio di Arduino. Ultimamente è stato
sostituito da un circuito SMD molto più piccolo di
dimensioni. Il principale IC sulle schede Arduino è della
linea Atmega, parte della società ATMEL. E' necessario
sapere il tipo di IC che state utilizzando poiché nel
momento della programmazione dovrete scegliere il tipo di
processore in uso (Board) prima di inviare il codice che
avete scritto alla scheda Arduino.
Regolatore di tensione
Il regolatore di tensione (14), in realtà non è qualcosa che
interagisce con Arduino, ma è utile sapere che fa
esattamente quello che dice, ovvero che controlla e regola
la quantità di tensione che viene immessa nella scheda
Arduino e quindi trasforma la tensione in ingresso da 6-12
volt a 5 volt.
La famiglia Arduino
Ci sono diverse schede Arduino, ciascuna con differenti
capacità. Avere un hardware open-source significa che è
possibile modificare e/o produrre espansioni per schede
Arduino che forniscono più funzionalità rispetto alle
comuni. Ne elenco qualcuna come esempio.
Arduino Uno (R3)
L'Uno è un'ottima scelta per il principiante. Ha tutto il
necessario per iniziare. Dispone di 14 pin digitali di input /
output (di cui 6 possono essere utilizzati come uscite
PWM), 6 ingressi analogici, una connessione USB, un jack
di alimentazione, un pulsante di reset e contiene tutto il
necessario per supportare il proprio micro-controllore.
Basta collegarla ad un computer con un cavo USB o
alimentarla con un adattatore o una batteria per iniziare.
LilyPad Arduino
LilyPad è una scheda Arduino sviluppata su una tecnologia
e-textiles ovvero indossabile (creata da Leah Buechley).
Ogni LilyPad è stato progettato con larghi connettori su una
base piatta e piccola per consentire all'utente finale di
poter cucire la scheda su abiti con filo conduttivo. LilyPad
ha anche una propria famiglia di schede di ingresso, di
uscita, di tensione, e dei sensori che sono stati costruiti
appositamente per e-textiles. Questi componenti sono
anche lavabili!
Redboard
Redboard può essere programmata tramite un cavo USB
mini-B. E' possibile lavorare su Windows 8 senza dover
modificare le impostazioni di sicurezza. E' più stabile grazie
alla porta USB/FTDI, in più è completamente piatta sul
retro, rendendola più facile da incorporare nei vari progetti.
Basta collegare la scheda, selezionare "Arduino UNO" dal
menu di Schede di Arduino IDE per poter caricare il codice.
È possibile alimentare la scheda Redboard via USB o
tramite la presa a jack Barrel. Il regolatore di potenza è in
grado di gestire tensioni da 7 a 15VDC.
Arduino Mega (R3)
Arduino Mega è il fratello maggiore di Arduino UNO. Ha un
sacco (54!) di Input/Output digitali (14 possono essere
utilizzati come uscite PWM), 16 ingressi analogici, una
connessione USB, un jack di alimentazione, e un pulsante
di reset. Il gran numero di pin rendono questa scheda
molto utile per progetti che richiedono molti ingressi digitali
e/o uscite.
Arduino Leonardo
Arduino Leonardo è la prima scheda di programmazione di
Arduino ad utilizzare un micro-controllore con USB
incorporato. Ciò significa che può essere più economico e
più veloce. Inoltre, poiché la scheda gestisce direttamente
l'USB, sono disponibili diverse librerie di codice che
consentono di emulare una tastiera del computer, mouse, e
altre periferiche.
La famiglia allargata
La sola scheda Arduino è molto “carina” di per se ma per
poter creare dei progetti di un certo livello o utilità c'è
bisogno d'altro. Ed è qui che entrano in campo I SENSORI
di base e gli SHIELDS (scudi o meglio estensioni) , due
degli strumenti più pratici da utilizzare per dar vita a veri e
propri progetti.
Sensori
Con qualche semplice codice, Arduino può controllare e
interagire con una vasta gamma di sensori, componenti
che possono misurare la luce, la temperatura, il grado di
flessione, la pressione, la vicinanza, l'accelerazione, il
monossido di carbonio, la radioattività, l'umidità, la
pressione atmosferica, e molti altri.
Shields
Inoltre, ci sono queste schede chiamate shield. Sono
schede pre-costruite che si adattano sopra alla scheda
Arduino e forniscono ulteriori funzionalità. Ad esempio ci
sono shield per il controllo di motori, di connessione a
internet (ethernet), che forniscono comunicazioni cellulari o
wireless, che controllano uno schermo LCD, un touch
screen, e molto altro.
Installazione Software e 'Hello World'
Per iniziare praticamente ad usare Arduino dobbiamo
scaricare il software dal sito http://arduino.cc/en/Main/Software a
seconda del sistema operativo che vogliamo usare. In
questa guida selezionerò il pacchetto per windows poiché è
il sistema operativo più usato. Una volta scaricato l'installer
.exe eseguiamolo e confermiamo il termine l'installazione.
Fatto ciò troveremo sul desktop o nel menu Avvio il
collegamento al programma Arduino. Facciamolo partire
cliccandoci sopra.
Questa è la schermata principale di Arduino. Come potete
vedere non è altro che un editor di testo, un blocco note
dove poter scrivere il codice che poi sarà convertito in
eseguibile per il processore IC della scheda Arduino. In
ogni programma destinato ad essere compilato ci sono
obbligatoriamente dei TAG da inserire. Questi TAG
definiscono delle variabili e delle configurazioni che
serviranno per eseguire il programma stesso.
Il primo TAG che troviamo è la funzione “setup”. In
linguaggio C ogni funzione deve avere il tipo di dato
ritornato e degli argomenti. In questo caso la funzione
setup non ritorna nessun dato ne ha argomenti necessari,
perciò sarà definita nel modo seguente:
void setup() {
}
il tipo “void” specifica al compilatore che la funzione setup
non ritorna nessun valore o dato. Le parentesi tonde ()
senza nessun valore all'interno, specificano al compilatore
che la funzione setup non ha argomenti. Le parentesi
graffe {} delimitano l'inizio e la fine del codice che
permette la configurazione base del programma. In questo
spazio infatti dovremo inizializzare e quindi informare il
compilatore che useremo alcuni tipi di PIN della scheda
Arduino come entrate, altri PIN come uscite, che vogliamo
utilizzare il monitor Seriale e a che velocità impostare la
comunicazione, e/o altre cose necessarie al corretto
funzionamento del programma che seguirà. Da notare che
le operazioni e istruzioni eseguite all'interno della funzione
setup (all'interno delle parentesi graffe) saranno eseguite
una volta sola all'accensione della scheda Arduino.
Il secondo ed ultimo TAG obbligatorio è la funzione “loop”.
Anche in questo caso dovremo informare il compilatore che
non ci serve ne un ritorno di dato o valore, ne argomenti.
void loop() {
}
In questa funzione, all'interno delle parentesi graffe {},
inseriremo le operazioni e le istruzioni che la scheda
Arduino eseguirà in ciclo (loop) finche non staccheremo
l'alimentazione. Tutto ciò che compare all'interno di questa
funzione ha un ciclo di vita infinito, a meno che
diversamente voluto, (ad esempio un input da tastiera o da
seriale). Detto questo il nostro IDE Arduino risulterà in
questo modo:
In questo esempio faremo accendere e spegnere un led
d i r e t t a m e n t e c o n n e s s o a l l a s c h e d a A r d u i n o. L a
configurazione Hardware da usare è la seguente.
In questa immagine vediamo una scheda Arduino (in
questo caso un Arduino Duemilanove ma va bene qualsiasi
altra scheda) e un led rosso a 5v. I led hanno un polo
positivo (anodo) e uno negativo (catodo). Per identificare il
catodo si fa riferimento dalla “gamba” più corta, viceversa
l'anodo è identificato con la “gamba” più lunga.
Poiché vogliamo accendere e spegnere questo led tramite
Arduino connetteremo il catodo su un pin GND quindi
Massa o Negativo, mentre l'anodo del led al pin 13 come
da immagine (ma posso connetterlo anche ai pin numerati
diversamente 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12). Fatto
questo dobbiamo dire al compilatore di usare il pin 13
come OUTPUT perché vogliamo far uscire tramite questo
pin la tensione a 5v in modo da accendere il led.
L'istruzione per impostare un pin in modalità di uscita
( O U T P U T ) è pinMode(). In questo caso la funzione
pinMode() dovrà obbligatoriamente avere un argomento
(tra parentesi tonde) dove inserire il numero del pin che si
vuole impostare e un secondo argomento che identifica il
tipo di funzione del pin (INPUT o OUTPUT). In questo caso
quindi l'istruzione finale sarà:
pinMode(13, OUTPUT);
Ogni istruzione è terminata con il punto e virgola “;” e
poiché è un'istruzione di inizializzazione, va inserita nella
funzione setup().
void setup() {
pinMode(13, OUTPUT);
}
Adesso la scheda Arduino saprà che vogliamo usare il pin
13 come OUTPUT quindi possiamo andare nella funzione
loop ed inserire l'istruzione per accendere fisicamente il
led. L'istruzione per alimentare un pin a 5v è digitalWrite().
Come primo argomento necessita di sapere su quale pin
andare ad impostare la tensione di 5v e come secondo
argomento, di sapere se far passare tale tensione (HIGH o
anche 1) o interromperla (LOW o anche 0).
L'istruzione nel nostro caso sarà:
digitalWrite(13, HIGH);
Che inclusa nella funzione loop() diventerà:
void loop() {
digitalWrite(13, HIGH);
}
Semplice no?!
Una volta finito di scrivere il codice, connettiamo Arduino al
computer tramite cavo USB, se non è stato riconosciuto dal
sistema operativo, selezioniamo il driver contenuto nella
cartella di installazione di Arduino (quasi sempre
c:\programmi\Arduino\driver). Dopodiché selezioniamo la
scheda Arduino che stiamo usando andando nel sottomenu “Board” del menu “Tools”:
Selezioniamo la porta alla quale è connessa la scheda
Arduino andando nel sotto-menu “Serial Port” del menu
“Tools”:
Ed infine inviamo il programma ad Arduino tramite il menu
“File” e cliccando su “Upload”. In pochi secondi, se non
abbiamo commesso errori nella scrittura del codice, il led
sulla scheda si accenderà, confermandoci che il codice che
abbiamo scritto è stato eseguito. Ma non abbiamo finito,
per poter far lampeggiare un led dobbiamo anche poterlo
spegnere una volta acceso, quindi dovremo usare la stessa
istruzione precedente per accendere il led al pin 13 ma
inviando come secondo argomento il valore LOW o 0
(zero). Quindi avremo queste istruzioni eseguite in ciclo
infinito:
void loop() {
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
}
Una volta fatto, invieremo di nuovo il codice nella scheda
(UPLOAD). Ma qualcosa non va, il led non si spegne,
rimane sempre acceso. Questo perché stiamo ragionando
senza tener presente la velocità del processore della
scheda Arduino. Il processore esegue le istruzioni
contenute nella funzione loop(), circa 490 volte al secondo.
La vista umana non riesce a vedere così velocemente
questo comportamento, quindi dovremo rallentare
l'esecuzione del ciclo. Per farlo useremo un'istruzione di
attesa, che dice al processore di “ASPETTARE” un tempo
che indicherò nell'argomento di tale funzione ovvero la
funzione delay(). Questa funzione accetta necessariamente
come argomento unico un valore in millisecondi, perciò
quando il processore eseguirà il codice e troverà questa
funzione, aspetterà il tempo indicato senza eseguire
nessuna operazione, e al termine continuerà l'esecuzione
del resto del programma. Quindi nel nostro caso:
void loop() {
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
}
Mettendo 2000 come argomento della funzione delay il
processore aspetterà 2000 millisecondi, quindi 2 secondi,
senza eseguire il codice, dando il tempo alla vista di
percepire il comportamento del led secondo il codice che
abbiamo scritto. Provando ad inviare (UPLOAD) di nuovo il
codice ad Arduino ci accorgiamo però che il led rimane
sempre acceso. Infatti la funzione di attesa è stata messa
effettivamente dopo l'accensione del led ma non dopo lo
spegnimento. Quindi il processore è così veloce a spegnere
e riaccendere il led che non riusciamo ancora a percepirlo.
Perciò dobbiamo necessariamente inserire un secondo
delay dopo lo spegnimento del led:
void loop() {
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
}
Ora, una volta inviato il codice alla scheda, potremo
constatare che effettivamente il processore accenderà il led
tramite il pin 13, aspetterà 2 secondi senza eseguire
operazioni, dandomi così l'opportunità di vedere il led
acceso, alla fine dei quali spegnerà il led togliendo la
tensione al pin 13 ed aspetterà anche qui 2 secondi senza
eseguire operazioni dandomi l'opportunità di vedere il led
spento. Poiché è un ciclo infinito, il led si accenderà e
spegnerà continuamente.
Utilizzando questo linguaggio e contemporaneamente le
uscite e le entrate della scheda Arduino sarà possibile
stabilizzare un mezzo multi-rotore in volo, prendendo come
INPUT sia i sensori IMU, che il comando del pilota tramite
radio e quindi segnale PWM, inviando quindi come OUTPUT,
dei segnali PWM ai regolatori di velocità (ESC) che
gestiranno la velocità di rotazione dei motori consentendo
al mezzo di rimanere in volo e di eseguire i movimenti
comandati dal pilota.