Progettare bene, programmare meglio: diagrammi di flusso – cos’è il formato Mermaid? – Lezione 2/5

Ripasso di inizio anno – appunti per la classe.

In elettronica e automazione, un errore concettuale spesso costa più tempo di un errore di cablaggio. I diagrammi di flusso aiutano a scomporre il problema in passi elementari, chiarire condizioni e cicli, progettare la logica prima di scrivere il codice. Questo riduce la probabilità di “scrivere e sperare” e mette gli studenti nella condizione di ragionare per stati, condizioni e transizioni: esattamente ciò che serve per gestire sensori (LDR, potenziometri), attuatori (LED, buzzer) e sequenze temporizzate su Arduino.

In classe, partire dal diagramma rende trasparente il legame tra:

  • Analisi del problema > (diagramma);
  • Progettazione > (pseudocodice);
  • Implementazione > (sketch Arduino).

Questa filiera abitua a un metodo di lavoro replicabile, valutabile e condivisibile.

Che cos’è Mermaid

Mermaid è uno strumento open-source che trasforma descrizioni testuali (uno specifico linguaggio “simile al Markdown”) in diagrammi resi automaticamente nel browser. È scritto in JavaScript ed è pensato proprio per “diagrammare come si scrive”: poche righe leggibili, risultato grafico immediato.

Nato come progetto open-source nel 2014 per semplificare la creazione di diagrammi nelle documentazioni tecniche, Mermaid è sviluppato dalla comunità (MIT license) e supporta diversi tipi di diagramma: flowchart, sequence diagram, state diagram, Gantt, ER, class diagram e altri.

Dove funziona (integrazioni utili a scuola)

Mermaid è integrato o supportato nativamente in molte piattaforme usate anche in ambito didattico e progettuale (editor Markdown, wiki, ambienti di sviluppo, appunti digitali). Questo significa che studenti e docenti possono scrivere il diagramma nello stesso file in cui documentano, e vederlo renderizzato senza strumenti pesanti.

Un vantaggio pratico importante: GitHub permette di includere i diagrammi Mermaid direttamente dentro i file Markdown del repository. Per noi significa versionare codice e diagrammi nello stesso posto.

Perché Mermaid è più interessante rispetto ai tool grafici tradizionali

Molti software di disegno (Visio, draw.io, ecc.) producono file binari o complessi da confrontare e unire. Mermaid, invece, produce testo:

  • che viene integrato nella versione con Git insieme allo sketch (storia delle modifiche, differenze riga-per-riga, revisioni);
  • si integra nei flussi “docs-as-code”, cioè il trattare la versione e gli aggiornamenti della  documentazione di progetto come si fa per il codice (documentazione e progetto nello stesso repository);
  • è più veloce da modificare: cambiare una logica significa aggiornare due righe, non ridisegnare frecce e box;
  • è adatto all’automazione (generare diagrammi da script o dati).

Inoltre, per gli studenti è inclusivo: chi fatica con strumenti grafici complessi oppure non è particolarmente allenato nello scrivere codice, può concentrarsi sulla logica invece che sulla formattazione.

Tipi di diagrammi utili nel laboratorio di sistemi con Arduino

  • Flowchart (diagrammi di flusso): progettano il comportamento dello sketch (lettura sensore > confronto con soglia > azione). Perfetti per attività didattiche laboratoriali, come ad esempio con la gestione di: LDR, potenziometri, PWM su LED/buzzer.
  • State diagram (diagrammi di stati): modellano macchine a stati finiti, utili per sistemi reattivi (allarmi luminosi/acustici, sequenze a tempo e molto altro).
  • Sequence diagram: descrivono interazioni nel tempo (Utente > Arduino > Sensore >  Attuatore), utili per chiarire responsabilità e tempi (debounce, ritardi, feedback).
  • Gantt: pianificano attività di laboratorio (ricerca componenti, prototipazione, test, consegna), favorendo un’organizzazione realistica del progetto.
  • ER diagram: modellano dati (es. datalogger con tabelle misure, sensori), utile quando il progetto prevede salvataggi su SD/PC e successiva analisi.

Un flusso di lavoro consigliato (didattico e “versionabile”)

Di seguito trovate il flusso di lavoro che bisognerebbe adottare nello sviluppo di un sistema con Arduino e non solo, ovviamente è suscettibile di modifiche, ma percorrendo i 6 punti molto probabilmente il vostro progetto funzionerà, o come diceva un mio caro amico probabilmente “funzionicchierà” 🙂

  1. Definisci il comportamento atteso del sistema (requisiti minimi e soglie).
  2. Scrivi il flowchart in Mermaid (anche direttamente nel README del progetto).
  3. Aggiungi lo state diagram se il comportamento è meglio descritto per stati.
  4. Deriva lo pseudocodice riga-per-riga dal diagramma.
  5. Implementa lo sketch Arduino e committa insieme a diagrammi e note.
  6. Versiona su GitHub e usa pull request per rivedere sia codice che diagrammi (il diff testuale evidenzia le modifiche di logica).

Esempio pratico

Vediamo ora un esempio minimale pratico che conduce dal diagramma di flusso allo sketch

flowchart TD
A[Start] --> B[Leggi LDR A0]
B --> C{v < soglia?}
C -- Si --> D[LED ON]
C -- No  --> E[LED OFF]
D --> B
E --> B

Lettura della LDR, confronto a soglia, attivazione LED: lo schema diventa facilmente uno sketch con analogRead(), confronto, digitalWrite(). Questo ponte chiaro tra diagramma e codice rende la progettazione più rigorosa e la correzione più rapida.

Strumenti gratuiti per generare il diagramma di flusso

E’ possibile utilizzare diversi software gratuiti o semi-gratuiti che vi consentono di scrivere la descrizione del diagramma e lo traducono immediatamente in un grafico, vi segnalo due software

Mermaid Live Editor

Mermaid Live Editor (browser, nessuna installazione). Accedendo all’applicativo web scriverete sulla sinistra della pagina e se la descrizione del grafico è ben scritta e formatta, vedrete il diagramma a destra della pagina. Sarà possibile esporta in PNG/SVG. Ottimo per le prime esercitazioni.
Per la documentazione ufficiale di Mermaid Live Editor seguite il link.

Drawio

Un altro software credo già molto impiegato nella scuola è draw.io che può essere integrato all’intero degli applicativi Google come estensione oppure potete utilizzare direttamente collegandovi al sito di riferimento drawio.com.
Utilizzare l’applicativo è estremamente semplice e l’importazione di un grafico Mermaid potete farlo seguendo il percorso: Organizza > Inserisci > Mermaid… si aprirà un pannello in cui inserire il testo Mermaid.
L’uso di drawio facilita maggiormente l’editing, in quanto le modifiche avvengono su un editor grafico, pertanto l’orientamento delle frecce di collegamento tra i blocchi, spessori di linee, aggiunte di blocchi ed altro sono probabilmente più semplici, quindi probabilmente potrebbe essere utile insegnare a scrivere il testo Mermaid e poi rielaborarlo in drawio.

Nella prossima lezione vedremo come passare dal diagramma di flusso allo pseudocodice su problemi della vita comune.

Buona progettazione a tutti 🙂

Aggiornare il firmware dell’Arduino UNO R4 WiFi

Con l’aiuto di alcuni studenti procederò nelle prossime mattinate all’aggiornamento del firmware del modulo di connettività ESP32-S3 dell’Arduino UNO R4 WiFi, questa operazione è necessaria perché la scheda venga riconosciuta correttamente dagli strumenti di sviluppo (Arduino IDE, Arduino Cloud) e per usare le funzioni di rete.

Poiché questa operazione verrà effettuata su una grande quantità di schede, ho preferito scriverne un post che i ragazzi potranno seguire, in ogni caso il riferimento ufficiale è la documentazione del sito Arduino da cui ho estrapolato la guida.

Metodo consigliato — da Arduino IDE (2.2.1 o successivo)

1 – Collega l’UNO R4 WiFi al PC con un cavo USB-C dati e aprite Arduino IDE 2.

2 – Se avevate aperto Serial Monitor o Plotter, chiudetele.

3 – Andate su StrumentiAggiornamento del firmware.

4 – Nel menu a tendina selezionare “UNO R4 WiFi” e premete sul pulsante “VERIFICA AGGIORNAMENTI“. Se la scheda non compare, verificate il cavo/porta, provate a premere il pulsante RST. Se ancora non appare, potrebbe mancare il firmware del bridge USB: usate la procedura di ripristino indicata seguendo questo link.

5 – Dal menu a discesa: “Seleziona la versione del firmware” scegliere l’ultima disponibile e fate clic su “INSTALLA“.

Nota importante: l’installazione sovrascrive lo sketch presente sulla scheda.

6 – Attendete il messaggio “Firmware correttamente installato” (in basso a sinistra, guardate l’immagine che segue)

7 – Scollegate e ricollega la scheda dal PC (passaggio fondamentale)
Finché non la scollegate e ricollegate, la scheda resta in ESP Download mode; se caricate uno sketch in questo stato, rischiate di cancellare il firmware del bridge USB.

8 – Chiudete la finestra dell’ “Aggiornamento del firmware” facendo clic in alto a destra. A questo punto la scheda dovrebbe essere rilevata correttamente e pronta per essere programmata.

Nel caso in cui il l’aggiornamento non va a buon fine bisogna procedere con l’aggiornamento manuale, in tal caso la guida ufficiale è quella che trovate al seguendo il link: Restore the USB connectivity firmware on UNO R4 WiFi with espflash di cui dettaglio i passi di seguito. Continua a leggere

Comprensione del testo tecnico – Escape game didattico con BBC micro:bit V2 – icebreaker per l’inizio dell’anno scolastico

Grazie ai molti colleghi che hanno apprezzato l’idea del gioco presentata nel post “Comprensione del testo tecnico – Escape game didattico con Arduino UNO R4 – icebreaker per l’inizio dell’anno scolastico“. In diversi mi avete chiesto una proposta analoga per BBC micro:bit V2: ho quindi riadattato un paio di esercizi di base.

Le motivazioni della creazione di un escape game di questo tipo sono le medesime di quelle indicate nel post indicato sopra.

Questa attività è il primo tassello di un percorso più ampio che presenterò nel mio prossimo corso per Tecnica della Scuola, “Carta, Cartone e Coding“, il corso a fine ottobre, con contenuti aggiornati rispetto alle edizioni precedenti. Se vi interessa restare informati, iscrivetevi alle novità tramite il box:  “Iscriviti al blog tramite email” che trovate nella colonna destra del sito.

Condivido anche il Google Site che ospita il gioco: ho mantenuto un’ambientazione fantascientifica perché è lo stile che preferisco, ma ovviamente potete personalizzarla a piacere. Il nome Aurora-β richiama un mio precedente escape, Aurora-α.

Blackout sull’astronave Aurora-β

Spero che questa versione vi sia utile in classe.

Buon coding a tutti! 🙂

Quick References per lo studio – Metodo Cornell

Il Metodo Cornell non è solo un modo “ordinato” per prendere appunti: è una struttura che trasforma la lezione in un percorso di studio già pronto.

Dividendo la pagina in Cue (parole-chiave/domande), Note (annotazioni essenziali) e Sintesi (3–4 frasi finali), costringe a selezionare, collegare e riformulare le tre operazioni che fissano davvero le informazioni in memoria.

È utile in tutte le materie, dalle spiegazioni frontali all’analisi di testi, fino ai video. Funziona bene con studenti che faticano nell’organizzazione: rende visibile il “cosa è importante” e scandisce i tempi (durante, subito dopo, nei giorni successivi).

In classe l’insegnante può proporlo come routine: appunti brevi, pausa di 5–10 minuti per compilare le Cue, chiusura con la Sintesi. Al momento del ripasso, gli studenti coprono la colonna Note e rispondono alle Cue: è retrieval practice integrata nel quaderno.

Come compilare il foglio di lavoro – guida

Struttura della pagina

  • Colonna Cue (sx): parole-chiave e domande guida.
    Suggerimento dimensioni A4: ~6–7 cm (≈30% della larghezza).
  • Colonna Note (dx): appunti essenziali, schemi, formule, esempi.
    Suggerimento dimensioni A4: ~13–14 cm (≈70%).
  • Sintesi (in basso): 3–5 frasi che rispondono a: Che cosa ho imparato? Perché conta? Come si collega ad altro?

IMPORTANTISSIMO: brevi frasi, elenchi puntati, frecce e simboli, evitare il “romanzo”.

Metodo Cornell – fonte: wikipedia

Procedura che consiglio (timeline)

Durante la lezione

  • Scrivi nella colonna Note: parole-chiave, schemi, esempi minimi.
  • Lascia vuota la colonna Cue.

Entro 5–10 minuti dalla fine

  • Compila le Cue: trasforma i titoli in domande (Perché…? Come…? Qual è la differenza…?).
  • Evidenzia 3 idee centrali con un ● o ★ nella colonna Note.

Entro 24 ore

  • Scrivi la Sintesi (3–5 frasi).
  • Fai un giro di richiamo attivo: copri le Note e rispondi alle Cue a voce o per iscritto.

Ripassi successivi

  • Usa le Cue per sessioni di 5–8 minuti a 1–3–7–14 giorni (ripetizione spaziata).
  • Quando una Cue è “facile”, allunga l’intervallo; se è “difficile”, accorcialo.

Come si scrivono delle Cue efficaci

Fai domande che costringono a spiegare/collegare:

  • Perché … ? / Come … ?
  • Qual è la differenza tra A e B?
  • Quale formula uso quando… e perché?
  • Quale esempio reale dimostra…?
  • Che errore tipico si commette in…?

Evitare Cue generiche tipo “definizione”, “formule”: è importante renderle mirate.

Scarica PDF A4 della guida operativaApri il sorgente Markdown su GitHub

Se non sai cos’è il Markdown segui il link

---
title: "QR – Metodo Cornell"
version: "1.0"
autore: "Classe/Studente"
licenza: "CC BY 4.0"
ultimo_aggiornamento: "01-09-2025"
---

## Tema / Lezione


## Cue (domande / parole-chiave)
- 
- 
- 

## Note (appunti brevi)
- 
- 
- 

## Sintesi (in 3–4 frasi)


## Ripasso attivo (spaziatura)
- Giorno 1: 
- Giorno 3: 
- Giorno 7: 

Vediamo ora qualche esempio compilato con alcuni argomenti.

01 – Elettronica – Legge di Ohm

Cue (sx)

  • Cos’è R e unità di misura?
  • Quando uso V=I·R?
  • Differenza tra resistenza e resistività
  • Errore tipico nel calcolo

Note (dx)

  • Legge di Ohm: V (volt) = I (ampere) · R (ohm, Ω)
  • R dipende da materiale, lunghezza, sezione → ρ·L/A
  • Se V costante ↑R ⇒ ↓I (proporz. inversa)
  • Errore tipico: unità sbagliate (mA ↔ A)

Sintesi
La Legge di Ohm lega tensione, corrente e resistenza. Per calcoli corretti: unità coerenti e attenzione a ρ·L/A quando la geometria cambia.

02 –  Italiano – Analisi del testo poetico

Cue

  • Tema centrale?
  • Figure retoriche principali?
  • Tono e ritmo come influenzano il significato?
  • Collegamento a contesto storico

Note

  • Tema: memoria/tempo
  • Metafora ricorrente dell’acqua
  • Enjambement = sospensione → crea attesa
  • Collocazione: primo Novecento, ermetismo

Sintesi
Il testo usa metafore d’acqua ed enjambement per esprimere la precarietà del tempo; l’ermetismo spiega densità e allusioni.

03 – Storia – Rivoluzione francese (cause)

Cue

  • Cause economiche vs sociali
  • Ruolo degli Stati Generali
  • Perché la presa della Bastiglia è simbolica?

Note

  • Crisi fiscale; carestie 1788–89
  • 3° stato chiede voto per testa → Assemblea Nazionale
  • Bastiglia: simbolo dispotismo, armi e polvere

Sintesi
Cause intrecciate economico-sociali e crisi politica; Bastiglia segna la rottura simbolica col passato monarchico.

Integrare il metodo Cornell con il Spaced Learning e Retrieval Practice

Per rendere più efficace il proprio studio:

  • traformare ogni Cue in una flashcard (fronte = domanda, retro = risposta breve);
  • pianifica ripassi 1–3–7–14 giorni usando solo le Cue: copri le Note e prova a ricordare;
  • se non ricordate, non rileggere subito: provate a ricostruire dagli indizi; poi controllate e correggete.

Progettare bene, programmare meglio: diagrammi di flusso – Lezione 1/5

Ripasso di inizio anno – appunti per la classe.

Perché bisogna imparare a realizzare i diagrammi di flusso (anche se “programmiamo poco”)?

Quando progetti un programma per Arduino, il problema più grande non è scrivere le parentesi giuste: è decidere l’ordine delle azioni e quando prendere decisioni. Un diagramma di flusso è un disegno semplice che mostra i passi da compiere, le scelte “sì/no” e l’ordine in cui tutto accade. È usato in informatica da decenni proprio per rappresentare, passo-passo, il comportamento di un algoritmo o di un processo.

Un flowchart ti aiuta a vedere il programma prima di scriverlo: rettangoli per le azioni (es. “accendi LED”), rombi per le domande (es. “pulsante premuto?”), ovali per inizio/fine, parallelogrammi per ingresso/uscita di dati, frecce per la direzione. L’idea è sempre quella: dall’alto verso il basso, una freccia alla volta, fino all’uscita. Questa notazione è diventata uno standard di fatto e, nelle versioni “complete”, include molte altre forme utili (ne esistono decine); noi useremo solo quelle essenziali.

Dove si usano e perché ci interessano in laboratorio di sistemi

I diagrammi di flusso non servono solo a chi programma: si usano per documentare, spiegare e migliorare processi in tanti contesti (scuola, aziende, sanità, logistica). Nel nostro laboratorio li usiamo per tradurre un problema reale (una luce che si accende, un sensore che decide) in una sequenza chiara. Questo approccio è lo stesso che trovi nel project management: rappresentare un processo rende più facile pianificare, allineare il team e trovare i colli di bottiglia.

Esistono poi varianti “cugine” dei flowchart che potresti incontrare:

  • Workflow (flusso di lavoro), molto usato per capire chi fa cosa e quando;
  • Swimlane (corsie), utile quando più persone o sottosistemi collaborano;
  • Data Flow Diagram / DFD (flusso di dati), focalizzato su come circolano i dati tra parti di un sistema.

Noi partiamo dal flowchart di base (azioni/decisioni) perché è il ponte più diretto verso il codice Arduino

Buone pratiche “da prima riga di codice”

  • Definisci il problema in una frase (“Cosa voglio ottenere?”).
  • Elenca i passi e le decisioni (domande “sì/no”).
  • Disegna il flusso con poche forme standard (Inizio > Azioni > Decisioni > Fine).
  • Cerca le inefficienze: passaggi inutili, decisioni doppie, attese esagerate.
  • Condividi e rivedi: il diagramma è un documento vivo; aggiornatelo quando cambi idea.

Questa routine è identica a quella usata nei team professionali quando costruiscono o migliorano un processo.

Dalla carta al digitale (e al testo)

Puoi disegnare su carta, usare strumenti visuali come Lucidchart o Miro (trascini le forme e colleghi con frecce), oppure scrivere i diagrammi come testo con Mermaid (“diagram as code”), che si integra bene nei siti e nelle note tecniche. In questa lezione useremo Mermaid proprio per abituarci a ragionare prima in blocchi, poi in pseudocodice, poi in C/C++ per Arduino.

Mappa veloce “flowchart > Arduino”

Inizio / Setup > setup(): qui imposti i pin come INPUT/OUTPUT.
Azione → istruzioni come digitalWrite(), analogWrite(), tone().
Decisione (rombo) > if (...) { ... } else { ... }, spesso con letture da sensori: digitalRead(), analogRead().
Ciclo > loop() che ripete le azioni in sequenza.
Questa corrispondenza 1:1 rende naturale “tradurre” il disegno in codice, riducendo gli errori e il tempo di debug. (Rivedremo questa mappa in ogni esempio pratico.)

Cosa evitare all’inizio

  • Frecce che si incrociano: rendono il percorso confuso.
  • Domande ambigue: un rombo = una domanda con risposta sì/no chiara.
  • Simboli inventati: resta su 4–5 forme standard; andrai veloce e capirai tutto al volo.
  • Salti di logica: se ti perdi, torna ai passi del processo (definisci > elenca > disegna > verifica).

Un buon diagramma di flusso è come una ricetta: indica ingredienti (sensori/attuatori), passaggi (azioni), domande al cuoco (“la pasta è al dente?” > sì/no). Se la ricetta è chiara, il codice funziona e tutti in team capiscono cosa fare.

Nota per i lettori (studenti e non): nei paragrafi successivi troverai la pipeline completa che useremo sempre: Problema > Diagramma (Mermaid) > Pseudocodice > Sketch Arduino, con esempi concreti (LED, pulsante, LDR, buzzer). Questa struttura è pensata per classi che iniziano: potete seguirla anche se non hai mai scritto una riga di codice.

Simboli nei diagrammi di flusso: poche forme bastano

L’elenco delle forme può sembrare infinito, ma non serve conoscerle tutte. Ogni simbolo indica un tipo di passaggio preciso e ha un contesto d’uso ben definito. Quando disegni, se ti senti perso, torna all’essenziale: per la grande maggioranza dei diagrammi bastano davvero alcune forme base; le altre servono in casi specifici. Qui sotto trovi quelle più ricorrenti.

Forme comuni del flowchart

Simbolo del diagramma di flusso Nome Descrizione
Inizio/Fine Segna il punto di avvio o la conclusione del flusso; delimita i confini del processo.
Processo / Azione Indica un passo operativo: un’attività, una funzione o un’elaborazione che “fa qualcosa”.
Decisione Rappresenta una domanda binaria (sì/no, vero/falso) che dirama il percorso su esiti diversi.
Input/Output (Dati) Mostra un ingresso (dato in arrivo, misura, comando) o un’uscita(risultato, messaggio, documento).
Linea di flusso Definisce la direzione della sequenza tra le forme; chiarisce l’ordine dei passi.
Sottoprocesso / Processo predefinito Collega a una procedura già definita altrove o a un gruppo di azioni consolidate.
Connettore in pagina Unisce parti lontane dello stesso schema senza incrociare frecce; migliora la leggibilità.
Connettore fuori pagina Collega a un continua su un’altra pagina; spesso include un riferimento o un codice.
Documento Indica la produzione o l’uso di un documento (ordine, report, lettera, promemoria).
Documenti multipli Come sopra, ma per più documenti generati/gestiti nello stesso passaggio.
Input manuale L’utente digita o inserisce dati a mano (es. login, compilazione di un campo).
Operazione manuale Passo che richiede intervento umano (non automatizzato) per proseguire.
Database / Archivio dati Dati archiviati in modo strutturato e interrogabili (lettura/scrittura/filtri).
Memoria interna Dati conservati all’interno del sistema/dispositivo durante l’elaborazione.
Attesa / Ritardo Indica una pausa temporale o un ritardo prima del passo successivo.
Commento / Nota Aggiunge chiarimenti al lettore; si collega con linea tratteggiata alla parte pertinente.

Alcune varianti di forma e naming possono cambiare leggermente a seconda dello strumento o dello standard adottato; l’insieme di base rimane comunque coerente tra le principali piattaforme.

Nella prossima lezione vedremo quali tool utilizzare per disegnare diagrammi di flusso.

Buon Coding a tutti 🙂