⌁ Hardware ed elettronica

Arduino per iniziare: microcontrollore, IDE e primo progetto

Che cos'è Arduino, in cosa differisce da un computer, come funzionano setup e loop, come leggere un pulsante e accendere un LED senza danneggiarlo.

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:

  1. collegare la scheda via USB;
  2. selezionare nell'IDE il modello di scheda e la porta;
  3. scrivere lo sketch, cioè il programma;
  4. 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 con millis().

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 e loop() 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.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica e in psicologia, unisce l'analisi tecnica alla comprensione del fattore umano.

Leggi anche