### 4.3.2 Rilevatore di intensità luminosa #### 4.3.2.1 Panoramica ![Img](./media/top1.png) Il rivelatore di intensità luminosa, noto anche come illuminance meter o Lux meter, è uno strumento specializzato utilizzato per misurare la quantità totale di luce (ossia l'illuminamento) che incide su una superficie. Funziona principalmente basandosi sull'effetto fotoelettrico. In questo progetto, la luminosità rilevata dal sensore di luce verrà visualizzata in tempo reale sull'OLED. Quando supera un certo valore, l'altoparlante sulla scheda emetterà un allarme come avviso e promemoria. I rivelatori di intensità luminosa sono ampiamente utilizzati in quasi tutte le situazioni che richiedono la quantificazione della “luce”, come illuminazione esterna e stradale, progettazione e collaudo dell'illuminazione interna, fotografia e produzione video, architettura e salute, ecc. ![Img](./media/bottom1.png) #### 4.3.2.2 Conoscenze dei componenti ![Img](./media/2top.png) **Microbit Light Sensor** ![Img](./media/j101.png) Poiché la scheda micro:bit non contiene un proprio fotoresistore, la matrice LED svolge questo compito. Il segnale luminoso viene convertito in input, e viene campionato il tempo di decadimento della tensione in modo che l'intensità luminosa rilevata sia un valore relativo. (**Nota**: la luminosità viene inviata alla porta seriale ed è un valore relativo.) **Microbit Speaker** ![Img](./media/j901.png) La scheda Micro: Bit dispone di un altoparlante integrato, che facilita la produzione di suoni per i programmi. È in grado di emettere suoni come risatine, saluti e sbadigli, oltre a tutti i tipi di toni, note e battiti. Per esempio, può riprodurre la canzone Ode to Joy. ![Img](./media/2bottom.png) #### 4.3.2.3 Componenti necessari | ![Img](./media/microbitV2.png)| ![Img](./media/ExpansionBoard.png) |![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 main board ×1 | micro:bit shield ×1 | OLED display ×1 | |![Img](./media/usb.png) |![Img](./media/4pin.png)|![Img](./media/batterycase.png)| | micro USB cable ×1 | 4 pin wire ×1 | battery holder ×1 | |![Img](./media/AAbattery.png)| | | |AA battery(**self-prepared**) ×6| | | #### 4.3.2.4 Schema di collegamento ⚠️ **Quando esegui i collegamenti, presta attenzione al colore dei fili.** | OLED display | wire color | micro:bit shield pin | micro:bit board pin | | :----------: | :--------: | :------------------: | :-----------------: | | GND | nero | G | G | | VCC | rosso | V2 | V | | SDA | blu | 20 | P20 | | SCL | verde | 19 | P19 | ![Img](./media/couj2.png) #### 4.3.2.5 Flusso del codice ![Img](./media/flow-chart-02.png) #### 4.3.2.6 Codice di prova ⚠️ **Suggerimento 1: Prima di scaricare il codice sulla scheda Microbit, importa il file di libreria “oled_ssd1306\.py” facendo riferimento a ** “[Import Library on MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Suggerimento 2: la soglia nella condizione “if()...elif()...” può essere modificata in base alla situazione reale.** **Codice completo:** ```Python ''' Theme: Light intensity detector Function: OLED displays the light intensity and the microbit light sensor controls the 5×5 dot matrix and speaker Compiling IDE: MU 1.2.0 Author: https://docs.keyestudio.com ''' # importa le librerie correlate from microbit import * from oled_ssd1306 import * import music val1 = Image("90909:""09990:""99999:""09990:""90909") # Imposta il pattern val2 = Image("00000:""00900:""09990:""00900:""00000") # Imposta il pattern # inizializza e cancella oled initialize() # inizializza oled clear_oled() # cancella oled while True: clear_oled() # cancella OLED Lightintensity = display.read_light_level() # Legge l'intensità luminosa rilevata dal sensore di luce del microbit e la assegna alla variabile Lightintensity add_text(0, 0, 'Lightintensity:') # Visualizza la stringa di caratteri nella posizione corrispondente dell'OLED add_text(16, 0, str(Lightintensity)) # Visualizza Lightintensity nella posizione corrispondente dell'OLED if Lightintensity >= 100: # quando l'intensità luminosa > 100 display.show(val1) # la matrice LED mostra il pattern impostato1 music.play("C5:1") # l'altoparlante riproduce il tono C5 sleep(50) music.play("D5:2") # l'altoparlante riproduce il tono D5 sleep(50) music.play("B5:4") # l'altoparlante riproduce il tono B5 sleep(50) elif Lightintensity > 0 and Lightintensity < 100: # quando 0 < intensità luminosa < 100 display.show(val2) # la matrice LED mostra il pattern impostato2 music.play("C3:1") # l'altoparlante riproduce il tono C3 else: # altrimenti display.clear() # Imposta la luminosità di tutti i LED a 0 (spento) music.reset() # nessun tono sleep(1000) ``` ![Img](./media/line1.png) **Breve spiegazione:** ① Importare le librerie microbit, oled_ssd1306 e music. ```Python # importa le librerie correlate from microbit import * from oled_ssd1306 import * import music ``` ② Definire due pattern. ```Python val1 = Image("90909:""09990:""99999:""09990:""90909") # Imposta il pattern val2 = Image("00000:""00900:""09990:""00900:""00000") # Imposta il pattern ``` ③ Inizializzare i pixel dell'OLED, cancellare l'OLED. ```Python initialize() # inizializza oled clear_oled() # cancella oled ``` ④ Leggere il valore di luminosità dal microbit e visualizzarlo sull'OLED. ```Python Lightintensity = display.read_light_level() # Legge l'intensità luminosa rilevata dal sensore di luce del microbit e la assegna alla variabile Lightintensity add_text(0, 0, 'Lightintensity:') # Visualizza la stringa di caratteri nella posizione corrispondente dell'OLED add_text(16, 0, str(Lightintensity)) # Visualizza Lightintensity nella posizione corrispondente dell'OLED ``` ⑤ Istruzione di selezione: if()...elif()...else... Quando la luminosità rilevata è maggiore o uguale a 100, la matrice 5×5 di LED mostra ![Img](./media/AAB2.png), e l'altoparlante emette il suono di allarme 1. ```Python if Lightintensity >= 100: # quando l'intensità luminosa > 100 display.show(val1) # la matrice LED mostra il pattern impostato1 music.play("C5:1") # l'altoparlante riproduce il tono C5 sleep(50) music.play("D5:2") # l'altoparlante riproduce il tono D5 sleep(50) music.play("B5:4") # l'altoparlante riproduce il tono B5 sleep(50) ``` Se la luminosità rilevata è compresa tra 0 e 100, la matrice 5×5 di LED mostra ![Img](./media/AAB1.png), e l'altoparlante emette il suono di allarme 2. ```Python elif Lightintensity > 0 and Lightintensity < 100: # quando 0 < intensità luminosa < 100 display.show(val2) # la matrice LED mostra il pattern impostato2 music.play("C3:1") # l'altoparlante riproduce il tono C3 ``` Altrimenti, la matrice 5×5 di LED non mostra nulla e l'altoparlante non emette suoni. ```Python else: # altrimenti display.clear() # Imposta la luminosità di tutti i LED a 0 (spento) music.reset() # nessun tono ``` ⑥ Pausa di 1000 ms (1 s). ```Python sleep(1000) ``` #### 4.3.2.7 Risultato del test ![Img](./media/4top.png) Dopo aver effettuato i collegamenti e aver alimentato tramite cavo micro USB, collegare l'alimentazione esterna (6 batterie AA) per garantire un'alimentazione sufficiente, e cliccare “Flash” per scaricare il codice sulla scheda micro:bit. ![Img](./media/A124.png) Dopo aver caricato il codice di prova, premere il pulsante di reset sul retro del micro:bit. ![Img](./media/A455.png) L'OLED mostra in tempo reale il valore di luminosità rilevato dal sensore di luce. Quando la luminosità rilevata è maggiore di 100, la matrice 5×5 di LED mostra ![Img](./media/AAB2.png), e l'altoparlante emette il suono di allarme 1 come avviso di livello elevato. Se la luminosità rilevata è compresa tra 0 e 100, la matrice 5×5 di LED mostra ![Img](./media/AAB1.png), e l'altoparlante emette il suono di allarme 2 come avviso di livello basso. Altrimenti, la matrice 5×5 di LED non mostra nulla e l'altoparlante non emette suoni. ![Img](./media/dongtu-2.gif) ⚠️ **Nota: I mattoncini da costruzione nell'esperimento non sono inclusi in questo kit.** (**Suggerimento:** Se non si osservano risultati, premere il pulsante di reset della scheda micro:bit.) ![Img](./media/4bottom.png)