### 4.3.3 Rilevatore di raggi ultravioletti solari #### 4.3.3.1 Panoramica ![Img](./media/top1.png) Il rilevatore di raggi ultravioletti solari è uno strumento di precisione usato per misurare l'intensità della radiazione ultravioletta proveniente dal sole. Rileva la radiazione ultravioletta (UV) invisibile all'occhio umano e ne quantifica l'intensità. Simili ai rilevatori di intensità luminosa, si basano anch'essi sull'effetto fotoelettrico, ma il loro nucleo risiede nella rilevazione selettiva dei raggi ultravioletti. In questo progetto, l'OLED mostrerà in tempo reale l'intensità ultravioletta rilevata. Quando supera un certo valore, l'altoparlante sulla scheda emetterà un allarme e la matrice LED 5×5 mostrerà un pattern come avviso. Il rilevatore di raggi ultravioletti solari è ampiamente usato in quasi tutte le occasioni che richiedono la quantificazione della “luce ultravioletta”, inclusi test di lampade per polimerizzazione UV e prodotti solari, apparecchi per fototerapia UV, monitoraggio di lampade di sterilizzazione UV in sistemi di purificazione dell'acqua e dell'aria, ecc. ![Img](./media/bottom1.png) #### 4.3.3.2 Conoscenze sui componenti ![Img](./media/2top.png) **Sensore di raggi ultravioletti** ![Img](./media/UV-sensor.png) Il sensore ultravioletti è utilizzato per rilevare i raggi UV, ed è principalmente composto da G365S01M basato su fotodiodi a semiconduttore. Può convertire l'intensità della radiazione UV nell'ambiente in un segnale di tensione analogico leggibile da un microcontrollore (come una scheda micro:bit). Il suo schema è il seguente: ![Img](./media/UV.png) Conversione fotoelettrica: Quando il fotodiodo ultraviolettà interno al sensore è esposto alla luce UV, genera una corrente estremamente debole (proporzionale all'intensità UV). Amplificazione della corrente: Questa debole corrente viene amplificata dall'amplificatore operazionale integrato internamente. Uscita del segnale: Il segnale amplificato esce direttamente come tensione analogica da un pin. Il valore di tensione è solitamente compreso tra 0V e 1V (con alimentazione 3.3V). Più intensa è l'UV, più alta sarà la tensione. **Parametri:** - Tensione di funzionamento: DC 5V - Lunghezza d'onda di risposta di picco: 355nm (λmax) - Responsività di picco (355nm) : 0.18A/W (Rmax) - Intervallo di risposta spettrale: 220~370nm - Rapporto di responsività UV/luce visibile (Rmax/R400nm): > ![Img](media/103.png)(VB) **Microbit 5×5LED Matrix** ![Img](./media/j101.png) La matrice LED della scheda micro:bit contiene 25 LED disposti a griglia. Possiamo controllare un determinato LED integrando il suo valore di posizione nel codice di prova. Teoricamente possiamo accendere più LED contemporaneamente per mostrare pattern, cifre e scorrimento di caratteri. ![Img](./media/2bottom.png) #### 4.3.3.3 Componenti richiesti | ![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/UV-sensor1.png)|![Img](./media/usb.png) |![Img](./media/4pin.png)| | ultraviolet sensor ×1 | micro USB cable×1 | 4 pin wire ×1 | |![Img](./media/3pin.png)|![Img](./media/batterycase.png)|![Img](./media/AAbattery.png)| | 3 pin wire ×1 | battery holder ×1 | AA battery(**self-prepared**) ×6 | #### 4.3.3.4 Schema di collegamento ⚠️ **Quando effettuate i collegamenti, prestate attenzione al colore dei fili.** | OLED display | wire color | micro:bit shield pin | micro:bit board pin | | :----------: | :--------: | :------------------: | :-----------------: | | GND | black | G | G | | VCC | red | V2 | V | | SDA | blue | 20 | P20 | | SCL | green | 19 | P19 | | ultraviolet sensor | wire color | micro:bit shield pin | micro:bit board pin | | :----------------: | :--------: | :------------------: | :-----------------: | | G | black | G | G | | V | red | V2 | V | | S | yellow | 1 | P1 | ![Img](./media/couj3.png) #### 4.3.3.5 Flusso del codice ![Img](./media/flow-chart-03.png) #### 4.3.3.6 Codice di prova ⚠️ **Suggerimento 1: Prima di scaricare il codice sulla scheda Microbit, importare 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 5 nella condizione if() può essere modificata in base alla situazione reale.** **Codice completo:** ```Python ''' Theme: Solar ultraviolet detector Function: OLED displays the intensity of ultraviolet rays and the ultraviolet sensor controls the 5×5 dot matrix and speaker Compiling IDE: MU 1.2.0 Author: https://docs.keyestudio.com ''' # import related libraries from microbit import * from oled_ssd1306 import * import music import math # initialize and clear oled initialize() # initialize oled clear_oled() # clear oled # Initialize the ADC pin (the ultraviolet sensor is connected to pin1) uv_sensor = pin1 def read_uv_index(): # Read the analog value (0-1023 corresponds to 0-5.0V) raw_value = uv_sensor.read_analog() # Make sure the value is within the valid range if raw_value > 1023: raw_value = 1023 elif raw_value < 0: raw_value = 0 # Map to the ultraviolet index range of 0 to 15 # The mapping range can be adjusted according to the actual characteristics of the sensor uvi = raw_value * (15.0 / 1023) return round(uvi, 1) while True: clear_oled() # clear OLED uv = read_uv_index() # Read the ultraviolet intensity level detected by the ultraviolet sensor add_text(0, 0, "UV Intensity:") # Display the character string in the corresponding position of OLED add_text(14, 0, str(int(uv))) # Display Ultraviolet intensity level in the corresponding position of OLED if uv >= 5: # when uv level >=5 display.show(Image.NO) # LED matrix displays the no pattern music.play("B5:4") # speaker plays B5 tone sleep(100) music.play("C5:4") # speaker plays C5 tone display.show(Image.SAD) # LED matrix displays the sad pattern sleep(100) else: # or display.show(Image.HAPPY) # LED matrix displays the happy pattern music.reset() # no tone sleep(1000) ``` ![Img](./media/line1.png) **Spiegazione breve:** ① Importare le librerie microbit, oled_ssd1306, music e math. ```Python from microbit import * from oled_ssd1306 import * import music import math ``` ② Inizializzare i pixel dell'OLED, cancellare l'OLED. ```Python initialize() # initialize oled clear_oled() # clear oled ``` ③ Inizializzare il pin del sensore di raggi ultravioletti solari. ```Python uv_sensor = pin1 ``` ④ Definire la sotto-funzione per il valore ultravioletti rilevato dal sensore. ```Python def read_uv_index(): # Read the analog value (0-1023 corresponds to 0-3.3V) raw_value = uv_sensor.read_analog() # Make sure the value is within the valid range if raw_value > 1023: raw_value = 1023 elif raw_value < 0: raw_value = 0 # Map to the ultraviolet index range of 0 to 15 # The mapping range can be adjusted according to the actual characteristics of the sensor uvi = raw_value * (15.0 / 1023) return round(uvi, 1) ``` ⑤ Leggere il valore ultravioletti del sensore e visualizzarlo sull'OLED. ```Python uv = read_uv_index() # Read the ultraviolet intensity level detected by the ultraviolet sensor add_text(0, 0, "UV Intensity:") # Display the character string in the corresponding position of OLED add_text(14, 0, str(int(uv))) # Display Ultraviolet intensity level in the corresponding position of OLED ``` ⑥ Istruzione di giudizio: if()...else... Quando l'intensità ultravioletta rilevata dalla luce solare è maggiore o uguale a 5, la matrice LED 5×5 mostra ![Img](./media/ab1.png) e ![Img](./media/ab2.png), e l'altoparlante emette l'allarme. Altrimenti, la matrice mostra ![Img](./media/ab3.png) e l'altoparlante non suona. ```Python if uv >= 5: # when uv level >=5 display.show(Image.NO) # LED matrix displays the no pattern music.play("B5:4") # speaker plays B5 tone sleep(100) music.play("C5:4") # speaker plays C5 tone display.show(Image.SAD) # LED matrix displays the sad pattern sleep(100) else: # or display.show(Image.HAPPY) # LED matrix displays the happy pattern music.reset() # no tone ``` ⑦ Ritardo 1000ms (1s). ```Python sleep(1000) ``` #### 4.3.3.7 Risultato del test ![Img](./media/4top.png) Dopo aver collegato e acceso 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/A125.png) Dopo aver caricato il codice di test, premere il pulsante di reset sul retro della micro:bit. ![Img](./media/A455.png) ⚠️ **Nota:** Ambiente di test per il sensore ultravioletti: luce solare di metà giornata (10:00-14:00); evitare ombreggiature; puntare direttamente il sensore verso il sole. L'OLED mostra in tempo reale l'intensità ultravioletta rilevata. Quando l'intensità ultravioletta rilevata dalla luce solare è maggiore o uguale a 5, la matrice LED 5×5 mostra ![Img](./media/ab1.png) e ![Img](./media/ab2.png), e l'altoparlante emette l'allarme. Altrimenti, la matrice mostra ![Img](./media/ab3.png) e l'altoparlante non suona. ![Img](./media/dongtu-3.gif) ⚠️ **Nota: I blocchi di costruzione nell'esperimento non sono inclusi in questo kit.** (**Suggerimento:** Se non si osserva alcun risultato, premere il pulsante di reset della scheda micro:bit.) ![Img](./media/4bottom.png)