Arduino è una piattaforma nata per rendere l'elettronica programmabile accessibile a chi non è ingegnere. Al centro c'è un microcontrollore: un chip che contiene processore, memoria per il programma, un po' di RAM e periferiche di ingresso e uscita. Non ha un sistema operativo, non ha un desktop, non si collega a Internet da solo. Esegue un unico programma, in un ciclo continuo, dal momento in cui riceve corrente. È proprio questa semplicità a renderlo affidabile e adatto a controllare cose fisiche.
Microcontrollore o computer?
| Arduino (es. Uno) | Raspberry Pi | |
|---|---|---|
| Sistema operativo | nessuno | Linux |
| Avvio | immediato | decine di secondi |
| Programmi | uno alla volta | molti insieme |
| Tensione logica | 5 V sull'Uno, 3,3 V su molte schede recenti | 3,3 V |
| Ingressi analogici | sì | no, servono convertitori esterni |
| Spegnimento brusco | nessun problema | rischio di corrompere la scheda |
Se il progetto deve leggere un sensore e reagire in modo prevedibile, un microcontrollore è spesso la scelta migliore. Se deve gestire dati, rete e interfacce complesse, serve un computer.
L'ambiente di sviluppo
Si programma con Arduino IDE, gratuito, oppure con editor più evoluti tramite estensioni dedicate. Il linguaggio è C++ con una libreria che semplifica le operazioni comuni. Il flusso è sempre lo stesso:
- collegare la scheda via USB;
- selezionare nell'IDE il modello di scheda e la porta;
- scrivere lo sketch, cioè il programma;
- caricarlo con il pulsante di upload: viene compilato e trasferito nella memoria del microcontrollore.
Una volta caricato, il programma resta in memoria anche senza USB: basta alimentare la scheda e riparte.
La struttura di uno sketch
Ogni programma ha due funzioni obbligatorie:
void setup() {
// eseguita una sola volta all'avvio
pinMode(13, OUTPUT);
}
void loop() {
// eseguita all'infinito
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
Questo è il classico «blink»: fa lampeggiare il LED integrato collegato al piedino 13 sull'Arduino Uno. È banale, ma verifica in un colpo solo che scheda, cavo, driver e caricamento funzionino. Conviene farlo sempre come primo test con una scheda nuova.
Collegare un LED esterno
Un LED non si collega mai direttamente tra un piedino e la massa: senza un limite, la corrente sale fino a danneggiare il LED o il piedino. Serve una resistenza in serie. Con un'uscita a 5 volt e un LED rosso comune, una resistenza tra 220 e 330 ohm è un valore tipico e prudente.
Attenzione anche al verso: il LED ha una gamba più lunga, l'anodo, che va verso il positivo, cioè verso il piedino di uscita.
Leggere un pulsante
Leggere un ingresso digitale sembra semplice, ma nasconde una trappola: un piedino non collegato a nulla «galleggia» e restituisce valori casuali. La soluzione è una resistenza di pull-up, che tiene il piedino a livello alto finché il pulsante non lo porta a massa. Arduino ne ha una interna, attivabile così:
const int pulsante = 2;
const int led = 13;
void setup() {
pinMode(pulsante, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop() {
if (digitalRead(pulsante) == LOW) {
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
}
Con il pull-up la logica è invertita: premuto vale LOW. Il pulsante va collegato tra il piedino 2 e GND.
Un altro fenomeno da conoscere è il rimbalzo: i contatti meccanici, nel chiudersi, oscillano per pochi millisecondi e il microcontrollore può leggere più pressioni. Si risolve via software, ignorando i cambiamenti troppo ravvicinati, o con un piccolo condensatore.
Il monitor seriale
Per capire cosa sta facendo il programma, lo strumento più utile è la porta seriale:
Serial.begin(9600);
Serial.println(analogRead(A0));
I valori compaiono nel monitor seriale dell'IDE. La velocità impostata nel codice deve coincidere con quella scelta nel monitor, altrimenti si vedono caratteri incomprensibili. È il primo controllo da fare quando l'output sembra spazzatura.
Errori comuni
- Alimentare motori o relè dai piedini: le uscite reggono correnti limitate; per carichi più grandi servono transistor, driver o moduli relè con alimentazione separata.
- Masse non in comune: se si usano due alimentatori, le masse vanno collegate tra loro, altrimenti i segnali non hanno un riferimento.
- Mescolare 5 V e 3,3 V: un sensore a 3,3 volt collegato a un'uscita da 5 volt può rompersi; si usano convertitori di livello.
- Usare
delay()ovunque: blocca tutto il programma. Per gestire più cose insieme si confronta il tempo trascorso conmillis().
Da dove proseguire
Dopo LED e pulsanti, i passi naturali sono un sensore di temperatura, un display, un piccolo motore servo. Ogni componente ha di solito una libreria pronta, installabile dall'IDE. Nel mio lavoro consiglio di leggere sempre la scheda tecnica del componente, almeno la parte su tensioni e correnti massime: è lì che si evitano i guasti.
In sintesi
- Arduino è un microcontrollore: esegue un solo programma, subito, senza sistema operativo.
- Ogni sketch ha
setup()eseguita una volta eloop()ripetuta all'infinito. - I LED vogliono sempre una resistenza in serie, i pulsanti un pull-up.
- Il monitor seriale è il primo strumento di diagnosi.
- Carichi grandi e tensioni diverse richiedono componenti di interfaccia.