5 min al giorno di sperimentazione con M5Stack mini – Sensore TOF

Buoni propositi: utilizzare 5 minuti della mia giornata di lavoro per sperimentare alcuni utilizzi di M5Stick Mini, ma anche per sollecitare la curiosità e voglia di sperimentazione da parte dei miei studenti… pillole tecnologiche 🙂
Recentemente ho acquistato un sensore ToF (Time of Flight: tempo di volo) VL53L0X con connettore GROVE per effettuare misure precise sulla della distanza di ostacoli con M5Stick mini.

Un sensore ToF effettua un conteggio del tempo totale di volo dei fotoni dal momento in cui vengono emessi da un piccolissimo raggio laser al momento in cui viene rilevata la riflessione su un fotodiodo collocato sul sensore.
In generale il tempo di volo (spesso indicato con TOF, dall’inglese Time Of Flight) indica la misura del tempo impiegato da un oggetto, una particella o un’onda (elettromagnetica, acustica, elettromagnetica o di altro tipo) per percorrere una certa distanza in un mezzo determinato. (fonte: Wikipedia)
Il sensore è in grado di fornire una misura molto precisa della distanza, indipendentemente dalla riflettanza della superficie incidente.

Il sensore ToF di cui dispongo è un VL53L0X che incorporato un emettitore Laser VCSEL ed un fotodiodiodo ricevitore SPAD. Il laser è in grado di emettere impulsi a 940 nm (prossimi al campo infrarosso). Il fotodiodiodo SPAD è estremamente sensibile al singolo fotone e grazie alla schermatura di cui è costituito riceve soltanto la lunghezza d’onda di 940 nm del laser.

Il sensore che sto utilizzando sul mio M5Stick mini connesso in I2C, è in grado di misurare la distanza di oggetti dai 30mm a 800 mm, ma in commercio è possibile trovare sensori che sono in grado di misurare con precisione distanze fino a 2m. Campi di impiego: telecamere, macchine fotografiche, smartphone e sensoristica industriale.

L’integrato elettronico VL53L0 viene prodotto dalla ST Microelettronics, seguendo il link trovate maggiori informazioni tecniche.

Durante le nostre sperimentazioni elettroniche a scuola, spesso usiamo sensori basati sull’uso di un diodo LED emettitore di infrarossi ed un fotodiodi ad infrarossi ricevente  che sono influenzati dalla luce ambiente e dall’assorbimento della luce rilevata. Stessa cosa capita nel caso si utilizzi sensori ad ultrasuoni, dove la misura della distanza è fortemente dipendente dall’angolo di incidenza dell’onda ultrasonica e dalla fonoassobenza degli ostacoli di cui si vuole misurare la distanza.

Per maggiori informazioni sulle nozioni di base sull’utilizzo dei sensori ToF vi rimando al breve articolo di digikey dove oltre a presentare la tecnologia ToF, trovate dettagli interessanti su altre tecnologie utilizzate per la rilevazione della distanza degli ostacoli.
Nell’articolo si ripercorre la storia della sensistica per la misurazione degli ostacoli:

  • sensori di prossimità delle prime macchine fotografiche della Polaroid
  • sensori ad ultrasuoni come gli SR-HC04 che utilizziamo nelle sperimentazioni con Arduino
  • sensori ad infrarossi della Sharp
  • sensori ToF

Trovate il sensore ToF VL53L0X su schede che possono essere comodamente connessi in I2C ad Arduino a costi estremamente contenuti.

L’utilizzo del sensore ToF con M5Stick mini è estremamente semplice.

E’ sufficiente aggiungere tra i sensori disponibili il ToF, così come indicato nell’immagine che segue ed utilizzare così l’istruzione che permette di misurare la distanza dell’ostacolo.

Nel programma indicato di seguito viene misurate la distanza dell’ostacolo è nel caso in cui la misura sia inferiore ai 50 mm viene acceso il LED rosso disposto sull’M5Stick mini.

Ovviamente sviluppare ora un sistema per valutare il tempo necessario per lavarsi le mani, così come indicato nell’articolo: Arduino – Esercizio: Realizzare un timer per il lavaggio delle mani risulta semplicissimo.

Buona sperimentazione a tutti 🙂

Arduino – Esercizio: Realizzare un timer per il lavaggio delle mani

Di seguito mostro parte della soluzione agli esercizi assegnati ai miei studenti negli scorsi giorni in riferimento alla progettazione di un semplice dispositivo di automazione da collocare in bagno in prossimità del lavandino, in grado di rilevare ad una distanza minima fissata la presenza delle mani e l’avvio di un timer che mostra il trascorrere del tempo. L’indicazione del tempo che trascorre viene realizzata con un servomotore a cui dovrà poi essere fissata una lancetta e che mostra il trascorrere del tempo su una scala graduata. Il tempo di lavaggio viene fissato a 30 secondi. Sulla serial monitor dovrà essere indicato lo stato di avvio del sistema ed il tempo.

Soluzione

Controllo servomotore

// Prof. Maffucci Michele
// gestione servomotore

#include <Servo.h>

int pos = 0;

Servo mioServo;

// scrivere pos +=1 è la stessa cosa che scrivere pos = pos + 1

void setup()
{
  mioServo.attach(9);
}

void loop()
{
  // muove il servo da 0 a 180 gradi
  // con passi di 1 grado
  
 for (pos = 0; pos <= 180; pos += 1) {
    // viene detto al servo di posizionarsi
    // nella posizione inserita nella variabile 'pos'
    mioServo.write(pos);
    // attende 15 ms wait 15 ms
	// per far raggiungere il sevo la posizione
    delay(15); // attesa di 15 millisecondi
  }
  for (pos = 180; pos >= 0; pos -= 1) {
    // viene detto al servo di posizionarsi
    // nella posizione inserita nella variabile 'pos'
    mioServo.write(pos);
    // attende 15 ms wait 15 ms
	// per far raggiungere il sevo la posizione
    delay(15); // attesa di 15 millisecondi
  }  
}

Controllo sensore ultrasuoni

// Prof. Maffucci Michele
// Impostazione sensore ultrasuoni

// distanza minima dell'ostacolo (in cm)

const int distanzaMinima = 20;
int misuraDistanza = 0;

long durata;          // durata dell'impulso
long distanza;        // distanza dell'oggetto
int pin_segnale = 7;  // pin Arduino a cui è collegato il sensore SR04
int pin_trig = 10;    // pin Arduino a cui è collegato il sensore SR04


void setup()
{
    Serial.begin(9600);
	pinMode(pin_trig, OUTPUT);
  	pinMode(pin_segnale, INPUT);
  	Serial.println("Sensore ad ultrasuini");
}

void loop()
{
  Serial.print("Distanza ostacolo: ");
  Serial.println(distanzaOstacolo());
  delay(100);
}

// rilevazione distanza ostacolo

// misura la distanza dell'ostacolo
long distanzaOstacolo()
{
  digitalWrite(pin_trig, LOW);
  delayMicroseconds(2);
  digitalWrite(pin_trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pin_trig, LOW);
  durata = pulseIn(pin_segnale, HIGH);
  distanza = (durata / 2) / 29.1;
  delay(100);
  return distanza;
}

Timer lavaggio mani

// Prof. Maffucci Michele
// realizzazione di un timer
// per il lavaggio delle mani
// in un tempo di 30 secondi

#include <Servo.h>

// Impostazione servomotore
int pos = 0;

Servo mioServo;

// Impostazione sensore ultrasuoni

// distanza minima dell'ostacolo (in cm)

const int distanzaOstacolo = 20;
int misuraDistanza = 0;

long durata;          // durata dell'impulso
long distanza;        // distanza dell'oggetto
int pin_echo = 7;     // pin Arduino a cui è collegato il sensore SR04
int pin_trig = 10;    // pin Arduino a cui è collegato il sensore SR04

void setup() {
    Serial.begin(9600);
    mioServo.attach(9);
	pinMode(pin_trig, OUTPUT);
  	pinMode(pin_echo, INPUT);
  	
// Posizionamento iniziale del servo
  
  mioServo.write(180);
  delay(500);
  mioServo.write(0);
  delay(500);
  mioServo.write(180);

// Avvio alla partenza
  
  Serial.println("Avvio programma lavaggio mani"); 
}

void loop() {
  
  // Se la distanza delle mani dal rubinetto è
  // inferiore alla distanzaOstacolo si avvia il timer
  
    if (misuraDistanzaOstacolo() < distanzaOstacolo) {
    	contoAllaRovesciaServo();
  }
  delay(100);
}


// Conto alla rovescia
// sposta il servo di 6 gradi ogni secondo

void contoAllaRovesciaServo() {
  Serial.println("Conto alla rovescia: ");
  int passi = 30;
  
  for (int i = passi; i >= 0; i--) {

    mioServo.write(i * 6);
    delay(1000);
    Serial.print(i);
    Serial.println(" sec");

  }

  // azzeramento del servo.
  // Le mani sono pulite
  mioServo.write(180);
  delay(500);
}

// misura la distanza dell'ostacolo
long misuraDistanzaOstacolo()
{
  digitalWrite(pin_trig, LOW);
  delayMicroseconds(2);
  digitalWrite(pin_trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pin_trig, LOW);
  durata = pulseIn(pin_echo, HIGH);
  distanza = (durata / 2) / 29.1;
  delay(100);
  return distanza;
}

Esercizio 1

Modificare lo sketch precedente aggiungendo due LED, verde e rosso. Lo stato di riposo, timer non funzionante, deve essere indicato dal LED verde acceso e Led rosso spento, mentre lo stato di funzionamento del timer deve essere evidenziato dal LED verde spento e LED rosso acceso.

Esercizio 2

Modificare lo sketch precedente aggiungendo due LED, verde e rosso e un buzzer. Lo stato di riposo, timer non funzionante, deve essere indicato dal LED verde acceso e Led rosso spento, all’avvio del timer il buzzer deve emettere una nota ad una frequenza fissata per un tempo di  1 secondo. Lo stato di funzionamento del timer deve essere evidenziato dal LED verde spento e LED rosso acceso, allo scadere del tempo di lavaggio deve essere emessa una nota di durata 1 secondo ad una frequenza diversa dalla nota di avvio.

Esercizio 3

Realizzare l’esercizio 2 con le medesime caratteristiche e componenti, però sostituendo il servomotore usato come indicatore, con un display LCD 16×2 che indichi il trascorrere del tempo.

Buon lavoro 🙂

Contenitore per mini breadboard per guida DIN

In questo periodo il mio mini FabLab casalingo è diventato uno studio per il montaggio video su cui trovano posto computer, portatili, webcam e schede elettroniche. Per mantenere ordine sulla scrivania necessariamente ho bisogno che anche gli apparati elettronici che utilizzo occupino il minor spazio possibile. Nel fare le videolezioni sull’uso del PLC Siemens Logo8 ho realizzato un piccolo sinottico costituito da 6 LED affiancati al PLC che utilizzerò per visualizzare lo stato delle uscite. Per prototipare velocemente i miei circuiti ed essere subito operativo ho usato una mini breadboard. Per fissarla alla guida DIN ho sfruttato la clip DIN che ho già usato in altri progetti e a questa ho fissato con viti il contenitore per la mini breadboard.

Condivido questo progetto, spero possa essere utile anche ad altri.

Per il download dei file per la stampa 3D seguire il link su Thingiverse.

I miei corsi per Tecnica della Scuola: REALIZZARE E GESTIRE LA DIDATTICA ON LINE – Strumenti e strategie per la collaborazione

Nelle score settimane tantissimi utenti hanno a chiesto a me direttamente e alla redazione di Tecnica della Scuola un corso che approfondisse tutte le tematiche trattate durante i Webinar gratuiti dedicati alla didattica a distanza e che aggiungesse a quanto detto ulteriori argomenti. Partendo dalle numerosissime domande che mi sono state poste ho impostato il prossimo corso:

REALIZZARE E GESTIRE LA DIDATTICA ON LINE
Strumenti e strategie per la collaborazione

che si svolgerà nei seguenti giorni:

  • Mercoledì 15 aprile 2020 – Ore 17.00/19.00
  • Venerdì 17 aprile 2020 – Ore 17.00/19.00
  • Lunedì 20 aprile 2020 – Ore 17.00/19.00
  • Mercoledì 22 aprile 2020 – Ore 17.00/19.00

Obiettivi

Il corso si propone l’obiettivo di mostrare l’utilizzo di applicativi per la creazione di contenuti didattici e per la gestione di ambienti di apprendimento integrati on line che consentono di realizzare dinamiche di lavoro collaborative, altamente inclusive permettendo il monitoraggio e la valutazione a distanza sulla classe o sul singolo allievo.
Il corso fornirà le nozioni tecniche e le competenze per un’operatività di base nell’uso di software per la creazione di risorse: audio, video, pubblicazione su web, per la ricerca delle fonti online, per la gestione della classe e la realizzazione di videolezioni.
Verranno simulate situazioni didattiche reali gestite con le tecnologie esposte, mostrando tutto il processo di lavoro: ricerca e collezione delle fonti, produzione del contenuto didattico, realizzazione della lezione in modalità sincrona o asincrona.

Punti tematici

Verranno presi in considerazione software in cloud e desktop utilizzati in modalità gratuita (anche open source) che copriranno i seguenti aspetti:

  • Produrre e modificare l’audio e il video
  • Gestire videolezioni sincrone e asincrone
  • Realizzazione di videolezioni
  • Gestire ambienti integrati di apprendimento
  • Valutare online: compito, test, sondaggi, webquest
  • Gamification per apprendere e valutare
  • Realizzazione di infografiche
  • Realizzazione di pagine web per condividere i contenuti didattici
  • Lavagne digitali
  • Annotare documenti (pdf, immagini, ecc…)
  • Gestire il proprio tempo lavoro online
  • Organizzare il lavoro didattico online
  • Ottimizzare la ricerca di risorse didattiche on-line
  • Catalogare le proprie fonti online
  • Realizzare presentazioni (slide) dinamiche.

Per maggiori informazioni su contenuti e modalità di iscrizione seguire il link.

Nel caso di informazioni specifiche sugli argomenti che verranno trattati o richieste specifiche non esitate a contattarmi.

Grazie.

FAQ Didattica a Distanza – Webinar gratuito


A conclusione del primo ciclo di Webinar gratuiti sulle tecnologie per fare didattica a distanza, ultimo incontro gratuito online venerdì 3 aprile dalla ore 15.30 alle 16.30. La lezione potrà essere rivista sulla pagina Facebook: La Tecnica della Scuola Formazione e da lunedì 6 aprile sulla pagina Didattica a Distanza.
Risponderò alle tantissime domande ricevute durante e dopo le quattro lezioni svolte e agli eventuali dubbi dei partecipanti al webinar.