Il sensore UV ML8511 (GYML8511) prodotto dalla LAPIS Semiconductor Co., Ltd permette di misurare l’intensità della luce ultravioletta in mW/cm^2.
La radiazione UV o la radiazione della luce ultravioletta, ha lunghezza d’onda nello spettro elettromagnetico compreso tra 10 nm a 400 nm . Nel nostro caso il sensore rileva la luce tra 280 nm a 390 nm, questa lunghezza d’onda è classificata come parte dello spettro dei raggi UVB e la maggior parte dello spettro dei raggi UVA.
Indice
Qual è la differenza tra raggi UVA, UVB e UVC?
I raggi ultravioletti si differenziano per la loro lunghezza d’onda e si suddividono in raggi UVA, UVB e UVC (non misurabili con il nostro sensore):
- I raggi UVA (315-400 nm) rappresentano circa il 95% dei raggi UV e la loro irradiazione è costante, non solo durante tutto l’anno, ma anche in tutti i momenti della giornata. Quando camminiamo all’aperto in una giornata di sole siamo perciò sempre esposti a questi raggi, non importa se sia estate o inverno.
- I raggi UVB (280-315 nm) costituiscono il 5% dei raggi UV e sono presenti maggiormente nel periodo tra aprile e ottobre. La loro intensità però è influenzata anche da altri fattori come altitudine, stagione, orario della giornata, presenza di nuvole e inquinamento.
- I raggi UVC 100-280 nm) sono potenzialmente quelli più pericolosi per l’uomo, Vengono filtrati dallo strato di ozono così da non arrivare alla Terra e pertanto non rappresentano un rischio per la nostra salute.
Quali sono i rischi di un’esposizione prolungata?
Durante l’esposizione solare, soprattutto in estate, quando tendiamo a rimanere al sole più a lungo e i raggi UVB sono presenti, possiamo incorrere in alcuni fastidi causati proprio dall’azione dei raggi UV. Ecco quali sono:
- Rischi degli UVA: gli UVA penetrano più in profondità negli strati del derma e sono responsabili dell’invecchiamento cutaneo quindi della comparsa di rughe e macchie della pelle. Questi raggi possono provocare anche delle dermatiti solari e sono la causa dello sviluppo dei tumori cutanei.
- Rischi degli UVB: gli UVB sono i raggi che donando alla pelle la cosiddetta tintarella, il colorito sano e bronzeo a cui tutti aspiriamo durante i mesi estivi. Fate attenzione però: abbronzatura non deve essere sinonimo di scottatura perché questo è proprio uno degli effetti collaterali degli UVB. Gli UVB quindi sono responsabili degli eritemi solari e contribuiscono anche loro alla formazione di tumori della pelle.
Tabella indice UV
Il valore UV é associato a dei valori compresi tra 1 e 11; ogni indice è poi associato ad un colore che va dal verde, non pericoloso a viola, molto pericoloso.
Descrizione del sensore
Il sensore UV ML8511 (datasheet) è facile da usare, il chip MP8511 funziona emettendo un segnale analogico in relazione alla quantità di luce UV rilevata.
Il modulo può essere utilizzato nella creazione di dispositivi che avvertono l’utente del pericolo di scottature solari o rilevano l’indice UV in relazione alle condizioni meteorologiche.
Data la sua sensibilità, il sensore rileva la luce a 280-390 nm, permette di valutare lo spettro UVB (raggi brucianti) e la maggior parte dello spettro UVA (raggi abbronzanti).
Il valore di tensione analogica è correlata linearmente all’intensità UV misurata (mW/cm2) .
Per la gestione è sufficiente un microcontrollore in grado di eseguire una conversione del segnale da analogico a digitale.
Il sensore ML8511 è rappresentato da un package per montaggio superficiale di piccole dimensione (4,0 mm x 3,7 mm x 0,73 mm, QFN in ceramica a 12 pin).
Al suo interno si trovano un fotodiodo sensibile ai raggi UV-A e UV-B e un amplificatore operazionale integrato.
Circuito elettrico del modulo sensore UV ML8511 GYML8511
Per facilitare l’utilizzo del sensore è disponibile uno specifico modulo Breakout. Sul modulo è presente un regolatore di tensione U1 di tipo LDO 662K (datasheet), che riduce la tensione di alimentazione al valore di 3.3V del sensore. Oltre a questo sono presenti una resistenza e due condensatori necessari al funzionamento del sensore.
Il modulo etichettato GYML8511 misura 13,5×11,65×3
Riassumendo le caratteristiche del sensore UV ML8511 GYML8511 sono:
Alimentazione:
– 5 VDC tramite i pin GND e VIN
– 3,3 VDC tramite i pin GND e 3V3
Assorbimento di corrente: circa 2 mA
Gamma di radiazioni misurate: da 280 a 390 nm (UV-A e UV-B)
Tempo di stabilizzazione dopo l’accensione: fino a 2 ms
Corrente massima di uscita (OUT): fino a 5 mA
Temperatura di funzionamento: da -20°C a +70°C
Dimensioni (mm): 13,5×11,65×3
Peso: 2 grammi
PINOUT del modulo sensore UV ML8511 GYML8511
- VIN: ingresso alimentazione 5 VDC
- 3V3: ingresso alimentazione 3,3 VDC
- GND: massa alimentazione
- OUT: tensione di uscita direttamente proporzionale all’intensità della radiazione ultravioletta
- EN: quando si mette a livello logico “0”, il modulo non rileva più la radiazione UV, di solito si collega al pin 3V3
Caratteristiche UV
Il grafico sotto riportato rappresenta le caratteristiche tra la tensione di uscita dal sensore rispetto all’intensità UV (mW/cm²) ad alimentazione VDD costante. Le curve in diversi colori rappresentano il funzionamento del sensore nelle diverse gamme di temperature.
Dove trovare il sensore?
Il Breakout con sensore UVB ML8511 può essere acquistato presso il sito FUTURA ELETTRONICA, il codice prodotto è 2846-GYML8511, il suo costo, al momento della pubblicazione di questo articolo di 7,50 €.
Altra possibilità di acquisto è presso il sito Homotix, in questo caso il codice prodotto è HMT8511 , il suo costo, al momento della pubblicazione di questo articolo di 8,20 €.
Collegamento di base del sensore
Vediamo prima di tutto il collegamento di base del sensore, in questo caso leggeremo i valori forniti dal sensore tramite il monitor seriale dell’IDE.
Il programma originale si trova sul sito della SparkFun sulla pagina dedicata alla guida del sensore.
Materiale occorrente
Il materiale per realizzare il nostro misuratore di UV è formato da:
![]() | ![]() |
![]() | ![]() |
Schema dei collegamenti
Come potete notare la connessione del modulo sensore UV ML8511 GYML8511 è alquanto complicata.
Questo è dovuto al fatto che la conversione da analogico a digitale si basa completamente su VCC. Supponiamo che questo sia 5,0 V, ma se la scheda è alimentata da USB, questo potrebbe variare tra 4,75 e 5,25V.
Questo fa si che l’ADC di Arduino sia abbastanza impreciso. Per risolvere questo problema, viene utilizzato il riferimento a 3,3 V fornito dall’integrato su Arduino, che è molto più accurato (preciso entro l’1%). Quindi eseguendo una conversione da analogico a digitale sul pin da 3,3 V (collegandolo ad A1) e confrontando questa lettura con la lettura del sensore, possiamo estrapolare una lettura realistica, indipendentemente dal VIN (purché sia superiore a 3,4 V).
Programma/codice sorgente
Di seguito è riportato il codice sorgente Arduino ML8511 .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | //Definizioni dei pin hardware int UVOUT = A0; //Uscita dal sensore int REF_3V3 = A1; // 3,3 V di alimentazione sulla scheda Arduino void setup() { Serial.begin(9600); pinMode(UVOUT, INPUT); pinMode(REF_3V3, INPUT); Serial.println("ML8511 example"); } void loop() { int uvLevel = averageAnalogRead(UVOUT); int refLevel = averageAnalogRead(REF_3V3); //Utilizzare il pin di alimentazione da 3,3 V come riferimento per ottenere un valore di uscita molto accurato dal sensore float outputVoltage = 3.3 / refLevel * uvLevel; float uvIntensity = mapfloat(outputVoltage, 0.99, 2.8, 0.0, 15.0); //Converte la tensione in un livello di intensità UV Serial.print("Uscita: "); Serial.print(refLevel); Serial.print("ML8511 Uscita: "); Serial.print(uvLevel); Serial.print(" / ML8511 Tesione: "); Serial.print(outputVoltage); Serial.print(" / Intensità UV (mW/cm^2): "); Serial.print(uvIntensity); Serial.println(); delay(100); } //Prende una media di letture su un dato pin //Restituisce la media int averageAnalogRead(int pinToRead) { byte numberOfReadings = 8; unsigned int runningValue = 0; for (int x = 0 ; x < numberOfReadings ; x++) runningValue += analogRead(pinToRead); runningValue /= numberOfReadings; return (runningValue); } //La funzione Arduino Map ma per i float //From: http://forum.arduino.cc/index.php?topic=3922.0 float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } |
Collegamento del sensore e lettura su display
Vediamo ora di aggiungere allo schema visto sopra un display OLED che ci permetterà di leggere i valori senza l’utilizzo di in PC .
Il display utilizzato
In questo progetto viene usato un display di tipo OLED da 0.96 ”, ha una risoluzione di 128×64 pixel, e sfrutta il driver SSD1306 e si interfaccia tramite la connessioni I2C.
Il display ha la particolarità di avere una parte superiore con led gialli e quella inferiore di colore blu.
Per maggiori informazioni vedere articolo Display OLED 0.96″ 128×64 -SSD1306
Materiale occorrente
Il materiale per realizzare il nostro misuratore di UV con display è formato da:
![]() | ![]() |
![]() | ![]() |
![]() Modulo GYML8511 |
Schema dei collegamenti
Rispetto ai collegamenti precedenti si sono aggiunti solamente quelli relativi al bus I2C, in questo caso si sono utilizzati i pin presenti al lato della porta USB, ma possono essere utilizzati anche i pin A4 (SDA) e A5 (SCL). Più i due pin di alimentazione VCC (5V) e GND.
Programma/codice sorgente
Di seguito è riportato il codice sorgente Arduino ML8511 . In questo caso utilizzando un display, occorre utilizzare alcune librerie. Troverete tutte le informazioni nell’articolo Display OLED 0.96″ 128×64 -SSD1306
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | //Definizioni dei pin hardware int UVOUT = A0; //Uscita dal sensore int REF_3V3 = A1; // 3,3 V di alimentazione sulla scheda Arduino #include <Wire.h> #include <Adafruit_SSD1306.h> // OLED display wire address #define OLED_ADDR 0x3C #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET 1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() { Serial.begin(9600); pinMode(UVOUT, INPUT); pinMode(REF_3V3, INPUT); Serial.println(" example"); // initialize and clear display display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR); display.display(); delay(2000); display.clearDisplay(); } void loop() { int uvLevel = averageAnalogRead(UVOUT); int refLevel = averageAnalogRead(REF_3V3); //Utilizzare il pin di alimentazione da 3,3 V come //riferimento per ottenere un valore di uscita molto accurato dal sensore float outputVoltage = 3.3 / refLevel * uvLevel; float uvIntensity = mapfloat(outputVoltage, 0.99, 2.8, 0.0, 15.0); //Converte la tensione in un livello di intensità UV Serial.print("Uscita: "); Serial.print(refLevel); Serial.print("ML8511 Uscita: "); Serial.print(uvLevel); Serial.print(" / ML8511 Tesione: "); Serial.print(outputVoltage); Serial.print(" / Intensità UV (mW/cm^2): "); Serial.print(uvIntensity); Serial.println(); //Scrittura dati su display display.setTextColor(WHITE); display.setCursor(5, 0); display.setTextSize(0); display.print("Intensita' raggi UV"); display.setCursor(20, 20); display.setTextSize(3); display.print(uvIntensity); display.setCursor(20, 45); display.setTextSize(2); display.println("mW/cm^2"); display.display(); delay(500); display.clearDisplay(); } //Prende una media di letture su un dato pin //Restituisce la media int averageAnalogRead(int pinToRead) { byte numberOfReadings = 8; unsigned int runningValue = 0; for (int x = 0 ; x < numberOfReadings ; x++) runningValue += analogRead(pinToRead); runningValue /= numberOfReadings; return (runningValue); } //La funzione Arduino Map ma per i float //From: http://forum.arduino.cc/index.php?topic=3922.0 float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } |
Altro modello di sensore UV
In alternativa al sensore UV ML8511 si può utilizzare l sensore GUVA-S12SD prodotto dalla Roithner Lasertechnik GmbH è un fotodiodo UV al nitruro di gallio (GaN), alloggiato in un package SMD 3528.
Vedere articolo Sensore UV GUVA-S12SD – Arduino