Archivi tag: didattica laboratoriale

Esercitazione 3 – Scheduler cooperativo con tre task e supervisione dei tempi

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

Obiettivo didattico

Organizzare il programma come scheduler cooperativo con tre task indipendenti: acquisizione analogica, lampeggio di stato e trasmissione seriale periodica. L’attività mostra come il loop() possa diventare un piccolo supervisore software.

Materiali suggeriti

  • Arduino UNO R3 o UNO R4;
  • 1 potenziometro;
  • 2 LED;
  • 2 resitori (per i LED);
  • breadboard;
  • cavetti jumper.

Schema di collegamento

Richiamo teorico

In un sistema embedded semplice non si usa un vero sistema operativo, ma si può costruire uno scheduler cooperativo con millis(). Ogni task possiede il proprio intervallo e il proprio istante dell’ultima esecuzione. Il loop() controlla se ciascun task è pronto e lo richiama.

Schema logico dell’attività

Il programma inizializza i timer dei tre task. Nel loop legge il tempo corrente e verifica uno dopo l’altro se è il momento di eseguire il task di acquisizione, quello di segnalazione e quello di stampa seriale. Se il tempo non è scaduto, passa al controllo successivo.

Diagramma di flusso

Diagramma di flusso Mermaid

flowchart TD
    A[Inizio] --> B[Configura pin, seriale e timer]
    B --> C[Leggi tempo attuale]
    C --> D{Task acquisizione pronto?}
    D -- Sì --> E[Esegui acquisizione]
    D -- No --> F{Task LED pronto?}
    E --> F
    F -- Sì --> G[Commuta LED di stato]
    F -- No --> H{Task seriale pronto?}
    G --> H
    H -- Sì --> I[Invia dati in seriale]
    H -- No --> J[Ritorna al loop]
    I --> J
    J --> C

Programma

/*
  Prof. Maffucci Michele
  Esercizio 3: scheduler cooperativo con tre task indipendenti
*/

const int PIN_SENSORE = A0;
const int PIN_LED_STATO = 8;
const int PIN_LED_SOGLIA = 9;

// ---------------------------
// Intervalli dei tre task
// ---------------------------
const unsigned long PERIODO_ACQUISIZIONE = 50;
const unsigned long PERIODO_LED = 300;
const unsigned long PERIODO_SERIALE = 500;

// ---------------------------
// Istanti ultima esecuzione
// ---------------------------
unsigned long ultimoTaskAcquisizione = 0;
unsigned long ultimoTaskLed = 0;
unsigned long ultimoTaskSeriale = 0;

// ---------------------------
// Variabili condivise
// ---------------------------
int valoreGrezzo = 0;
float tensione = 0.0;
bool statoLed = false;

void setup() {
  pinMode(PIN_LED_STATO, OUTPUT);
  pinMode(PIN_LED_SOGLIA, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // Il loop assume il ruolo di piccolo scheduler.
  unsigned long adesso = millis();

  // ---------------------------
  // Task 1: acquisizione
  // ---------------------------
  if ((adesso - ultimoTaskAcquisizione) >= PERIODO_ACQUISIZIONE) {
    ultimoTaskAcquisizione = adesso;
    taskAcquisizione();
  }

  // ---------------------------
  // Task 2: LED di stato
  // ---------------------------
  if ((adesso - ultimoTaskLed) >= PERIODO_LED) {
    ultimoTaskLed = adesso;
    taskLed();
  }

  // ---------------------------
  // Task 3: seriale
  // ---------------------------
  if ((adesso - ultimoTaskSeriale) >= PERIODO_SERIALE) {
    ultimoTaskSeriale = adesso;
    taskSeriale();
  }
}

// ----------------------------------------------------------
// Legge il sensore e calcola una tensione equivalente.
// ----------------------------------------------------------
void taskAcquisizione() {
  valoreGrezzo = analogRead(PIN_SENSORE);

  // Conversione esplicita ADC -> tensione.
  tensione = (valoreGrezzo * 5.0) / 1023.0;

  // Uso della misura per attivare un LED di soglia.
  if (tensione >= 2.50) {
    digitalWrite(PIN_LED_SOGLIA, HIGH);
  } else {
    digitalWrite(PIN_LED_SOGLIA, LOW);
  }
}

// ----------------------------------------------------------
// Task di segnalazione periodica.
// ----------------------------------------------------------
void taskLed() {
  if (statoLed == false) {
    statoLed = true;
    digitalWrite(PIN_LED_STATO, HIGH);
  } else {
    statoLed = false;
    digitalWrite(PIN_LED_STATO, LOW);
  }
}

// ----------------------------------------------------------
// Task di comunicazione seriale.
// ----------------------------------------------------------
void taskSeriale() {
  Serial.print("ADC = ");
  Serial.print(valoreGrezzo);
  Serial.print("  Tensione = ");
  Serial.print(tensione, 2);
  Serial.println(" V");
}

Continua a leggere

Capire prima di costruire: una nuova serie di elettrotecnica ed elettronica

Un percorso per chiarire i concetti fondamentali e lavorare in laboratorio con maggiore consapevolezza.

Chi frequenta da tempo questo sito sa che qui trovano spazio soprattutto articoli approfonditi: lezioni estese, tutorial dettagliati, schemi, immagini, codice, proposte operative per il laboratorio e percorsi pensati per la didattica.

L’obiettivo, in queste pagine, è sempre stato quello di affrontare gli argomenti con attenzione, provando a costruire materiali chiari, solidi e riutilizzabili per studenti, docenti, appassionati e maker.

Proprio per questo, può forse sorprendere la nascita di una nuova serie di post più brevi. Eppure questa scelta non nasce da un cambio di rotta, né da una riduzione delle ambizioni didattiche. Nasce, al contrario, da un’esigenza molto concreta che negli ultimi anni è diventata sempre più evidente: per affrontare bene i temi più complessi, bisogna avere chiari i concetti fondamentali.

Da anni lavoro soprattutto con studenti del triennio dell’ITIS, in particolare delle classi quarte e quinte. Più recentemente, però, mi è capitato sempre più spesso di accompagnare anche studenti del biennio, molti dei quali mostrano un entusiasmo autentico verso l’uso di Arduino e desiderano progettare dispositivi, automazioni e piccoli sistemi anche piuttosto articolati.

Questo entusiasmo è prezioso. Curiosità, desiderio di costruire, voglia di sperimentare: sono spesso il miglior punto di partenza possibile per avvicinarsi all’elettronica e all’automazione.

Accanto a questo slancio iniziale, però, nel lavoro quotidiano in laboratorio emerge con chiarezza anche un altro aspetto: le nozioni di base dell’elettrotecnica e dell’elettronica non sempre sono sufficientemente stabili e consapevoli.

Capita così che termini come tensione, corrente, resistenza, massa, polarità, collegamento in serie e in parallelo, uso corretto del multimetro o funzione di una resistenza di pull-up vengano utilizzati in modo intuitivo, ma non pienamente compresi.

Molti dei temi che compariranno in questa serie nascono proprio dalle domande ricorrenti che gli studenti più giovani mi pongono durante le lezioni e le attività di laboratorio. Ho voluto raccogliere quei dubbi, quelle richieste di chiarimento e quelle incertezze che emergono con maggiore frequenza per trasformarle in un percorso ordinato, accessibile e utile anche al di fuori della classe.

Ed è precisamente da questa osservazione che nasce l’idea della nuova rubrica.

Molto spesso, infatti, la difficoltà non sta soltanto negli argomenti avanzati, ma nel fatto che i fondamenti vengono incontrati presto, usati presto, ma non sempre assimilati con la necessaria profondità. Così può accadere che uno studente riesca a montare un circuito, caricare uno sketch e vedere un sistema funzionare, ma fatichi poi a spiegare che cosa stia realmente accadendo dal punto di vista elettrico. E senza questa comprensione, anche le attività più motivanti rischiano di restare fragili.

Per questo ho deciso di affiancare ai tutorial più articolati una serie di lezioni brevi, chiare e mirate, pensate per tornare sui concetti essenziali con un linguaggio accessibile, ma senza rinunciare al rigore.

Saranno testi più snelli nella forma, ma costruiti con la stessa attenzione che riservo ai contenuti più estesi: attenzione ai dubbi reali degli studenti, agli errori ricorrenti, alle semplificazioni fuorvianti e ai passaggi che, se trascurati, rendono più difficile tutto ciò che viene dopo.

A questa scelta si lega anche una riflessione sul formato.

So bene che oggi il video è uno strumento potente, immediato e molto efficace sotto molti aspetti. Non ho nulla contro questa forma di comunicazione, che anzi può essere molto utile in diversi contesti. Tuttavia, realizzare video con continuità richiede tempi di progettazione, registrazione, montaggio e revisione che, almeno in questa fase, non riesco a sostenere in modo regolare. Ma il punto, per me, non è soltanto organizzativo.

Da sempre prediligo la lezione scritta.

La scrittura mi obbliga a rallentare, a ordinare meglio le idee, a scegliere con maggiore precisione le parole e a riflettere più a fondo sul modo in cui un concetto può essere spiegato. Ogni testo diventa così non solo un contenuto da pubblicare, ma anche una traccia di lavoro, una struttura didattica, un riferimento che posso riprendere, sviluppare e collegare ad altri argomenti nel tempo. In questo senso, le lezioni scritte funzionano per me anche come uno storyboard permanente: aiutano chi legge, ma aiutano anche me a costruire percorsi più coerenti.

C’è poi un secondo aspetto che considero importante.

Nel caso di argomenti tecnici di base, credo che leggere un testo mentre si osserva uno schema, si prende un appunto, si prova un collegamento, si misura un valore o si monta un piccolo circuito possa essere estremamente formativo. Il testo scritto ha un ritmo diverso: permette di fermarsi, tornare indietro, rileggere, verificare, annotare, confrontare subito teoria e pratica. Non impone velocità, lascia spazio al tempo dell’apprendimento.

Non penso affatto che il testo debba sostituire il video in assoluto. Penso però che, almeno per alcuni apprendimenti fondamentali, la combinazione tra lettura, riflessione e azione pratica sia particolarmente efficace. In un contesto in cui siamo sempre più abituati a fruire contenuti rapidamente, riprendere un passo più lento può sembrare controcorrente, eppure, proprio questa lentezza consente spesso di fissare meglio i concetti e di trasformarli in competenza reale.

Questa nuova serie, dunque, non nasce per sostituire gli articoli lunghi, né per semplificare artificialmente i contenuti. Nasce per affiancarli e per offrire un percorso di accesso più graduale a studenti, principianti e lettori curiosi che desiderano chiarire bene i fondamenti prima di affrontare temi più complessi.

Ogni post sarà costruito attorno a una domanda semplice o a un nodo concettuale essenziale. L’obiettivo sarà spiegare in modo comprensibile, ma corretto, un singolo aspetto dell’elettrotecnica o dell’elettronica, cercando di collegarlo, quando possibile, a situazioni reali di laboratorio, a esempi concreti o a errori frequenti da evitare.

Questa serie è pensata soprattutto per:

  • studenti che stanno iniziando;
  • docenti che cercano spiegazioni sintetiche ma affidabili da riprendere in classe;
  • appassionati e maker che desiderano chiarire alcuni concetti di base;
  • lettori che preferiscono contenuti brevi, ma non superficiali.

Continuo a credere che, soprattutto nelle discipline tecniche, spiegare bene le basi sia un lavoro importante quanto affrontare gli argomenti più avanzati. Anzi, spesso è proprio dalla qualità delle fondamenta che dipende la possibilità di comprendere davvero tutto il resto.

Per questo motivo, accanto ai tutorial più ampi e strutturati, da oggi troveranno spazio anche queste brevi lezioni essenziali, pensate per rendere più accessibili i concetti fondamentali dell’elettrotecnica e dell’elettronica e per accompagnare, un passo alla volta, chi sta iniziando questo percorso.

Da dove partirà la serie

Questa collezione di lezioni è attualmente in costruzione e si svilupperà progressivamente a partire da alcuni concetti fondamentali che, nell’attività di laboratorio, si rivelano spesso decisivi per comprendere davvero ciò che si sta facendo.

Tra i primi temi che intendo affrontare ci sono:

  • differenza tra tensione, corrente e resistenza;
  • perché un LED ha bisogno di una resistenza in serie;
  • che cosa significa GND in un circuito;
  • collegamento in serie e in parallelo;
  • che cos’è un cortocircuito e perché è pericoloso;
  • a cosa serve il multimetro e come iniziare a usarlo;
  • pull-up e pull-down;
  • differenza tra segnale analogico e digitale.

Il percorso crescerà nel tempo, anche a partire dalle difficoltà più frequenti che emergono durante le attività pratiche e dalle domande ricorrenti degli studenti.

Spero che questa nuova formula possa essere utile.

Come sempre, osservazioni, suggerimenti e proposte di temi da affrontare saranno molto ben accetti.

Buona lettura e buon lavoro 🙂

STEAM-BOX: Il laboratorio STEAM in valigetta

Quattro valigette componibili, basate su making, gamification, sensori e AI, per realizzare attività personalizzabili per ogni classe e disciplina.

STEAM-BOX è un corso online dedicato ai docenti della secondaria di I e II grado che trasforma una semplice valigetta di cartone in un vero laboratorio STEAM portatile. Partendo dal making e arrivando a sensori, robotica, piccole applicazioni di intelligenza artificiale “leggera” e dinamiche di gioco/escape, il percorso mostra come progettare attività coinvolgenti e personalizzabili per qualsiasi disciplina, anche senza competenze tecniche avanzate. Sono previsti 4 incontri in webinar (per un totale di 8 ore), con materiali operativi, template e schede riutilizzabili direttamente in classe.

Durante il corso i partecipanti impareranno a progettare e costruire la propria valigetta: struttura in cartone rinforzata, pannello frontale modulare con LED, pulsanti e jack per sensori, coperchio “attivo” per puzzle e meccanismi di gioco. Da lì si passerà a esempi concreti di attività: micro-indagini con sensori e data logging, piccole sfide di robotica “dal coperchio”, escape room analogico-digitali e utilizzo consapevole dell’IA in classe, con particolare attenzione all’inclusione, alla valutazione formativa e alla documentazione del lavoro degli studenti.

Dietro le quinte 🙂

Progetto HÉLIOS – Faro Stratosferico

Siamo nel 2076, un faro stratosferico (Faro N-7) è fuori uso e solo una console remota può riattivarlo. Ogni gruppo di studenti controlla un modulo diverso della console (Energia, Calibrazione, Stabilità, Segnale, Sicurezza, Sincronismo). A ciascun gruppo viene assegnata una Carta-Quesito collegata a una specifica tematica della disciplina scelta dal docente (es. fisica, storia, lingue, ecc.): se la risposta è corretta, il gruppo imposta il proprio interruttore su ON, altrimenti lo lascia su OFF. Inserita la chiave nel pannello SYSTEM ACTIVATION e premuto START, gli studenti hanno poco tempo per coordinarsi e, alla fine, premere CHECK: se tutti i moduli sono nella configurazione giusta, il sistema HÉLIOS si riavvia; in caso contrario, avranno un secondo e ultimo tentativo prima dell’arresto di sicurezza.
Questa è solo una delle tante attività che verranno presentate: durante il corso vedremo come costruire meccanismi simili anche con materiali poveri (carta, cartone, pulsanti, interruttori, lampadine) e, quando utile, con piccola elettronica low-cost, così che ogni docente possa adattare facilmente le idee alla propria realtà di classe.

Calendario del corso

  • Martedì 25 novembre 2025 – Dalle 17.00 alle 19.00
  • Mercoledì 3 dicembre 2025 – Dalle 17.00 alle 19.00
  • Martedì 9 dicembre 2025 – Dalle 17.00 alle 19.00
  • Mercoledì 17 dicembre 2025 – Dalle 17.00 alle 19.00

Per maggiori informazioni sul programma e l’iscrizione seguite il LINK.

Vi aspetto 🙂

Puntata 3/3 : Invio dati da micro:bit alla piattaforma IoT ThingSpeak mediante modulo WiFi esp01

Collegare il modulo ESP01 e visualizzare i dati dei sensori

La scheda ESP01 consente di trasferire i dati rilevati dai sensori connessi al micro:bit mediante la connessione WiFi. Questa scheda può essere utilizzata anche con altri tipi di microcontrollori.

Il dispositivo deve essere alimentato mediante una tensione di 3,3 V, questa non potrà essere quella del micro:bit in quanto la corrente necessaria per il suo funzionamento non può essere erogata dal micro:bit, avremo necessità di un alimentatore esterno. E’ sufficiente utilizzare un alimentatore da breadboard in grado di erogare una corrente massima di 700 mA. L’alimentatore da breadboard è fornito di jumper in grado di selezionare la tensione applicata sulle linne verticale di alimentazione della breadboard

Realizzazione circuito

  • 3V3 -> 3,3 V tensione di alimentazione
  • GND -> Ground
  • RX -> pin per la ricezione dei dati
  • TX -> pin pe la trasmissione dei dati
  • EN -> per abilitare o disabilitare la scheda
  • RST -> Reset
  • IO0 -> Pin di input/output 0
  • IO2 -> Pin di input/output 2

Effettuare i seguenti collegamenti tra Esp01 e micro:bit

  • TX -> P1
  • GND -> GND (comune tra Esp01 e miro:bit)
  • EN -> 3,3V (forniti dall’alimentatore)
  • 3V3 -> 3,3V (forniti dall’alimentatore)
  • RX -> P0

Continua a leggere

Puntata 2/3 : Invio dati da micro:bit alla piattaforma IoT ThingSpeak mediante modulo WiFi esp01

Creazione del programma nel MakeCode Editor

In questa seconda lezione vedremo come creare il programma che ci permetterà di inviare i dati rilevati dai sensori connessi al micro:bit su ThingSpeak.

Dalla pagina del MakeCode fate clic su +

Assegnare un nome al programma

All’interno dell’ambiente di programmazione clic su “Extensions”

Nel campo di ricerca inserire “esp8266”

Selezionare l’estensione “ESP8266_ThingSpeak”

Verrà aggiunta la collezione delle nuove istruzioni

Aggiungere una “show icon” per visualizzare l’icona di un cuore all’avvio del micro:bit, iò permetterà di avere percezione che il sistema è in funzione. Continua a leggere