Iniziare da zero con il kit Arduino: clessidra digitale e fotoaccoppiatori

In questa lezione continueremo lo studio della libreria dell'IDE di Arduino creando un paio di nuovi progetti per il nostro microcontrollore. Utilizzeremo altri componenti contenuti nel kit EOS per Arduino UNO: nel primo ci serviremo del'interruttore di tilt per realizzare una clessidra digitale mentre nel secondo utilizzeremo dei fotoaccoppiatori per separare fisicamente il micro dal nostro circuito.

Impariamo a misurare il tempo: la funzione millis()

Nel primo progetto che andremo a realizzare costruiremo una clessidra digitale che accende un led ogni dieci minuti. Per fare questo utilizzeremo un'altra funzione molto utile dell'IDE di Arduino, la funzione millis(). Fino ad'ora per introdurre un ritardo nella nostra applicazione abbiamo utilizzato la funzione  delay(), inserendo come argomento il ritardo espresso in millisecondi (si veda l'esempio della prima lezione in cui viene fatto lampeggiare un led). Questa funzione è molto utile ma limitata, infatti quando Arduino chiama delay(), il microprocessore si blocca fino a quando il ritardo impostato non termina (si dice che il processore è impegnato in una busy wait, è "impegnato ad aspettare" che il tempo passi); questo significa che l'attività di input e output del microcontrollore è ferma per tutta la durata del ritardo. Inoltre delay() non è utile per tenere traccia del tempo che passa: se volessimo eseguire un'operazione ogni dieci secondi, utilizzare un delay di dieci secondi sarebbe quantomeno poco efficiente.

La funzione millis() ci aiuta a risolvere il problema: questa funzione infatti tiene conto del tempo che è passato dall'avvio di Arduino e lo fa mentre il processore può essere impegnato tranquillamente a compiere altre utili attività. Per fare questo la funzione impiega il servizio di una periferica contenuta nel microcontrollore di Arduino chiamata Timer (ATMega328p al cuore di Arduino possiede tre timer, simili come funzionamento ma con diverse caratteristiche e funzionalità): i timer sono dei registri (grandi 8 bit o 16 bit) che incrementano il loro valore nel tempo e possono essere configurati per eseguire diverse operazioni come ad esempio misurare il tempo che passa, come nel caso della funzione millis(). Fino ad adesso abbiamo utilizzato variabili di tipo int: un int è una variabile a 16 bit con segno: questo significa che può assumere valori da -32768 a 32767. Un unsigned int, ovvero un intero senza segno (solo positivo) può contenere 65536 valori, da 0 a 65535, se la funzione millis() utilizzasse un int come variabile per tenere traccia del tempo trascorso esauriremmo i valori in meno di un minuto (ogni millisecondo incrementa il valore della variabile). Per questo introduciamo le variabili di tipo long (o long int), un tipo di dato a 32 bit. Il tipo di dato unsigned long utilizza i suoi 32 bit per tutti valori positivi andando da 0 a 4294967295, abbastanza spazio per millis() per contare fino a 50 giorni! Confrontando il valore ritornato millis() con un valore dato è possibile sapere quanto tempo è trascorso. Utilizziamo questa funzione per creare una clessidra digitale impiegando dei led e un tilt-switch: quest'ultimo, come dice il nome, è un interruttore che viene aperto o chiuso a seconda dell'inclinazione (figura 1).

Figura 1: tilt switch

il tilt-switch funziona esattamente come un classico interruttore, nel senso che è un sensore on/off, ma la sua costruzione particolare lo rende in grado di leggere l'inclinazione: tipicamente i tilt-switch hanno una piccola cavità all'interno, in cui si trova una piccola sfera in metallo; questa, scorrendo all'interno della cavità può chiudere i contatti del circuito, chiudendo o [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2110 parole ed è riservato agli abbonati PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

Una risposta

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 17 marzo 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *