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.