Archivi categoria: i miei allievi

Capire prima di costruire – 03: che cosa significa GND in un circuito?

Una sigla che incontriamo continuamente nei circuiti, ma che vale la pena capire bene prima di collegare fili e componenti.

Chi osserva uno schema elettronico, oppure usa una scheda come Arduino, ESP32 o micro:bit, incontra quasi subito una sigla: GND.

All’inizio la si riconosce per abitudine. Si collega il filo al pin GND, si chiude il circuito, magari tutto funziona, e si passa oltre. Però, se vogliamo davvero capire che cosa stiamo costruendo, non basta sapere “dove va messo il filo”. Bisogna capire che cosa rappresenta quel punto del circuito.

GND è una di quelle parole piccole che, in laboratorio, fanno una grande differenza. Capirla aiuta a leggere meglio gli schemi, a usare correttamente il multimetro e a evitare molti errori pratici, soprattutto quando si collegano sensori, moduli esterni e microcontrollori.

Cosa significa GND

GND è l’abbreviazione di ground, nei contesti didattici viene spesso tradotto con massa oppure indicato come riferimento a 0 volt.

Quando diciamo che un pin è a 5 V, stiamo sottintendendo qualcosa di importante: quel pin è a 5 V rispetto a GND. La tensione, infatti, non si misura mai “da sola”, ma sempre come differenza tra due punti.

Massa e terra non sono la stessa cosa (anche se a volte coincidono)

Molto spesso si fa l’errore di considerare GND e massa la stessa cosa, non è corretto: GND è il riferimento a 0 volt, mentre massa è il potenziale di riferimento del nostro circuito che può assumere anche 0 volt, tipicamente nella maggior parte delle vostre sperimentazioni vi troverete nella condizione di avere come livello di riferimento lo 0 Volt pertanto massa e terra coincidono.

  • Massa: è il potenziale comune di riferimento del circuito, spesso ha valore di 0 V. È il “piano terra” della nostra analogia: il valore di riferimento comune rispetto a cui misuriamo e capiamo i segnali elettrici.
  • GND (0 V di riferimento) o Ground o Terra: è il potenziale comune di riferimento del circuito ed ha come valore 0 V, anche in questo caso possiamo dire che è il “piano terra” della nostra analogia: lo zero rispetto a cui misuriamo e capiamo i segnali elettrici.
  • Terra / PE (Protective Earth – protezione) negli impianti civili e industriali: è il nome con cui identifichiamo il collegamento all’impianto di terra, usato soprattutto per sicurezza elettrica (scariche, guasti, schermature).

In molti dispositivi alimentati da rete, la massa del circuito può essere collegata alla terra, e in quel caso massa e terra finiscono per trovarsi allo stesso potenziale e spesso si parla di “0 V” ed ecco perché molto spesso massa a terra (GND) vengono utilizzati per esprimere lo stesso concetto, però mi raccomando ricordate la differenza!

GND non è un posto in cui la corrente sparisce

Qui conviene fermarsi un momento, perché c’è un equivoco molto diffuso.

A volte si dice che la corrente “va a massa”, come se arrivasse in GND e scomparisse. In realtà non funziona così.

In un circuito chiuso la corrente deve compiere un percorso completo: parte dal generatore, attraversa i componenti e ritorna al generatore. Se il percorso non è chiuso, la corrente non può circolare in modo corretto.

GND, quindi, non è un buco in cui l’elettricità finisce, è un nodo del circuito: un punto comune che usiamo come riferimento e, in molti casi, anche come percorso di ritorno della corrente.
Continua a leggere

Capire prima di costruire – 02: perché un LED ha bisogno di una resistenza in serie?

Una delle prime regole che si imparano in laboratorio, ma che vale la pena capire davvero.

Quando si comincia a lavorare con i circuiti elettronici, prima o poi arriva sempre questa raccomandazione:

“Non collegare mai un LED direttamente all’alimentazione senza una resistenza.”

È una regola giusta, e in laboratorio va presa sul serio. Però, se vogliamo imparare davvero l’elettronica, non basta ripeterla a memoria: dobbiamo capire che cosa succede nel circuito e perché quella resistenza è così importante.

Prima di tutto: che cos’è un LED

Un LED, cioè Light Emitting Diode, è un diodo che emette luce quando viene attraversato da corrente nel verso corretto.

La cosa importante da ricordare è questa:

un LED non si comporta come una normale resistenza. Non è lui a “scegliere” quanta corrente far passare in modo sicuro. Se lo colleghiamo male, può danneggiarsi molto in fretta, anche se per un istante sembra funzionare.

Il punto chiave: il LED non limita da solo la corrente

Questo è il concetto centrale.

Molti studenti all’inizio dei loro studi di elettronica pensano: “Se gli do la tensione giusta, il LED si accende e basta”. In parte è vero: il LED si accende quando è polarizzato correttamente. Il problema, però, è la corrente.

Senza un componente che la tenga sotto controllo, il LED può lasciar passare più corrente di quella che riesce a sopportare. Ed è proprio qui che entra in gioco la resistenza.

La resistenza serve a limitare la corrente che attraversa il LED e a mantenerla entro un valore sicuro.

Perché la sola tensione non basta

Ogni LED ha una propria caduta di tensione diretta: è la tensione che troviamo ai suoi capi quando il LED è acceso e lavora nel verso corretto.

Indicativamente possiamo avere questi valori:

  • LED rosso: circa 1,8 – 2,2 V
  • LED verde: circa 2 – 3 V
  • LED blu o bianco: circa 3 – 3,3 V

Facciamo un esempio semplice. Immaginiamo un LED rosso con una caduta di circa 2 V e un’alimentazione da 5 V.

Se lo colleghiamo direttamente ai 5 V, quei volt in più devono comunque “finire” da qualche parte. Senza una resistenza, il rischio è che la corrente salga troppo rapidamente.

Il risultato può essere questo:

  • il LED diventa molto luminoso per un attimo;
  • si scalda;
  • si danneggia in modo permanente.

Il ruolo della resistenza

La resistenza prende su di sé una parte della tensione disponibile e, soprattutto, stabilisce quanta corrente può passare nel circuito.

Per stimare il valore della resistenza possiamo usare la legge di Ohm:

R = (V alimentazione – V LED) / I

Per esempio:

  • alimentazione = 5 V;
  • caduta sul LED = 2 V;
  • corrente desiderata = 10 mA = 0,01 A.

Quindi:

R = (5 – 2) / 0,01 = 300 Ω

Nella pratica si sceglie spesso il valore standard più vicino. In questo caso, ad esempio, si può usare tranquillamente una resistenza da 330 Ω. Continua a leggere

Capire prima di costruire – 01: che differenza c’è tra tensione, corrente e resistenza?

Tre parole che compaiono ovunque in elettronica, ma che spesso vengono confuse tra loro.


Chi inizia a studiare elettrotecnica o elettronica incontra quasi subito tre grandezze fondamentali: tensione, corrente e resistenza.
Sono termini molto usati, ma proprio perché si sentono spesso si rischia di credere di averli capiti, quando in realtà restano un po’ sfocati.

Dagli appunti per i miei studenti.
Capire bene la differenza tra queste tre grandezze è importante perché costituisce una delle basi di tutto ciò che verrà dopo: circuiti, sensori, LED, alimentatori, Arduino, motori, misure elettriche.

La tensione elettrica

La tensione elettrica, spesso indicata come differenza di potenziale (d.d.p.), rappresenta la causa prima di ogni fenomeno elettrico dinamico. Scientificamente, si definisce tensione tra due punti A e B il rapporto tra il lavoro L compiuto dalle forze del campo elettrico per spostare una carica positiva q dal punto A al punto B e la carica stessa. In termini matematici, utilizzando la notazione standard, si esprime come:

V_{AB} = \frac{L_{AB}}{q}

L’unità di misura, il Volt (V), rende omaggio ad Alessandro Volta, la cui ricerca presso l’Università di Pavia ha segnato la nascita dell’elettrotecnica moderna. Per chi inizia lo studio dell’elettrotecnica, è fondamentale comprendere che la tensione non è un “flusso” ma una “condizione” di squilibrio energetico. Una batteria carica possiede una tensione ai suoi capi anche se non è collegata a alcun circuito, esattamente come un corpo sollevato da terra possiede energia potenziale gravitazionale anche se non è in caduta libera.

Sorgente di Tensione Valore Nominale (V) Ambito di Utilizzo
Pila Zinco-Carbone / Alcalina 1,5 V Telecomandi, piccoli apparati
Batteria al Litio (Singola Cella) 3,7 V Smartphone, droni, wearable
Porta USB Standard 5,0 V Alimentazione logica digitale, Arduino
Batteria Piombo-Acido (Auto) 12,0 V Avviamento motori, servizi automotive
Rete Domestica (Monofase) 230 V Elettrodomestici, illuminazione civile

Nelle applicazioni pratiche di laboratorio, la tensione viene fornita da generatori che possono essere pile chimiche o alimentatori da banco, questi ultimi permettono di regolare la “spinta” impressa alle cariche, permettendo di osservare come variano le altre grandezze in gioco. Un errore frequente nella fase di apprendimento è confondere la tensione disponibile con quella effettivamente “utilizzata” dai componenti; la comprensione che la tensione è una proprietà relativa a due punti e non un valore assoluto è il primo passo per una corretta analisi dei nodi e delle maglie di un circuito.

L’intensità di corrente

Se la tensione è la causa, la corrente elettrica è l’effetto. Essa consiste nel movimento ordinato di particelle dotate di carica elettrica. Nei conduttori metallici, tipicamente utilizzati nei laboratori, i portatori di carica sono gli elettroni di conduzione, che si muovono all’interno del reticolo cristallino del metallo. L’intensità di corrente I è definita come la quantità di carica dQ che attraversa una sezione del conduttore nell’intervallo di tempo dt:

I = \frac{dQ}{dt}

L’unità di misura è l’Ampere (A), una delle sette unità fondamentali del Sistema Internazionale. È cruciale distinguere tra la velocità con cui l’energia si propaga nel circuito (vicina a quella della luce) e la velocità di deriva degli elettroni, che è sorprendentemente lenta, spesso dell’ordine di pochi millimetri al secondo. Questo fenomeno viene spiegato agli studenti attraverso il modello del “domino” o della “colonna di palline”: quando si applica tensione, l’effetto si ripercuote istantaneamente su tutta la linea, ma ogni singola carica percorre solo un breve tratto nell’unità di tempo.

Nell’elettronica moderna, specialmente quando si opera con sensori e microcontrollori, si utilizzano quasi esclusivamente i sottomultipli dell’Ampere.

Livello di Corrente Valore Tipico Significato Tecnico
Corrente di dispersione <1 µA Valori minimi in isolanti o standby
Corrente Sensori Analogici 1–10 mA Segnale tipico per trasduttori
Corrente LED Standard 10–20 mA Valore di sicurezza per segnalazione
Limite Pin Arduino 40 mA Massima corrente prelevabile senza danni
Carico di Potenza (Motori) >500 mA Richiede stadi di amplificazione o driver

Un aspetto che richiede un’attenzione particolare è il verso della corrente. Storicamente, prima della scoperta dell’elettrone, si ipotizzò che a muoversi fossero cariche positive dal polo + al polo . Questa convenzione è rimasta universale in tutta l’elettrotecnica e l’elettronica. Per chi inizia lo studio è necessario chiarire che, sebbene fisicamente gli elettroni risalgano il potenziale (dal al +), i calcoli e gli schemi seguono il verso convenzionale discendente. Questa distinzione è essenziale quando si affrontano componenti polarizzati come i diodi o i condensatori elettrolitici.

La resistenza elettrica e le proprietà tecnologiche dei materiali

La resistenza elettrica è la grandezza che quantifica l’opposizione di un corpo al passaggio della corrente. Tale opposizione non deve essere vista come un fattore puramente negativo, ma come lo strumento principale per il controllo delle correnti e per la trasformazione dell’energia elettrica in altre forme, come il calore (effetto Joule) o la luce. La resistenza R si misura in Ohm (\Omega) e dipende strettamente dalla natura del materiale e dalle sue dimensioni geometriche, secondo la seconda legge di Ohm:

R = \rho \cdot \frac{L}{S}

Dove \rho (rho) rappresenta la resistività, una proprietà intrinseca del materiale che varia anche in funzione della temperatura. La formula offre una comprensione intuitiva della “fatica” che le cariche compiono: un conduttore più lungo (L) oppone più resistenza perché aumenta il numero di urti tra cariche e atomi; un conduttore con sezione (S) maggiore offre invece più “spazio” per il passaggio, riducendo la resistenza.

Materiale Resistività ρ (Ω·m) a 20 °C Utilizzo Tecnologico
Argento 1,59·10−8 Contatti di alta precisione
Rame 1,68·10−8 Cablaggi elettrici universali
Alluminio 2,82·10−8 Linee aeree di alta tensione
Costantana 4,9·10−7 Resistenze di precisione (stabile con T)
Silicio Variabile Semiconduttore per microchip

Un approfondimento necessario riguarda la dipendenza dalla temperatura. Nella maggior parte dei metalli, la resistenza aumenta con il calore poiché l’agitazione termica degli atomi del reticolo aumenta la probabilità di collisione con gli elettroni di conduzione. Questo fenomeno è alla base del funzionamento di dispositivi come i termistori (NTC/PTC) utilizzati in elettronica per la misura della temperatura. Al contrario, nei semiconduttori, l’aumento di temperatura può liberare più portatori di carica, riducendo la resistenza, un comportamento che sottolinea la complessità e la varietà dei materiali elettronici che gli studenti impareranno a classificare.

L’analogia idraulica tra tradizione didattica e limiti scientifici

L’uso di analogie nel campo della fisica è una pratica consolidata. Nel contesto didattico, l’analogia idraulica è lo strumento più efficace per visualizzare grandezze altrimenti invisibili.

In questo modello, il circuito elettrico viene paragonato a un sistema di tubazioni in cui scorre un liquido incomprimibile (l’acqua).

Elemento Elettrico Analogia Idraulica Significato Fisico dell’Analogia
Tensione (V) Pressione o dislivello La forza che spinge il fluido attraverso il condotto.
Corrente (I) Portata Il volume d’acqua che passa in una sezione per unità di tempo.
Resistenza (R) Strozzatura o attrito L’opposizione fisica causata dal diametro o dalla rugosità del tubo.
Generatore Pompa Il dispositivo che ristabilisce il potenziale fornendo energia.
Conduttore Tubo di grosso diametro Il percorso che permette il movimento con perdite minime.
Interruttore Rubinetto (con inversione logica) Il comando che permette o impedisce il flusso.

Tuttavia bisogna avere estrema cautela nell’uso di questo modello. Uno dei rischi maggiori è indurre lo studente a pensare che l’elettricità possa “uscire” dal filo come l’acqua da un tubo rotto. È necessario spiegare che, mentre l’acqua può fluire in un tubo aperto verso l’atmosfera, la corrente elettrica richiede necessariamente un percorso chiuso e un ritorno al generatore, a causa dell’altissima rigidità dielettrica dell’aria. Inoltre, l’analogia fallisce nel descrivere i campi elettromagnetici che circondano il filo, fondamentali per comprendere il funzionamento di trasformatori e motori che gli allievi incontreranno nel proseguimento del corso di studi.

Errori tipici e difficoltà

Una delle idee più radicate è il cosiddetto “modello della consumazione”. Molti allievi ritengono che la corrente diminuisca man mano che attraversa i componenti di un circuito (ad esempio, che ce ne sia di più prima di una lampadina e meno dopo). Questo errore deriva da una confusione tra corrente (materia/carica) ed energia. Credo che la strategia didattica corretta possa essere quella che utilizza l’analogia della catena di bicicletta o del circuito idraulico chiuso: la catena si muove alla stessa velocità in ogni punto, ma è il lavoro compiuto dal ciclista a trasferire energia alla ruota.

Un’altra difficoltà riguarda il “ragionamento sequenziale”. Gli studenti tendono ad analizzare i circuiti come se la corrente decidesse cosa fare man mano che incontra i componenti, ignorando che un cambiamento in qualsiasi punto del circuito modifica istantaneamente l’equilibrio di tutto il sistema. L’uso di simulatori come PhET, che permettono di vedere le cariche muoversi in tempo reale e reagire a ogni variazione di resistenza, è fondamentale per superare questo limite cognitivo.

Infine, persiste spesso la confusione tra tensione e corrente, usate nel linguaggio comune come sinonimi (si dice spesso “è passata la 220” intendendo la tensione). E’ importante insistere sul fatto che la tensione è una causa potenziale e la corrente è un effetto attuale: si può avere tensione senza corrente (circuito aperto), ma non corrente senza tensione (salvo nei superconduttori, argomento avanzato).

Questa breve lezione è un primo passo, nei prossimi post vedremo come queste grandezze entrano in gioco in situazioni pratiche, ad esempio quando si collega un LED o si usa un multimetro.

Buono Studio 🙂

Domande dagli utenti – Che cosa significa l’errore avrdude: stk500_getsync()?

Ecco una delle domande che mi sono state fatte ed è forse tra le più comuni:

“Prof, quando provo a caricare lo sketch compare avrdude: stk500_getsync(); che cosa vuol dire?”

questo errore spaventa molto, la scorsa settimana uno studente mi ha detto: “Prof. ho bruciato Arduino!!” 🙂
Nella maggior parte dei casi non indica una scheda “morta”: significa semplicemente che il computer non sta riuscendo a comunicare correttamente con Arduino durante il caricamento del programma.

Risposta

L’errore avrdude: stk500_getsync() compare quando l’IDE prova a trasferire lo sketch alla scheda, ma non riceve la risposta attesa dal bootloader o dall’interfaccia di programmazione seriale. In pratica, il caricamento non parte perché PC e scheda non sono “in sincronia”.

Spesso il messaggio compare insieme a righe come queste:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

Quel resp=0x00 è un indizio tipico: il computer sta tentando di dialogare con la scheda, ma non riceve la risposta corretta.

Che cos’è avrdude

avrdude è il programma che Arduino IDE usa per caricare il codice su molte schede basate su microcontrollori AVR, come UNO classica, Mega e Nano classica. Quando compare questo errore, non è l’IDE che “si è bloccato”: è l’utility di upload che segnala un problema di comunicazione.

Le cause più comuni

Nella pratica, le cause più frequenti sono quasi sempre queste:

01. Scheda sbagliata selezionata nell’IDE

Se in Strumenti > Scheda è impostato un modello diverso da quello realmente collegato, il caricamento può fallire. Arduino indica esplicitamente di controllare prima di tutto che scheda e porta siano corrette.

02. Porta seriale errata

Può succedere di avere selezionato una porta vecchia, una porta non più attiva oppure la porta di un altro dispositivo. Anche questo è uno dei controlli principali suggeriti dal supporto Arduino.

03. Cavo USB inadatto o difettoso

Un caso molto più comune di quanto si pensi: alcuni cavi USB servono solo per l’alimentazione e non trasferiscono dati. In altri casi il cavo dati è semplicemente guasto. Arduino raccomanda di provare un altro cavo e di verificare che sia davvero un cavo dati.

04. Porta occupata da un altro programma

Se la porta seriale è già in uso da un monitor seriale, da un’altra finestra dell’IDE o da un altro software, l’upload può non andare a buon fine. Arduino consiglia di chiudere le altre istanze dell’IDE, i monitor seriali e gli altri programmi che possono bloccare la porta.

05. Qualcosa collegato ai pin 0 e 1

Sulle schede AVR classiche, i pin 0 (RX) e 1 (TX) sono usati anche per la comunicazione seriale durante il caricamento. Se su quei pin è collegato un modulo, un sensore o un circuito esterno, la comunicazione può essere disturbata. Scollegate tutto ciò che non è indispensabile, in particolare proprio da RX e TX.

06. Processore errato nel caso del Nano classico

Per il classic Nano, il supporto Arduino raccomanda anche di controllare la voce Strumenti > Processore, perché un’impostazione sbagliata può causare errori di upload.

07. Problema di bootloader o di interfaccia seriale

Se i controlli di base non risolvono, per alcune schede classiche, un loopback test per verificare la parte USB-seriale. Se il test passa oppure non è applicabile, una possibile soluzione è riscrivere il bootloader.

La cosa importante da capire

Questo errore non significa automaticamente che Arduino sia rotto. Molto spesso il problema è molto più semplice: selezione sbagliata della scheda, porta sbagliata, cavo inadatto, porta occupata o interferenze esterne ed è proprio questo il motivo per cui conviene affrontarlo con metodo, senza cambiare tutto a caso.

Una procedura semplice da seguire

Quando compare avrdude: stk500_getsync(), consiglio di procedere sempre in questo ordine:

Passo 1 – Verificare che lo sketch compili

Premete Verifica e controllate che non ci siano errori di compilazione. Arduino distingue chiaramente i problemi di compilazione da quelli di upload.

Passo 2 – Controllare scheda e porta

Andate in Strumenti > Scheda e Strumenti > Porta e assicurati che corrispondano davvero alla scheda collegata. Un buon trucco è scollegare e ricollegare Arduino per vedere quale porta compare o scompare.

Passo 3 – Cambiare cavo USB

Se avete un dubbio, prova subito un altro cavo. È uno dei controlli più rapidi e più spesso risolutivi.

Passo 4 – Scollegare tutto dalla scheda

Rimuovete jumper, shield, moduli e in particolare qualsiasi cosa sia connessa ai pin 0 e 1. Poi riprovate il caricamento.

Passo 5 – Chiudere monitor seriale e altri programmi

Chiudete monitor seriale, plotter seriale, altre finestre dell’IDE e software che potrebbero usare la stessa porta. Se necessario, riavviate il computer.

Passo 6 – Premere RESET e riprovare

Provate a resettare la scheda con il pulsante RESET e poi tentare di nuovo l’upload.

Passo 7 – Se usate un Nano classico, controllare il processore

Nel caso del Nano classico, verifica anche la voce Strumenti > Processore.

Quando il problema è più serio

Se dopo tutti questi controlli l’errore resta, allora conviene prendere in considerazione due possibilità:

  • un problema nella conversione USB-seriale;
  • un bootloader danneggiato o mancante.

Nel caso delle schede classiche compatibili con il test, è il caso di fare il loopback test. Se la parte seriale risulta a posto, allora può avere senso riscrivere il bootloader usando un altro Arduino come programmatore.

Ma cos’è il loopback test

Il loopback test è una prova di diagnostica che serve a verificare se la comunicazione seriale tra computer e scheda Arduino funziona correttamente, in particolare la parte gestita dal convertitore USB-seriale della scheda è semplicemente una procedura per testare la comunicazione seriale tra PC e scheda.

Detto in modo semplice:

si “fa tornare indietro” immediatamente tutto ciò che il computer invia alla scheda. Se scrivete  un testo nel Monitor Seriale e lo rivedete comparire subito, significa che quella parte della comunicazione sta funzionando.

Il test serve soprattutto a capire dove si trova il problema quando compare un errore di upload come avrdude: stk500_getsync().

  • Se il loopback test fallisce, il problema è molto probabilmente nella parte USB-seriale della scheda o nella comunicazione con il PC. Ciò indica con molta probabilità un adattatore USB-to-TTL seriale danneggiato.
  • Se il loopback test riesce, vuol dire che la scheda comunica con il computer, ma può esserci un problema diverso, ad esempio il bootloader mancante o corrotto.

Su quali schede si può eseguire:

  • Arduino UNO R3 e revisioni precedenti
  • Arduino UNO R3 SMD
  • Arduino Mega 2560 Rev3 e precedenti
  • Arduino Mega ADK Rev3
  • Arduino Nano classico

Come si esegue:

  • scollegare la scheda dal computer;
  • rimuovere shield, moduli e altri collegamenti;
  • collegare RESET a GND;
  • collegare RX a TX;
  • ricollegare la scheda al computer;
  • aprire IDE o Cloud Editor;
  • aprire il Monitor Seriale;
  • scrivere un messaggio e inviarlo. Se il messaggio ritorna subito in uscita, il test è superato.

Perché si collega RESET a GND

Perché così il microcontrollore principale viene tenuto fermo e non esegue nessuno sketch. In questo modo si testa solo il percorso di comunicazione seriale, senza che il programma utente interferisca. Questa è un’inferenza coerente con la procedura ufficiale, che richiede proprio il ponticello RESET-GND insieme a RX-TX.

Perché si collega RX a TX

Perché tutto ciò che entra in ricezione viene immediatamente rimandato in trasmissione: è questo il “ritorno” del loopback. Se inviate, per esempio, ciao, dovreste leggere di nuovo ciao nel monitor seriale.

Attenzione!

Il loopback test fallisce sempre con il chip CH340 usato su alcune schede derivate o compatibili, quindi in quei casi non va interpretato come prova certa di guasto.

Ricordate

Il loopback test è una prova molto utile per rispondere a questa domanda:

“Il computer riesce almeno a parlare correttamente con l’interfaccia seriale della scheda?”

Checklist di controllo

Vi condivido la checklist rapida da tenere a mente quando si verifica il problema avrdude: stk500_getsync():

  • scheda selezionata correttamente;
  • porta corretta;
  • cavo USB dati funzionante;
  • nessun modulo collegato ai pin 0 e 1;
  • monitor seriale chiuso;
  • reset della scheda;
  • nel Nano classico, processore corretto.

Buon Making a tutti 🙂

Esercitazione 4 – Macchina a stati per un ciclo automatico con start, pausa, allarme e reset

Allenamento per l’esame di maturità
Percorso di laboratorio con Arduino per studenti di quinta ITIS

Obiettivo didattico

Modellare un ciclo automatico come macchina a stati: attesa, marcia, pausa, allarme e reset. L’attività avvicina gli studenti al modo in cui si progetta un processo tecnico da esame.

Materiali suggeriti

  • Arduino UNO R3 o UNO R4,
  • 3 pulsanti (START, PAUSA, RESET);
  • 2 LED;
  • 2 Resistori da 220 Ohm (per i LED);
  • jumper.

Schema di collegamento

Richiamo teorico

Una macchina a stati finiti rappresenta un processo come un insieme di stati mutuamente esclusivi. In ogni stato il sistema esegue azioni ben definite e attende eventi che causano il passaggio allo stato successivo. Questo metodo riduce gli errori logici nei programmi complessi.

Schema logico dell’attività

  • All’avvio il sistema è in ATTESA;
  • se arriva START passa a MARCIA;
  • in MARCIA può ricevere PAUSA oppure entrare in ALLARME se scade il tempo massimo;
  • in PAUSA attende una nuova pressione di START;
  • da ALLARME si esce solo con RESET, che riporta il sistema in ATTESA.

Diagramma a stati

Per rappresentare in modo corretto il comportamento di questo esercizio è molto utile affiancare al codice un diagramma a stati. In questo caso, infatti, il sistema non si limita a eseguire istruzioni una dopo l’altra, ma cambia comportamento in funzione della condizione operativa in cui si trova.

Il programma può trovarsi in un solo stato per volta, e ogni stato descrive una precisa fase di funzionamento del sistema. Nel nostro sketch gli stati sono quattro:

  • STATO_ATTESA
  • STATO_MARCIA
  • STATO_PAUSA
  • STATO_ALLARME

Il diagramma a stati è particolarmente adatto a questa situazione perché mostra in modo immediato tre aspetti fondamentali:

  • quali sono gli stati possibili del sistema;
  • quali eventi provocano il passaggio da uno stato all’altro;
  • quale logica di funzionamento è stata implementata nel codice.

In altre parole, mentre il diagramma di flusso descrive bene la sequenza dei controlli svolti nel loop(), il diagramma a stati descrive meglio la struttura logica del processo.

Stato iniziale del sistema

Nel diagramma compare il simbolo iniziale che punta verso STATO_ATTESA. Questo significa che, all’accensione di Arduino o dopo un reset, il sistema parte nello stato di attesa.

In questa fase il ciclo automatico non è attivo. Il LED di marcia è spento, il LED di allarme è spento e il programma controlla continuamente i pulsanti in attesa di un comando di avvio.

Dal punto di vista didattico, questo è il comportamento tipico di molti sistemi automatici: il processo non parte in modo autonomo, ma richiede un comando esplicito dell’operatore.

Transizione da ATTESA a MARCIA

Dal nodo STATO_ATTESA parte una freccia verso STATO_MARCIA con l’etichetta:

START premuto / istanteInizioMarcia = millis()

Questa notazione va letta così: se il sistema si trova in attesa e viene rilevata la pressione del pulsante START, allora il programma passa allo stato di marcia. Durante questa transizione viene anche eseguita un’azione importante, cioè il salvataggio dell’istante iniziale della marcia tramite millis().

Questo passaggio è fondamentale perché permette al sistema di iniziare a contare il tempo trascorso in marcia senza bloccare il programma. In pratica, nel momento in cui parte la marcia, viene memorizzato il riferimento temporale da cui inizierà il controllo del timeout.

Significato dello stato MARCIA

Lo stato STATO_MARCIA rappresenta la fase in cui il sistema è attivo.

In questa condizione il LED di marcia viene acceso, il LED di allarme resta spento e il programma continua a controllare due possibili situazioni:

    • la richiesta di pausa;
    • il superamento del tempo massimo consentito.

Importante: nello stato di marcia il sistema non esegue una sola azione, ma resta in una condizione operativa in cui il programma continua a verificare gli eventi che possono modificare il comportamento complessivo del processo.

Transizione da MARCIA a PAUSA

Se durante la marcia viene premuto il pulsante PAUSA, il sistema passa a STATO_PAUSA.

Questa transizione rappresenta una sospensione del ciclo. Dal punto di vista logico, il processo non è terminato, ma è momentaneamente fermo in attesa di un nuovo comando.

Nel diagramma questa freccia mostra che la pausa può essere richiesta solo quando il sistema si trova effettivamente in marcia. Questo rende molto chiaro un concetto fondamentale: non tutti i comandi hanno senso in tutti gli stati. Il significato di un ingresso dipende dallo stato corrente del sistema.

Transizione da MARCIA a ALLARME

La seconda uscita possibile da STATO_MARCIA conduce a STATO_ALLARME ed è attivata dal superamento del tempo massimo di marcia.

Nel codice questa condizione è realizzata confrontando il tempo attuale, ottenuto con millis(), con l’istante iniziale salvato all’ingresso nello stato di marcia. Quando la differenza raggiunge o supera il valore impostato in TEMPO_MASSIMO_MARCIA, il sistema genera l’allarme.

Questo passaggio è interessante perché mostra come una macchina a stati possa cambiare stato non solo in risposta a un pulsante, ma anche in risposta a una condizione temporale. In molti sistemi automatici reali, infatti, il tempo costituisce un vincolo di sicurezza o di controllo del processo.

Significato dello stato PAUSA

Lo stato STATO_PAUSA rappresenta una sospensione controllata del ciclo.

In questa fase il LED di marcia è spento e il LED di allarme è spento. Il programma non torna allo stato iniziale, ma resta in una condizione intermedia da cui il processo può riprendere.

Dal diagramma si vede che da questo stato esiste una sola transizione utile: la pressione di START, che riporta il sistema in STATO_MARCIA.

È importante però osservare un dettaglio del codice: quando si torna in marcia dalla pausa, il programma esegue di nuovo l’istruzione che salva istanteInizioMarcia = millis(). Questo significa che il conteggio del tempo massimo non viene congelato e poi ripreso, ma riparte da zero.

Questo aspetto è importante, perché aiuta a capire che il diagramma descrive la struttura generale del comportamento, mentre le variabili e le azioni associate alle transizioni determinano il comportamento concreto del sistema.

Significato dello stato ALLARME

Lo stato STATO_ALLARME rappresenta una condizione anomala o di sicurezza.

Quando il sistema entra in allarme, il LED di marcia viene spento e il LED di allarme viene acceso. In questo modo l’operatore può riconoscere immediatamente che il ciclo si è interrotto per il superamento del limite previsto.

Dal diagramma si vede che da STATO_ALLARME non si può tornare direttamente in marcia. L’unica uscita prevista è verso STATO_ATTESA, e questa transizione è attivata dal pulsante RESET.

Anche questa è una scelta molto importante dal punto di vista progettuale: in presenza di un allarme il sistema non riparte automaticamente, ma richiede un intervento esplicito da parte dell’operatore. È una logica tipica dei sistemi in cui la sicurezza o il controllo delle anomalie hanno priorità sulla continuità del funzionamento.

IMPORTANTE

Quando si studiano le macchine a stati è utile distinguere tra:

      • azioni di stato, cioè ciò che il sistema fa mentre si trova in un determinato stato;
      • azioni di transizione, cioè ciò che il sistema esegue nel momento in cui passa da uno stato a un altro.

Nell’esercizio proposto, l’accensione o lo spegnimento dei LED, è un’azione associata allo stato, perché avviene nel blocco di codice relativo a ciascun case.

Il salvataggio di istanteInizioMarcia, invece, è un’azione di transizione, perché viene eseguito nel momento in cui il sistema entra nello stato di marcia.
Questa distinzione è molto utile per comprendere meglio sia il diagramma sia il codice.

Continua a leggere