Arduino UNO

La scheda Arduino è un dispositivo elettronico già montato e pronto per essere programmato per applicazioni di robotica e di automazione.

Il costo della scheda è di circa 20 euro e si può acquistare online.

La presentazione della scheda è qui.

Lo schema elettronico è visualizzabile qui.

Il datasheet del microcontrollore ATmega 328P è qui.

Arduino può essere programmato con un software scaricabile da qui oppure tramite un programmatore e il software Atmel AVR Studio 5 scaricabile da qui.

Prima di eseguire il software si collega la scheda al PC con il cavo USB (tipo A a tipo B).

Selezione scheda

Si lancia il software Arduino e si controlla su Strumenti – Schede che sia selezionato Arduino UNO.

Sezione porta

Per Winodws se il sistema opeativo non riconosce la porta occorre installare i driver che sono nella cartella del programma (selezionare la cartella Driver e poi quella successiva). Attendere l’installazione di due driver.

Per Linux il sistema stesso propone le alternative se non riesce a collegarsi ad Arduino quando deve trasferire il programma dal pc alla scheda.

Per Mac selezionare sul programma Arduino Serial Port e scegliere la porta che comincia con /dev/cu.usbserial-.

Il software

Per iniziare si apre un esempio con i comandi File – Esempi – Basics e si sceglie Blink.

E’ il programma che fa lampeggiare il led presente sulla scheda. Il led è collegato in parallello all’uscita digitale 13.

Il programma è scritto in un linguaggio simile al C.

Occorre sempre inserire un setup(), che viene eseguito una sola volta e serve per imposta i pin come ingressi o come uscite. Poi si scrive un loop(), che è il programma vero e proprio, che viene eseguito ripetutamente dopo il setup .

Nella parte iniziale dello sketch di norma si utilizzano dei #define (direttive) per definire dei nomi convenzionali associati a pin di Arduino o a stati (vero, falso, acceso, spento) per rendere più leggibile il programma. Nel listato seguente, rispetto a quello disponibile sul software, si è sostituto a 13 la parola LED e si è aggiunto un #define. I commenti sono preceduti da //.

Il primo programma

In questo programma viene assegnata al piedino 13 la funzione di uscita.

Il ciclo di programma è composto dall’accensione del led, da una pausa, dallo spegnimento del led, da un’altra pausa.

In questo esempio si sono utilizzate queste funzioni:

pinMode(pin,mode), dove pin è il numero del piedino e mode può essere INPUT o OUTPUT (ingresso o uscita),

serve a impostare la funzione di un piedino

digitalWrite(pin,value), dove pin è il numero del piedino e value può essere LOW o HIGH (0 o 1),

serve a assegnare un valore 0 o 1 ad un piedino definito come uscita digitale

delay(time), dove time è il tempo in millisecondi,

serve a fare una pausa

Il primo esercizio

Scrivere un programma per fare:

– accendere il led
– attendere un tempo di 0,5 s
– spegnere il led
– attendere un tempo di 0,5 s
– accendere il led
– attendere un tempo di 0,2 s
– spegnere il led
– attendere un tempo di 0,5 s

La prova del programma

Per provare un programma prima si utilizza il comando Verifica (il primo bottone a sinistra in alto sul software Arduino).

Il programma appena scritto sarà compilato.

Se non ci sono errori, alla fine compare la scritta Lo sketch usa XXX byte (YY%) dello spazio disponibile per i programmi.

A questo punto si trasferisce il programma dal PC alla scheda con il bottone Carica, al termine compare la scritta Caricamento completato

Se non funziona Carica, si controlla che il sistema riconosca la porta.

In genere la connessione a Arduino viene riconosciuta come una porta seriale (per esempio COM24 o COM7, i numeri sono casuali).

Cosa possiamo fare con il software di Arduino?

Il linguaggio di programmazione permette di utilizzare le istruzioni tipiche del C.

Eccone alcuni esempi

if (i==2) … else …

for(i=0; i<10; i++) …

switch (…) { case … break; case … break; default: … }

while (i>3) …

do … while (i<7)

Inoltre sono previsti i tipi delle variabili, come nel linguaggio C: char, int, unsigned int, long, unsigned long, ecc. (tutti i tipi utilizzabili sono qui).

Le strutture di dati come String, gli array (per esempio buffer[8]), ecc.

Le operazioni logiche: && (and), || (or) e ! (not).

Le comparazioni: ==, !=, >=, <=, <, >.

Possiamo leggere gli ingressi digitali con l’istruzione digitalRead(pin) sempre che sia stato definito il piedino come INPUT nel setup().

Per approfondire il linguaggio andare qui.

Cosa possiamo fare con Arduino?

Sulla scheda sono disponibili 6 ingressi analogici che sono anche ingressi/uscite digitali.

Gli ingressi analogici sono già impostati come ingressi digitali INPUT, quindi non serve impostarli nel setup() se si usano come ingressi analogici o come ingressi digitali. Serve impostarli eventualmente come INPUT_PULLUP se occorre la resistenza di pull-up.

Se si vuole leggere un sensore si usa l’istruzione analogRead(pinAnalog), dove pinAnalog è l’ingresso analogico scelto (da 0 a 5), che dà come risultato un valore da 0 a 1023. Per esempio, per assegnare il valore letto ad una variabile, si scrive a=analogRead(A0), ma si può anche scrivere a=analogRead(0) oppure a=analogRead(14).

Sulla scheda sono disponibili 6 uscite analogiche.

Le uscite analogiche devono essere programmate come OUTPUT. quindi occorre impostarle nel setup().

Il loro valore viene assegnato con l’istruzione analogWrite(pin,value), dove pin è il piedino scelto (i piedini  disponibili sono: 3, 5,6,9,10,11), che porta l’uscita al valore assegnato value tra 0 e 255. Per esempio: analogWrite(9,48).

Sulla scheda è disponibile un’interfaccia seriale con il pc.

Per utilizzarla si può usare le seguenti istruzioni:

Serial.begin(speed), dove speed è la velocità, per esempio 9600 (bit al secondo), questa istruzione apre la comunicazione con il pc e ne determina la velocità,

Serial.println(value), dove value è un valore che viene trasmesso al pc,

Serial.avaliable() restituisce il numero di byte arrivati dalla seriale,

Serial.read() legge il byte che arriva.

Per monitorare i dati inviati si apre il pannello Serial Monitor con l’ultimo bottone a destra dei comandi.

Sulla scheda è disponibile un timer che conta i millisecondi dall’ultimo reset della scheda.

Per utilizzarlo si può usare la funzione millis()

Hardware

Sono disponibili:

– 6 canali PWM

– 6 canali ADC

– 2 timer a 8 bit (il TIMER0 viene usato per millis e il TIMER2)

– 1 timer a 16 bit (TIMER1)

– 1 bus seriale 232

– 1 bus I2C

– 1 bus SPi

– 1 watch-dog timer

– 1 comparatore analogico

– 2 sorgenti di interrupt esterne

Sulla scheda sono disponibili due regolatori di tensione. E’ possibile avere 5V e 3,3V. Attenzione a non bruciarli. Se ci colleghiamo troppi carichi succede.

Per approfondire la scheda e la programmazione: