cronomPrecisioneIl cronometro a lancette da me descritto nell'articolo "Un cronometro con Scratch" realizzato per il sito mbts-club a propostito di coding per i bambini è preciso?

In questo video2 sono stati ripresi in contemporanea due cronometri: quello realizzato con Scratch ed un normale orologio per confrontarne le misurazioni.

Viene anche condotto un ragionamento per comprendere le cause dell'imprecisione per poi ridurla o eliminarla.

cronometro1A) cronometro con ritardo di un secondo

Per scandire il tempo il primo tipo di cronometro utilizza semplicemente il blocco di ritardo impostato a un secondo e quindi la ripetizione del ciclo.

All'interno del ciclo, dopo l'attesa di un secondo, viene spostata la lancetta dei secondi, aggiornato il valore numerico e verificato che non sia trascorso un minuto per eventualmente aggiornare la lancetta corrispondente.

Il cronometro funziona, ma dopo un minuto il ritardo è superiore a due secondi: troppo!

In effetti, al ritardo imposto di un secondo vengono aggiunti i ritardi prodotti dall'esecuzione di tutti i successivi comandi compreso il ritorno all'inizio del ciclo.

Per compensare il ritardo dato dagli altri comandi si può abbreviare il comando di attesa di quanto basta agendo per tentativi, ma non è una buona pratica perchè i ritardi dei vari comandi potrebbero dipendere dallo specifico PC o sistema operativo utilizzato o dalle prestazioni del server online.

B) cronometro sincronizzato con il cronometro interno

Una idea alternativa consiste nell'azzerare il cronometro interno ed utilizzare questo per scandire il secondo.

cronometroInternoScratch ha un proprio cronometro interno che si avvia contemporaneamente con l'avvio di Scratch; un comando apposito permette il riavvio del cronometro.

Il cronometro interno procede inesorabilmente essendo connesso con il cronometro del PC, ma dato che può essere azzerato può essere utilizzato per rispolvere il problema.

 

cronometro2Una volta azzerato il cronometro interno si attende che venga superato il valore "1" per azzerarlo subito aggiornare quindi la posizione della lancetta, il valore dei secondi e verificare se ha superato il minuto.

Occorre subito riazzerare il cronometro in modo da minimizzare i ritardi che questa operazione comporta e non risentire dei ritardi dei comandi successivi.

In questo modo, dato che il ritardo dei comandi successivi non influisce sul cronomettro interno, lo scatto avviene appena viene superato il secondo.

Si confronta ancora questo cronometro con uno reale e si prende atto che c'è ancora un ritardo di circa un secondo: meno di prima ma troppo per una misura di tempo. 

Penso che sia un ritardo dovuto all'azzeramento del cronometro ed alla verifica della disuguaglianza.

C) cronometro parallelo

Si deve fare in modo da evitare l'uso di comandi che manipolano il tempo.

Si può fare così:

- azzerare il cronometro interno,

- lasciare scorrere il tempo del cronometro interno e verificare il superamento del primo secondo, quello numericamente uguale "1"

una volta accaduto questo si aggiorna il tempo mostrato in secondi e

- si attende il superamento del secondo successivo, quello numericamente uguale a "2"

- ... e così via.

Si effettua la prova e si vede che non c'è ritardo o perlomento che il ritardo fra i due orologi rimane costante e potrebbe essere dovuto semplicemente ad una piccola differenza inziale fra l'avvio dei due o, dato che si usa un video che li riprende contemporaneamente, ad un disallineamento dei frame dei video girato a 30 fps.

cronometro3