tiny machine learning LEZIONE 2

INDICE

  1. Avvertenze
  2. Note sul Copyright
  3. Facciamo pratica con la nostra nuova scheda Nano BLE Sense
  4. APDS 9960 – Sensore digitale di Prossimità, Luce RGB e Gesti
  5. Rilevamento di Prossimità
  6. Rilevamento dei gesti
  7. Rilevamento Colore
  8. PAI-001: Riconoscimento Colore
  9. Analisi dello sketch del Progetto AI-001 – Riconoscimento Colore
  10. PAI-002: Riconoscimento dei Gesti
  11. Analisi dello sketch del Progetto AI-002 – Riconoscimento Gesti
  12. PAI-003: Valutazione di prossimità
  13. Analisi dello sketch del Progetto AI-003 – Valutazione Prossimità

Avvertenze

Relativamente agli aspetti di sicurezza, poiché i progetti sono basati su alimentazione elettrica in bassissima tensione erogata dalla porta usb del pc o da batterie di supporto o alimentatori con al massimo 9V in uscita, non ci sono particolari rischi di natura elettrica. È comunque doveroso precisare che eventuali cortocircuiti causati in fase di esercitazione potrebbero produrre danni al pc, agli arredi ed in casi estremi anche a ustioni, per tale ragione ogni qual volta si assembla un circuito, o si fanno modifiche su di esso, occorrerà farlo in assenza di alimentazione e al termine dell’esercitazione occorrerà provvedere alla disalimentazione del circuito rimuovendo sia il cavo usb di collegamento al pc che eventuali batterie dai preposti vani o connettori di alimentazione esterna. Inoltre, sempre per ragioni di sicurezza, è fortemente consigliato eseguire i progetti su tappeti isolanti e resistenti al calore acquistabili in un qualsiasi negozio di elettronica o anche sui siti web specializzati.

Al termine delle esercitazioni è opportuno lavarsi le mani, in quanto i componenti elettronici potrebbero avere residui di lavorazione che potrebbero arrecare danno se ingeriti o se a contatto con occhi, bocca, pelle, etc. Sebbene i singoli progetti siano stati testati e sicuri, chi decide di seguire quanto riportato nel presente documento, si assume la piena responsabilità di quanto potrebbe accadere nell’esecuzione delle esercitazioni previste nello stesso. Per i ragazzi più giovani e/o alle prime esperienze nel campo dell’Elettronica, si consiglia di eseguire le esercitazioni con l’aiuto ed in presenza di un adulto.

Roberto Francavilla

Facciamo pratica con la nostra nuova scheda Nano BLE Sense

Prima di avventurarci nel mondo dell’intelligenza artificiale vediamo cosa è capace di fare la scheda Arduino Nano 33 BLE Sense.

Per fare questo impariamo ad utilizzare la scheda dagli esempi resi disponibili dalle Librerie che abbiamo installato.

Per tutti i progetti che seguono abbiamo bisogno solo della scheda Nano BLE Sense, di un PC e del cavo USB di collegamento.

Lo scopo delle esercitazioni che seguiranno è quello di scoprire in dettaglio l’uso delle Librerie e quindi il funzionamento dei sensori presenti sulla scheda Arduino Nano 33 BLE Sense. Occorre precisare che già la board di per sé ha gran parte dei sensori utili alla progettazione robotica, per cui scoprirli in dettaglio, vedere come funzionano, capire i loro limiti, ci favorisce nell’uso della scheda stessa.

APDS 9960 - Sensore digitale di Prossimità, Luce RGB e Gesti

[Informazioni tecniche estratte e sintetizzate dal datasheet AVAGO Technologies]

 

Il funzionamento del Sensore digitale di Prossimità, Luce RGB e Gesti denominato commercialmente APDS 9960 è molto semplice.

Come è possibile osservare dalla foto sopra, il sensore è composto da una unità emittente di Luce Infrarossa (IR) e da quattro fotodiodi ricevitori molto sensibili, disposti a croce:

L’unità emittente emette luce a infrarossi che poi riflessa viene captata dai 4 fotodiodi.

Rilevamento di Prossimità

Per il rilevamento di prossimità il sensore funziona in questo modo: il LED emettitore di IR emette la luce infrarossi, questa, riflessa dal corpo che è in prossimità del sensore, viene captata dai fotodiodi che ne calcolano anche la distanza. Ovviamente il sensore effettua misure in modalità diverse, per cui il risultato che restituisce è un valore che tiene conto anche di eventuali disturbi introdotti dal sensore stesso.

La prossimità è espressa attraverso un valore numerico che è a decrescere, partendo da un valore di 255, quando non viene rilevato nulla, a 0, quando in sostanza il sensore è quasi a contatto con il corpo.

Rilevamento dei gesti

Il LED emettitore emette la luce ad infrarossi, i quattro fotodiodi posizionati a croce intercettano in modo diverso la luce IR riflessa e quindi riescono a stabilire la direzione del gesto.

Direzione da GIÙ verso SÙ, oppure da DESTRA a SINISTRA ed ovviamente anche le direzioni opposte

Rilevamento Colore

Per il rilevamento del colore, il principio di funzionamento è molto simile ai precedenti, in funzione dei valori riflessi di infrarosso, il sensore riesce a stabilire la quantità di colore Rosso, Verde o Blu che compone la luce riflessa. Il sensore restituisce un valore compreso tra 0 e 255 per ogni componente di R (red), G (green) e B (blu) della luce letta.

A questo punto, compreso il funzionamento nel nostro sensore montato sull’Arduino Nano 33 BLE Sense, andiamo a vedere le sue applicazioni pratiche con dei semplici progetti.

PAI-001: Riconoscimento Colore

Lo sketch da utilizzare per questo progetto è:

Una volta caricato lo sketch, come descritto sopra, aprire il Monitor Seriale e fare delle prove passando il sensore su superfici colorate, si osserverà che viene individuato il colore di maggioranza e poi i valori numerici delle componenti R (red), G (gree) e B (blu).

Analisi dello sketch del Progetto AI-001 - Riconoscimento Colore

Come è possibile osservare dallo sketch, l’uso della Libreria Arduino_APDS9960.h è molto semplice. Una volta richiamata la libreria con “include”, occorre dichiarare tre variabili “int”, dopodiché con l’istruzione   APDS.readColor(r, g, b);

Una volta caricati i valori letti dal sensore nelle tre variabili, tramite gli “if” , faccio i confronti e stabilisco il colore di maggioranza, dopodiché vengono stampati sul monitor seriale i risultati.

PAI-002: Riconoscimento dei Gesti

Anche per questo progetto utilizzeremo, modificandolo opportunamente, lo sketch messo a disposizione dall’esempio della libreria.

Lo sketch da utilizzare per questo progetto è:

Una volta caricato lo sketch, come descritto sopra, aprire il Monitor Seriale e fare delle prove passando sul sensore la mano, prima dal basso verso l’alto e po da sinistra verso destra e così via :

Analisi dello sketch del Progetto AI-002 - Riconoscimento Gesti

Come è possibile osservare dallo sketch, anche in questo caso l’uso della Libreria Arduino_APDS9960.h semplifica tantissimo lo sketch. Infatti, una volta richiamata la libreria con “include”, basta utilizzare  la funzione int gesture = APDS.readGesture(); con il relativo switch… case … che automaticamente ci viene restituito il “gesto” rilevato.

E’ possibile anche modificare la sensibilità di rilevazione dei gesti, per default il valore è a 80, ma con l’istruzione APDS.setGestureSensitivity(80);  è possibile modificare tale valore con un valore compreso tra 1 e 100. Più è alto il valore, maggiore è la sensibilità di rilevamento, ma di conseguenza è anche maggiore l’errore di rilevare dei falsi gesti. Personalmente con il valore di default mi sono trovato bene per cui consiglio di non modificarlo.

PAI-003: Valutazione di prossimità

Modificando opportunamente lo sketch messo a disposizione dall’esempio della libreria, caricate il seguente codice sulla board:

Aprendo il Monitor seriale è possibile visualizzare il valore di prossimità assegnato dal sensore al corpo in movimento rilevato dallo stesso sensore.

Ho provato anche ad integrare il codice attribuendo anche una valutazione qualitativa, ovviamente il codice è ancora ottimizzabile, lascio a voi tale esercizio.

Il valore 0 significa, corpo vicinissimo, il valore 255 corpo lontano.

Analisi dello sketch del Progetto AI-003 – Valutazione Prossimità

Come è possibile osservare dallo sketch, anche in questo caso l’uso della Libreria Arduino_APDS9960.h semplifica tantissimo lo sketch. Infatti, una volta richiamata la libreria, basta utilizzare la funzione int proximity = APDS.readProximity();  per avere la lettura di prossimità e quindi utilizzarla per i propri progetti.

Se hai trovato la lezione interessante fai una donazione mi aiuterai a realizzarne tante altre.