Archivi tag: Arduino UNO R4 WiFi

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 Arduino UNO R4 – icebreaker per l’inizio dell’anno scolastico

Da tempo sperimento l’escape game nelle attività di laboratorio: è una modalità estremamente coinvolgente, orienta l’attenzione all’obiettivo, aumenta la concentrazione e riduce il rumore non costruttivo. Quello che si sente in aula è il brusio utile di chi discute, prova, sbaglia e ci riprova per risolvere un problema. La sfida di questi mesi è renderla significativa anche per studenti un po’ più grandi, con competenze tecniche talvolta “disordinate” e bisogno di nuova motivazione.

Capisco che qualcuno possa considerarla una scelta poco adatta a un istituto tecnico, richiamando l’idea che la scuola debba puntare solo su abilità pratiche e nozioni da trasferire in vista del lavoro o dell’università. A mio avviso è una visione superata: la scuola è cambiata, gli studenti sono diversi, né peggiori né migliori di “noi”, i ragazzi vivono in un mondo che offre moltissimo, ma spesso lascia poco spazio alla creatività o, meglio, non la allena. Non devo convincere nessuno: da insegnante sento la responsabilità di cercare strategie efficaci per aiutare i ragazzi e, insieme ai colleghi, fornire loro gli strumenti per diventare cittadini consapevoli. Questo post è il mio diario di bordo: metto per iscritto ciò che sperimento in classe per farne memoria e, se può essere utile, per condividerlo.

Dopo aver progettato escape analogiche, digitali e fisiche, voglio consolidare l’approccio nella didattica curricolare. Comincio da qualcosa di semplice: un escape “ice breaking” di inizio anno. Quella che segue è l’attività, volutamente essenziale; se l’esperimento continuerà a funzionare, pubblicherò anche le prossime tappe.

Siamo all’inizio dell’anno scolastico, come dicevo sopra, ho rimodellato il mio “ice breaking” per il laboratorio di sistemi trasformandolo in una breve esplorazione individuale in stile escape. Nell’attività l’obiettivo non è “programmare bene”, ma osservare come gli studenti cercano informazioni, leggono testi tecnici e narrativi, e trasferiscono ciò che capiscono in un prodotto visivo semplice. Ho scelto un oggetto per loro nuovo, mi sono concentrato sulla matrice 12×8 dell’Arduino UNO R4 WiFi, ho creato una piccola situazione di disorientamento produttivo: un compito che per la loro fascia di età è elementare, però non è mai stato affrontato, da risolvere attingendo esclusivamente alla documentazione ufficiale sul sito Arduino.cc. La sequenza di indizi li ha costretti a leggere con attenzione, a verificare i prerequisiti, a selezionare ciò che serviva e a ricomporre la soluzione anche con un po’ di “copia e incolla consapevole” dagli strumenti ufficiali (come l’Editor della matrice). Chiudendo il percorso, ogni studente ha mostrato il simbolo di sblocco sulla matrice di LED ed ha guadagnato il badge, successivamente siamo passati ad un breve debrief collettivo in cui abbiamo esplicitato strategie efficaci, fraintendimenti e punti chiave tecnici per giungere alla consapevolezza di non avere completa dimestichezza nelle tecniche per risolvere un problema.

L’attività si è svolta in circa 90 minuti di lavoro, nella parte introduttiva ho dato alcune indicazioni operative dopo di che ho osservato e preso appunti sul loro modo di operare e farmi un’idea più precisa delle loro capacità.

Vi condivido l’attività che spero possa essere migliorata.

Materiali necessari per ogni allievo

  • N.1 scheda Arduino UNO R4
  • N. 1 PC per allievo
  • N. 1 Sito per creare l’escape game realizzato con Google Site, trovate il link al fondo di questo post.

Scheda di presentazione dell’attività didattica (per il docente/formatore)

“Sblocca il laboratorio” è un escape game didattico con ingresso morbido e motivante nell’ecosistema Arduino UNO R4 WiFi: lo studente deve mostrare un Simbolo di Sblocco sulla matrice 12×8 integrata sulla scheda, ma la chiave non è “scrivere codice da zero”; è trovare, capire e applicare le informazioni giuste dentro la documentazione ufficiale. L’attività allena così la ricerca dell’informazione tecnica (orientarsi tra Getting Started, Tutorial, Hardware; scegliere un esempio pertinente ed utilizzare l’editor della matrice), la comprensione del testo narrativo (tradurre la storia-missione in azioni concrete e verificabili) e la comprensione del testo tecnico (prerequisiti come installazione driver, concetti essenziali della LED Matrix, flusso operativo “disegna > esporta > carica”). In classe tutto ciò si traduce in problem solving consapevole: riconoscere i punti critici, correggere il percorso, giustificare le scelte di fonte e di metodo.
Funziona bene anche con gruppi fragili o demotivati perché il feedback è immediato. Lo scaffolding è naturale: la documentazione guida passo dopo passo e l’editor di icone riduce il carico cognitivo mantenendo il controllo del risultato. Il compito rimane breve, chiaro e gratificante: un unico output visivo con criteri di riuscita espliciti, abbastanza sfidante da dare senso alla ricerca, ma sufficientemente accessibile da permettere a tutti di arrivare in fondo e raccontare come ci sono arrivati. In questo modo la valutazione non riguarda solo l’esito, ma la qualità del percorso: dove hanno cercato, cosa hanno capito, come lo dimostrano.

Sito Escape per svolgere l’attività: “sblocca il laboratorio”

Se serve ho realizzato una versioni in lingua inglese del gioco escape in modo che si posa realizzare un’attività trasversale tra l’insegnamento dell’inglese e la disciplina tecnica, il link al sito è:

Unlock the Lab

Attenzione il badge è nascosto come link (il colore del testo si confonde con lo sfondo pagina) nell’ultima pagina, questa informazione deve essere fornita agli studenti solamente quando  hanno mostrato il codice sulla matrice LED dell’Arduino R4.

Buon lavoro 🙂

Realizziamo un orologio con l’RTC di Arduino UNO R4 WiFi

Arduino UNO R4 WiFi possiede un RTC interno facilmente programmabile che ci consentirà di mantenere costantemente traccia dell’ora e della data corrente.

Per chi ha iniziato da poco le sperimentazioni elettroniche ricordo che un Real-Time Clock (RTC), o Orologio in Tempo Reale, è un tipo di orologio costituito da un circuito elettronico utilizzato per tracciare il tempo in tempo reale. Questo significa che tiene traccia del giorno della settimana, della data e dell’ora corrente, dei minuti, dei secondi, proprio come un orologio normale, inoltre è possibile impostare un RTC per gestire l’ora legale e l’ora solare.

Nelle versione precedente di Arduino, UNO R3 non era presente un RTC pertanto bisognava utilizzare un apposito circuito elettronico esterno così come dettagliato nel post su questo sito: Utilizzare un orologio RTC con Arduino – Modulo Tiny RTC I2C, modulo RTC dotato di un integrato DS1307 cuore fondamentale della scheda.

L’utilizzo dell’RTC su Arduino UNO R4 WiFi avviene utilizzando la libreria RTC che consente di impostare oppure ottenere l’orario o ancora gestire allarmi per attivare interrupt.

Come accennato ad inizio post l’RTC integrato dispone di un pin VRTC, che viene utilizzato per mantenere in funzione l’RTC, anche quando l’alimentazione della scheda viene interrotta. Per utilizzare questa funzione è sufficiente fornire una tensione compresa tra 1,6 e 3,6 V al pin VRTC. In un post successivo mostrerò come utilizzare il pin VRTC.

Facendo riferimento agli esempi disponibili sul sito Arduino e nell’IDE analizziamo le fasi di configurazione dell’RTC.

Impostazione della data e dell’ora

RTCTime startTime(01, Month::AUGUST, 2023, 20, 49, 00, DayOfWeek::TUESDAY, SaveLight::SAVING_TIME_ACTIVE)

RTC.setTime(startTime)

Per impostare l’orario bisogna creare un oggetto RTCTime, in cui deve essere specificato il giorno, il mese, l’anno, l’ora, il minuto, il secondo, il giorno della settimana e l’attivazione dell’ora legale se prevista nella nazione in cui si sta utilizzando la scheda, quindi per impostare l’orario bisogna usare il metodo startTime.

Per chi incomincia con la programmazione il concetto di metodo appartiene alla programmazione ad orientata agli oggetti come ad esempio in C++, quando si programma in C è meglio parlare di funzione, ma spesso i due concetti vengono usati in modo alternativo.

Il primo sketch non fa altro che impostare l’ora corrente:

// inclusione della libreria RTC
#include "RTC.h"

void setup() {

  // impostazione della velocità della serial monitor
  Serial.begin(9600);

  // avvio dell'RTC
  RTC.begin();

  // creazione dell'oggetto RTCTime (possiamo assegnare un nome a piacimento)
  // data del giorno, mese, anno, ore, minuti, secondi, giorno della settimana, attivazione passaggio all'ora legale
  RTCTime startTime(2, Month::AUGUST, 2023, 9, 15, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);

  // impostazione dell'RTC con la data e lora configurate per RTCTime
  RTC.setTime(startTime);
}

// il loop non contiene nulla
void loop() {
}

Continua a leggere

Arduino UNO R4 WiFi – Visualizzare il livello di una grandezza fisica mediante una barra incrementale sulla matrice LED di Arduino

Come anticipato nelle scorse lezioni vediamo in questo tutorial come visualizzare il livello di una grandezza fisica mediante una barra incrementale sulla matrice LED dell’Arduino UNO R4 WiFi.
Gli esempi mostrati possono essere adattati per qualsiasi tipologia di sensore, per semplicità e rapidità di realizzazione ho scelto di rilevare l’intensità luminosa mediante un LDR. Lascio a voi correzioni e miglioramenti a quanto ho scritto.

La matrice, come sapete è costituita da 8 righe di LED, Il numero di linee LED attive sarà proporzionale all’intensità luminosa rilevata:

  • Livello minimo di intensità = accensione della sola riga 7
  • Livello massimo di intensità = accensione di tutte le righe della matrice

I 6 sketch di esempio che seguono sono molto simili, tutti eseguono la calibrazione del sensore, basata sullo sketch standard che trovate all’interno degli esempi dell’IDE di Arduino. Il codice di calibrazione prevede 5 secondi di analisi che permettono di impostare il livello minimo e massimo della grandezza da misurare. Ho aggiunto per ognuno dei 6 esempi alternative diverse per mostrare sulla matrice di LED il timer di 5 secondi.

Il funzionamento di ogni parte del codice dei 6 sketch, è dettagliato mediante commenti, se avete necessità di chiarimenti non esitate a contattarmi.

Circuito

Il circuito prevede l’utilizzo di:

  • Arduino UNO R4 WiFi
  • LDR
  • Resitore da 10 KOhm

Esempio 01

Il trascorrere del tempo di calibrazione è mostrato dall’accensione sequenziale dei primi 5 LED posti sulla riga n. 7, terminata la fase di calibrazione, dopo 0,5 secondi l’array della matrice viene azzerato e viene poi avviata la rilevazione.

sketch01

// Prof. Maffucci Michele
// 31/07/23
// Visualizzazione livello luminoso su matrice LED Uno R4 WiFi
// con calibrazione sensore e visualizzazione timer di calibrazione
// con l'accensione di 5 LED della matrice

// Esercizio 01

// inclusione della libreria per la gestione della matrice
#include "Arduino_LED_Matrix.h"

// creazione dell’oggetto matrix
ArduinoLEDMatrix matrix;

// inizializzazione dell'array per inizializzare lo stato della matrice
uint8_t frame[8][12] = { 0 };

// pin a cui collegare il sensore
int pinSensore = A0;

// variabile in cui memorizzare il valore letto dal sensore
int valoreSensore = 0;

// variabili per calibrazione lovello minimo e massimo luce ambiente
int sensoreMin = 1023;  // valore minimo sensore
int sensoreMax = 0;     // valore massimo sensore

// contatore passi di calibrazione
int contatore = 0;

// valore del millis al passo precedente
unsigned long millisPrecedente = 0;
// valore del millis attuale
unsigned long millisCorrente = 0;

// intervallo in millisecondi per l'accensione di una riga di LED
const long intervallo = 1000;

// riga LED precedentemente accesa
int precedenteLivello = 0;

void setup() {
  // inizializzazione della velocità della serial monitor
  Serial.begin(115200);

  // avvio della matrice di LED
  matrix.begin();

  // calibrazione del sensore nei primi 5 secondi di avvio di Arduino
  while (millis() < 5000) {

    // memorizzazione dle valore attuale del millis
    millisCorrente = millis();

    // lettura valore
    valoreSensore = analogRead(pinSensore);

    // registra il valore massimo rilevato dal sensore
    if (valoreSensore > sensoreMax) {
      sensoreMax = valoreSensore;
    }

    // registra il valore minimo rilevato dal sensore
    if (valoreSensore < sensoreMin) {
      sensoreMin = valoreSensore;
    }

    // timer
    if (millisCorrente - millisPrecedente >= intervallo) {
      millisPrecedente = millisCorrente;
      frame[7][contatore] = 1;
      matrix.renderBitmap(frame, 8, 12);
      contatore++;
    }
  }
  // accensione dell'ultimo LED al 5' secondo
  frame[7][4] = 1;
  matrix.renderBitmap(frame, 8, 12);

  // attesa di 0,5 secondi prima di spegnere tutti i LED
  delay(500);

  // spegnimento di tutti i LED della matrice
  uint8_t frame[8][12] = { 0 };
  matrix.renderBitmap(frame, 8, 12);
}

// Accensione linee matrice (dalla riga 7)
// maggiore e' il valore numeriico di "livello" (riga LED) più bassa sarà l'intensità luminosa
// minore e' e' il valore numeriico di "livello" (riga LED) più alta sarà l'intensità luminosa

// Livello minimo di intensità = accensione della sola riga 7
// Livello massimo di intensità = accensione di tutte le linee della matrice

void barra(int livello) {
  // spegnimento della riga "livello"
  if (livello > precedenteLivello) {
    for (int y = livello; y >= precedenteLivello; y--) {
      // spegnimento dei 12 LED della riga "livello"
      for (int x = 0; x < 12; x++) {
        frame[y][x] = 0;
      }
      matrix.renderBitmap(frame, 8, 12);
      delay(1);
    }
    // accensione della riga "livello"
  } else {
    for (int y = 7; y >= precedenteLivello; y--) {
      for (int x = 0; x < 12; x++) {
        frame[y][x] = 1;
      }
      matrix.renderBitmap(frame, 8, 12);
      delay(1);
    }
  }
  precedenteLivello = livello;
}

void loop() {

  // per evitare sprechi di memoria viene utilizzata usata una stessa variabile: valoreSensore
  // per memorizzare ad ogni passo valori diversi

  // lettura del valore del sensore
  valoreSensore = analogRead(pinSensore);

  // Forzare il valore all'interno del valore minimo e del massimo nel caso di errori di lettura.
  // Nel caso non si aggiungesse il "constrain" nel caso di errore si blocca l'esecuzione
  valoreSensore = constrain(valoreSensore, sensoreMin, sensoreMax);

  // Il valore minimo di lettura è associato all'accensione della riga 7
  // quindi si rimappa tra 7 e 0
  valoreSensore = map(valoreSensore, sensoreMin, sensoreMax, 7, 0);

  // barra(valoreSensore) è la funzione che gestisce l'accensione delle linee di LED
  barra(valoreSensore);
}

Continua a leggere