Corso base di Arduino: analizzare e programmare

Il programmatore non inizia mai subito la programmazione in un linguaggio di programmazione. L'analisi è una disciplina informatica a tutti gli effetti che va svolta prima.

Avatar di Elettronica Open Source

a cura di Elettronica Open Source

banner prova1

In questa seconda puntata affrontiamo il tema dell'analisi di un firmware. Si tratta di un tema molto delicato in quanto, se il progettista non ha le idee chiare su cosa deve svolgere il sistema, egli non può pretendere che Arduino svolga al meglio le sue funzioni. La macchina non fa miracoli ma lavora secondo le direttive dell'uomo.

Un'attenta analisi consiste nella esatta pianificazione dei vari step che deve compiere una MCU o una CPU. Ricordate che il programmatore deve prevedere sempre qualsiasi evenienza e comportamento del sistema, cosa non sempre facile. È sufficiente che vi sia qualche intoppo nell'analisi che tutto il lavoro finale non vedrà mai la luce.

Approfondiamo il discorso con un esempio pratico. Si supponga di voler realizzare un sistema di luce crepuscolare che provveda ad accendere le luci di una strada non appena tramonti il Sole. Si capisce benissimo che il circuito abbia bisogno di un sensore esterno con cui poter controllare la luce ambientale. Il sensore e la fotoresistenza, collegati in serie, costituiscono una sorta di partitore resistivo il cui capo centrale è collegato all'ingresso analogico di Arduino (A0). Si consiglia di utilizzare una resistenza dal valore equivalente a quella del sensore, in luce ambientale. Secondo la registrazione e l'acquisizione di quest'ultima, Arduino saprà se è il caso di accendere le luci o meno. Dall'altra parte del circuito l'attuatore è rappresentato da un diodo LED, assieme alla sua resistenza di limitazione da 220 ohm. Esso simula una lampada di potenza e volendola implementare, occorrerà utilizzare transistor o triac adatti allo scopo. Tutte questo costituisce la parte hardware.

figura 1 schema
FIGURA 1: Schema elettrico

Passiamo adesso alla parte software, probabilmente la più complicata. Una attenta analisi del problema permette di approntare un algoritmo, rappresentato dal seguente pseudo-linguaggio e descritto per punti:

  1. Inizializza il sistema, dichiara le variabili e predispone le porte di I/O;
  2. Misura la luce ambientale;
  3. Se tale luce supera un certo limite, spegne la lampada notturna;
  4. Se tale luce è inferiore a un certo limite, accende la lampada notturna;
  5. Aspetta qualche istante;
  6. Ritorna al punto 2.

È sempre utile effettuare tale ragionamento, soprattutto in previsione di firmware molto più complessi. Approntiamo, dunque, il codice all'interno dell'IDE di Arduino e compiliamo il tutto, caricandolo sul sistema. Il sistema dovrebbe funzionare già da subito.

figura 2 flow

FIGURA 2: Diagramma di flusso

Il listato esegue un ciclo completo, nel quale viene controllato continuamente lo stato del sensore di luce. Se il suo livello supera un certo valore il diodo LED si spegne. Viceversa, se il suo stato si attesta al di sotto di un altro valore, la luce notturna si accende. Procedendo in questo modo si realizza una sorta di isteresi software che impedisce all'attuatore di impazzire se il livello di luminosità si trova proprio a cavallo tra le due condizioni desiderate e previste.

codice

Il partitore fornisce una tensione analogica compresa tra 0V e VCC. Tale livello dipende dal valore assunto dalla fotoresistenza durante il suo funzionamento. La legge di Ohm agevola i calcoli, in tal senso. La tensione risultante è immessa nell'ADC di Arduino e misurata attraverso le sue apposite funzioni. Arduino è in grado di misurare fino a 6 tensioni analogiche contemporaneamente (e anche di più, nelle schede più sofisticate). La risoluzione è di 10 bit, e questo consente di ottenere, da una tensione analogica compresa tra 0V e 5V, un corrispondente valore digitale compreso tra 0 e 1023. In altre parole essa riesce a misurare variazioni di soli 4.9 mV. Per spostamenti ancora più piccoli occorre utilizzare un ADC con una più alta risoluzione (12-14-16 bit) o adottare il sotto-campionamento, una tecnica software che permette di raggirare virtualmente l'ostacolo.


Tom's Consiglia

Per chi inizia ora e voglia dotarsi di tutto l'occorrente, Arduino Uno si trova facilmente a un prezzo abbordabile.