Introduzione ad Arduino del Maker DevLab

13
Biagio (Gino) Zingales Alì Introduzione ad Arduino http://arduino.cc/ Introduzione ad Arduino

Transcript of Introduzione ad Arduino del Maker DevLab

Biagio (Gino) Zingales Alì

Introduzione ad Arduinohttp://arduino.cc/

Introduzione ad Arduino

Arduino è una piattaforma di prototipazione elettronica open-source , il progetto completamente italiano, è nato

ad Ivrea nel 2005 con lo scopo di ridurre i tempi di prototipizzazione dei prodotti elettronici ad un costo molto basso.

Questo progetto prevede una intera famiglia di board che si differenziano per capacità di elaborazione, tipologia di

connettività disponibile, dimensioni e dotazione software/firmware. Si va infatti dalla “Arduino Uno” considerata

come la entry level della famiglia alla “Arduino Yun” che attualmente rappresenta il top della gamma (con a bordo

Linux) passando per tante altre board adatte ad usi differenti.

Dove le periferiche a disposizione a bordo non bastino per i nostri progetti, potremmo acquistare una delle numerose “shield” attraverso le quali è possibile estendere le potenzialità della scheda elettronica di base.

Esistono moltissime shield ufficiali, ma anche di terze parti.

LE SHIELD

Arduino Ethernet Shield Arduino WiFi ShieldArduino GSM Shield

Store ufficiale Arduinohttp://store.arduino.cc/

E’ una board basata su un microcontrollore della Atmel, ATmega328, che ha a bordo tutta la memoria e lo storage necessario per i nostri sketch; in particolare abbiamo a disposizione:

● 32 KB di memoria Flash (di cui 0,5 KB sono occupati dal bootloader), la memoria Flash viene utilizzata per il

salvataggio dello “sketch” che abbiamo creato e sarà lanciato in esecuzione ad ogni avvio della board;

● 2 KB di SRAM (Static RAM), la memoria RAM è utilizzata a runtime (ad esempio per le variabili) ;

● 1 KB di EEPROM (Electrically Erasable Programmable ROM), che serve per salvare eventuali dati e parametri di

configurazione utili e/o necessari al nostro programma.

In termini di capacità di calcolo, stiamo parlando di un microcontrollore con architettura RISC (Reduced Instruction

Set Computer) ad 8-bit (e bene sì… avete letto proprio giusto! Solamente 8 bit contro i processori moderni a 32 e 64

bit) con una frequenza di clock di 16 Mhz (dimenticatevi i Ghz dei vostri PC e/o Smartphone). Anche se questi numeri

vi sembrano piccoli, vi posso assicurare che sarà possibile realizzare qualsiasi cosa.

Occhio sempre allo spreco dei bytes non necessari!

Arduino UNO

I pin del microcontrollore sono due connettori posti ai bordi della scheda. In particolare, sono disponibili: 14 pin digitali e 6 pin analogici, in quanto l’Atmega328 è dotato anche di un AD Converter (Analog to Digital) .

Ciascuno dei pin digitali può essere pilotato in maniera indipendente da software, impostandone il livello 1 (HIGH) o 0 (LOW), ed utilizzato come pin di GPIO (General Purpose Input Output);

I/O Arduino UNO

Alcuni di questi pin hanno funzionalità aggiuntive e se configurati in maniera opportuna possono diventare :

● Una porta seriale di tipo TTL (attenzione non RS232) caratterizzata dai soli segnali RX (Ricezione) e TX (trasmissione);● Due pin per segnalare (“triggerare”) un interrupt verso il microcontrollore, in corrispondenza del quale deve essere magari eseguita

una specifica elaborazione;● Segnali di output di tipo PWM (Pulse Width Modulation) per ottenere una tensione media variabile (che non sia solo HIGH o LOW);● Una porta SPI (Serial Peripheral Interface) utilizzata per l’interconnessione con device esterni attraverso il bus sincrono di tipo SPI;● Una porta I2C (Inter Integrated Circuit) che come l’SPI è utilizzata su un bus sincrono per la connessione ad altri device. Essa è anche

nota come TWI (Two Wires Interface) infatti è costituita da due soli segnali contro i quattro previsti dall’SPI;● Il pin che stabilisce la tensione di riferimento (AREF, Analog REFerence) per tutti gli input analogici. Essa è necessario per stabilire il

range di valori che l’AD Converter produce sulla base dei 10 bit a disposizione (in pratica esso fornirà un valore numerico compreso tra 0 e 1023, in corrispondenza ai valori di tensione da 0 a AREF Volts);

La board mette a disposizione due alimentazioni in uscita a 3,3V e 5V che possono alimentare uno o più dispositivi esterni, un segnale di RESET e un LED a bordo che viene identificato dal pin 13.

L’unica connettività con il mondo esterno è caratterizzata da un connettore USB che possiamo sfruttare per il collegamento al nostro PC di sviluppo.Il PC avrà a disposizione una porta seriale per poter comunicare con Arduino Uno, infatti, grazie a specifici driver da installare ed al convertitore “USB-to-serial” di cui la board è dotata (di fatto il microcontrollore non ha un’interfaccia USB nativa, ma utilizza sempre una comunicazione di tipo seriale).

I/O Arduino UNO

Il linguaggio di programmazione utilizzato per Arduino è il C/C++; è possibile utilizzare o meno il supporto per le classi che il C++ mette a disposizione. Il compilatore utilizzato è dedicato per i microcontrollori della famiglia AVR della Atmel e fa parte di una ben definita toolchain GCC.

I programmi che vengo realizzati per Arduino di chiamano SKETCH

L’ambiente di sviluppo (IDE)

Struttura

http://arduino.cc/en/Reference/HomePagePer maggiori informazioni

Uno Sketch è diviso in tre sezioni fondamentali:● Costrutti● Valori (variabili e costanti)● Funzioni.

Costrutti Valori Funzioni

setup()loop()

Costrutti di controllo

ifif...elseforswitch casewhiledo... whilebreakcontinuereturngoto...

Costanti

HIGH | LOW

INPUT | OUTPUT |

INPUT_PULLUP

LED_BUILTIN

true | false

integer constants

floating point

constants

...

Digitali I/O

pinMode()

digitalWrite()

digitalRead()

Analogici I/O

analogReference()

analogRead()

analogWrite() - PWM

...

Analisi struttura Sketch

setup()Questa funzione viene eseguita una ed una sola volta quando parte lo “sketch” all’accensione (o il reset della board). Viene utilizzata per effettuare le inizializzazioni necessarie al programma come ad esempio l’impostazione dei valori iniziali delle variabili, le modalità di uso dei pin (input, output, etc.) e l’inizializzazione delle librerie utilizzate.

loop()Questa funzione rappresenta il “loop” principale del programma. Ciò significa che le istruzioni contenute al suo interno vengono eseguite in mado ciclico (dalla prima all’ultima per poi ripartire dall’inizio).

I pin di Arduino

pinMode(pin, mode)

Per quanto riguarda il led a bordo della “Arduino Uno”, c’è da dire che esso è collegato al pin numero 13

del microcontrollore che altro non è che un pin digitale!

Come accennato, tutti i pin digitali di Arduino sono configurabili come input oppure come output, così

come alcuni di essi anche con funzioni molto più complesse (seriale TTL, bus SPI, bus I2C, …). La prima

operazione da fare consiste nell’impostare il pin 13 come output e per farlo possiamo avvalerci della

funzione pinMode, ecco la sintassi:

il numero del pin da

impostare

INPUT/OUTPUT

int led = 13;

void setup() {

// inizializzazione del pin in uscita

pinMode(led, OUTPUT);

}

digitalWrite(pin, modvaluee)

il numero del pin modificare il

valore

HIGH/LOW

void loop() { digitalWrite(led, HIGH); // accende il led digitalWrite(led, LOW); // spegne il led}

delay(ms) ritardo tra un’istruzione e l’altra

Sensori e Attuatori: il Physical Computing

SensoriEsistono numerosi sensori che possono essere utilizzati per acquisire grandezze fisiche nel mondo reale.

Attuatori

Gli attuatori vengono utilizzati per interagire con il mondo reale.Un motore è un attuatore, mette in movimento un oggetto (es. una ventola di raffreddamento) così come un relé che viene utilizzato come interruttore ad esempio per accendere una lampadina al cambiamento di stato di un sensore PIR.

Temperatura Umidità Luce (fotoresistenza)

Ultrasuoni Pir(Movimento)

Umidità

Servo-motore Relé 5V - 220V

http://arduino.cc/ - Sito ufficiale

http://playground.arduino.cc/Italiano/Tutorials - Molto materiale per iniziare

http://www.mauroalfieri.it/corso-arduino-on-line.html - Sito ricco di informazioni

UN PO’ DI LINK

/biagio.zingales

/+BiagioZingalesAlì

@biagio_zingales

Fate viaggiare la vostra fantasia!