Archivi tag: tempo

Guida all’uso di millis() – Lezione 1

Credo che una delle problematiche più ostiche da gestire soprattutto per i neofiti è l’utilizzo degli intervalli di tempo in cui eseguire operazioni con Arduino, mi riferisco all’uso e all’abuso improprio del delay(). Infatti gli studenti scoprono che, sebbene la funzione delay() sia facile da usare, ha degli effetti collaterali importanti; il principale è che ferma l’esecuzione dello sketch Arduino fino a quando non è trascorso il periodo di delay. Quando ciò accade, di solito chi spiega indirizza lo studente sull’esempio di defaut sulla temporizzazione non bloccante che troviamo nell’IDE di Arduino: BlinkWithoutDelay.

Molto spesso però questo confonde ancora di più le idee perché in realtà non si vuole solo far lampeggiare un LED ma si vogliono eseguire più operazioni contemporaneamente, quindi è bene comprendere a fondo il principio di funzionamento del BlinkWithoutDelay prima di poterlo applicare alla propria situazione.

Ho pensato quindi di realizzare qualche post tematico sull’uso di millis(), prendendo spunto dalle spiegazioni che realizzo per gli studenti.

Per usare millis() per la temporizzazione è necessario registrare il momento in cui un’azione si è verificata (ad esempio accensione di un LED ritardata alla pressione di un pulsante) affinché possiate iniziare a contare il tempo trascorso da tale evento, dovrete quindi controllare ad intervalli regolari se il periodo richiesto è trascorso.
Se tale intervallo di tempo non è trascorso allora il vostro programma potrà fare altro fino al prossimo controllo.

Nei programmi che seguono userò i commenti all’interno dello sketch per spiegare l’utilizzo delle varie parti del programma.

Ma cos’è millis()?

La funzione millis() restituisce il numero di millisecondi trascorsi dall’avvio del programma corrente su una scheda Arduino. Questo valore è restituito come un numero di tipo unsigned long.

Come Funziona

  • Incremento Automatico: il conteggio inizia automaticamente quando il microcontrollore sulla scheda Arduino viene alimentato o resettato. Il conteggio continua ad aumentare fino a che la scheda rimane alimentata.
  • Overflow: poiché millis() utilizza una variabile di tipo unsigned long, che ha una dimensione di 32 bit su Arduino, il valore massimo che può raggiungere è 4,294,967,295, dopo aver raggiunto questo valore, si andrà in overflow (ovvero Arduino non è in grado di memorizzare un numero più grande) e il valore restituito da millis() ripartirà da zero. Questo avviene dopo circa 49 giorni e 17 ore dall’ultimo reset della scheda.

Utilizzi di millis()

Di seguito una lista non esaustiva di alcuni utilizzi della funzione millis():

  • Temporizzazione non bloccante: a differenza di delay(), che ferma l’esecuzione del programma per un periodo specificato, millis() può essere utilizzato per realizzare pause o attese senza bloccare altre operazioni. Questo è particolarmente utile in applicazioni multitasking dove altre attività devono continuare ad essere eseguite.
  • Debounce: viene spesso usata per implementare il debounce di pulsanti o switch, riducendo gli effetti dei rimbalzi meccanici che possono causare letture multiple per una singola pressione.
  • Esecuzione di azioni a intervalli regolari: può essere utilizzata per eseguire specifiche azioni a intervalli regolari, come leggere sensori, aggiornare display, o inviare dati.

Pratica di utilizzo

Per utilizzare millis() per la temporizzazione, il vostro sketch deve conoscere il valore attuale del tempo (valore restituito da millis()) e questa rilevazione può essere fatto quando volete, in più punti dello sketch ovviamente dovrebbe essere fatta quando serve, ma vediamo cosa vuol dire.

Tipicamente il valore di millis() conviene registrarlo in una variabile ad inizio loop() o all’interno del setup() in questo modo:

millisCorrente = millis();

Regola di utilizzo:

  1. La variabile millisCorrente deve essere stata precedentemente dichiarata.
  2. Deve essere di tipo unsigned long perché millis() restituisce un intero long senza segno.

Regole generali che valgono per tutti i programmi che realizzerete, lo scrivo perchè puntualmente durante le correzioni qualcuno dimentica questa due regolette:

  1. Il nome della variabile, così come accade per tutte le variabili dovrebbe essere autoesplicativa, quindi il suo nome deve dare informazioni: “a cosa serve”
  2. Inoltre è buona regola utilizzare la notazione Camel Case per gestire nomi di variabili composte da più parole, ciò vale anche per le funzioni.

Come spesso accade durante le attività di laboratorio, lascio come semplicissimo esercizio per lo studente il desumere i componenti utilizzati e connessioni dagli sketch di esempio, quindi fate riferimento a quanto indicato in ogni singolo programma, si tratterà semplicemente di connettere dei LED con in serie un resistore da 220 Ohm. Per quanto riguarda l’ultimo esempio fate riferimento al link indicato che rimanda ad un altro post su questo sito.

Siete ora pronti per seguire le spiegazioni successive.

Continua a leggere

Lego Brick per la gestione del tempo studio

Durante tutte le attività di formazione che conduco sulle tecnologie didattiche uno dei moduli che svolgo riguarda i metodi di gestione del tempo per lo studio e la progettazione didattica utilizzando software specifici su qualsiasi piattaforma. Come segnalato in passato su queste pagine, gestisco le mie attività lavorative con la tecnica del pomodoro e il metodo GTD. Per quanto riguarda la tecnica del pomodoro, non è obbligatorio utilizzare un software ma tutto può essere fatto comodamente in maniera “analaogica” ed è questa la richiesta che mi è stata fatta poco tempo fa durante uno dei miei corsi per Tecnica della Scuola da parte di colleghi che operano in scuola elementare e media. La necessità per le colleghe era quella di utilizzare un sistema semplice, che potesse essere accolto favorevolmente anche dagli allievi più piccoli e che non facesse uso di dispositivi elettronici. Riflettendo ho trovato una soluzione che è stata provata da alcuni amici insegnanti che mi hanno dato conferma dell’efficacia della soluzione. Per trovare una  strategia analogica, divertente, da utilizzare con gli studenti più piccoli è stato sufficiente osservare il disordine sulla mia scrivania 🙂 … i Brick Lego.

Il sistema consiste nell’utilizzo di mattoncini Lego da usare come “pomodori” disposti su una plate Lego di dimensioni 16×8.

Ogni mattoncino 1×1 identifica l’esecuzione di un pomodoro e la conclusione di un’attività è indicata con un mattoncino 1×1 di colore specifico (nell’immagine rosso) questo permette di far visualizzare la conclusione del compito.

Nell’immagine che segue il compito si è concluso con 4 pomodori, il brick rosso identifica la conclusione del compito

Dopo 4 pomodori ci si prende una pausa più lunga e se il compito non è concluso si va a capo e si prosegue, solo quando il compito sarà concluso potrete inserire il mattoncini di conclusione. Quindi avrete anche percezione di compiti che durano per più di una serie di 4 pomodori.

Nell’immagine che segue abbiamo 1 compito concluso in 6 pomodori (4 bianchi più 2 gialli) e un compito concluso in 3 pomodori (verdi).

Ovviamente il tutto potrà essere realizzato in modalità diverse, le dimensioni che mostro in questo post sono dettate dagli spazi disponibili sulla mia scrivania, ma potrete personalizzare ed ampliare il sistema, ad esempio utilizzando Lego Bricks più grandi, di forma quadrata, dipenderà quindi dalle vostre esigenze, per i bambini di scuola elementare un’alternativa potrebbe essere l’impiego di mattoncini Duplo.

Adottare il mattoncini Lego credo che possa dare percezione fisica del progetto e del tempo necessario per svolgerlo, l’azione che fa aggiungere al bambino un mattoncini “pomodoro” costringe a pensare all’azione e al problema.

Spero di aver dato consigli utili alle colleghe.

Buona progettazione a tutti 🙂

Tempo…

Cos’ successo in tutto questo tempo?

Nulla di grave, mi scuso per chi non ha ricevuto risposta ai commenti e alle mail dirette, siete moltissimi, ne sono felicissimo, ma rispondere in modo puntuale a decine di mail tecniche richiede molto impegno, non disinteresse solo, per ora, mancanza di tempo. Gli impegni lavorativi sono aumentati moltissimo in questi mesi: gli immancabili esami di fine anno scolastico, attivit didattiche extra e non ultimo in questi giorni l’impegno come commissario di informatica nel concorso docenti, attivit che occupa gran parte della giornata e che porta via tantissime energie, un’esperienza interessantissima.

Le attivit future?
Sono legate ovviamente alla mia attivit didattica e alle vostre preziose richieste, che mi permettono di trovare ulteriori motivi di studio.
Da tempo ho promesso la messa on-line di molti tutorial e lezioni e non sono ancora riuscito a mantenere la promessa di una cadenza periodica…
posso solo dire: “nulla cadr nel dimenticatoio”,
un passo alla volta riuscir 🙂

Grazie ancora a tutti.

un nuovo cammino

Foto: “un nuovo cammino”
30.06.13 nei pressi del rifugio Guido Rey (Valle d Susa)
Per una versiona ingrandita del panorama a 180 segui il link.
(l’immagine compressa che stai per consultare di 7MB)