Sunteți pe pagina 1din 4

Sensor UV ML8511 y Arduino para medición de

intensidad de rayos UV

El sensor UV ML8511 es fácil de usar, el sensor de luz ultravioleta.  El sensor MP8511
UV (ultravioleta) funciona al emitir una señal analógica en relación con la cantidad de
luz UV detectada. Esta ruptura puede ser muy útil para crear dispositivos que adviertan
al usuario de quemaduras solares o detecten el índice UV en relación con las
condiciones climáticas.
Este sensor detecta la luz de 280-390 nm con mayor eficacia. Esto se clasifica como
parte del espectro UVB (rayos ardientes) y la mayoría del espectro UVA (rayos
bronceadores). Produce un voltaje analógico que está relacionado linealmente con
la intensidad UV medida (mW / cm2) . Si su microcontrolador puede hacer una
conversión de señal analógica a digital, entonces puede detectar el nivel de UV.
Componentes requeridos:
 Placa Arduino Uno
 Sensor UV ML8511
 Pantalla LCD 16 * 2
 Potenciómetro 10K
 Tablero de pruebas
 Conexión de cables de puente
Diagrama de bloques:
El sensor UV ML8511 tiene fotodiodo sensible a los rayos UV-A y UV-B . Luego tiene
un amplificador operacional interno incorporado que convertirá la fotocorriente a
salida de voltaje dependiendo de la intensidad de la luz UV .

La salida siempre tiene la forma de voltaje analógico.  A través de la salida de voltaje,


es fácil interactuar con microcontroladores externos y ADC.

Características UV:

Las características se dibujan entre el voltaje de salida del sensor con respecto a la
intensidad UV (mW / cm²) con un suministro VDD constante.  Las curvas en diferentes
colores representan la operación del sensor en diferentes rangos de temperatura.
Diagrama de circuito: Interfaz del sensor UV ML8511 con
Arduino (imagen principal)
El diagrama de circuito para la interfaz del sensor UV ML8511 con Arduino y pantalla
LCD se muestra a continuación. El LCD 16 × 2 RS, EN, D4, D5, D6, D7 está conectado
a Arduino 12, 11, 5, 4, 3, 2 pines. LCD se suministra con 5V. Tiene un potenciómetro
de 10K conectado al pin LCD 3 para ajustar el contraste.
El sensor UV tiene 5 pines Vin, 3V3, GND, OUT, EN . Algunos de los módulos no
tienen pin Vin, que tampoco se usa. El pin EN y el pin 3V3 están conectados al pin
3.3V de Arduino. El mismo pin 3V3 está conectado al pin analógico A1 que se usa
como voltaje de referencia . El pin de salida está conectado a A0 de Arduino y GND a
GND.
Esta conexión para ML8511 es algo complicada. Las conversiones analógicas a
digitales dependen completamente de VCC. Suponemos que esto es 5.0V, pero si la
placa está alimentada por USB, puede ser tan alta como 5.25V o tan baja como
4.75V. Debido a esta ventana desconocida, hace que el ADC en el Arduino sea
bastante inexacto. Para solucionar esto, utilizamos la referencia de 3.3V integrada muy
precisa (precisa dentro del 1%). Entonces, al hacer una conversión analógica a
digital en el pin de 3.3V (conectándolo a A1) y luego comparar esta lectura con la
lectura del sensor, podemos extrapolar una lectura real, sin importar cuál sea el VIN
(como siempre que esté por encima de 3.4V).
Programa / Código fuente:
# include < LiquidCrystal.h >
LiquidCrystal lcd ( 12 , 11 , 5 , 4 , 3 , 2 );
// Definiciones de pin de hardware
int UVOUT = A0; // Salida del sensor
int REF_3V3 = A1; // 3.3V de potencia en la placa Arduino

configuración nula ()
{
De serie. comenzar ( 9600 );
lcd comenzar ( 16 , 2 );

pinMode (UVOUT, INPUT);


pinMode (REF_3V3, ENTRADA);

De serie. println ( " ejemplo ML8511 " );

bucle vacío ()
{
int uvLevel = averageAnalogRead (UVOUT);
int refLevel = averageAnalogRead (REF_3V3);

// Use el pin de alimentación de 3.3V como referencia para obtener un


valor de salida muy preciso del sensor
flotante outputVoltage = 3.3 / refLevel * uvLevel;

float uvIntensity = mapfloat (outputVoltage, 0.99 , 2.8 , 0.0 , 15.0 ); //


Convierte el voltaje a un nivel de intensidad UV

De serie. print ( " salida: " );


De serie. print (refLevel);

De serie. print ( " salida ML8511: " );


De serie. print (nivel uv);

De serie. print ( " / voltaje ML8511: " );


De serie. print (outputVoltage);

De serie. print ( " / Intensidad UV (mW / cm ^ 2): " );


De serie. print (uvIntensity);
lcd claro ();
lcd imprimir ( " Intensidad de rayos UV " );
lcd setCursor ( 0 , 1 );
lcd print (uvIntensity);
lcd imprimir ( " mW / cm ^ 2 " );

De serie. println ();

retraso ( 200 );
}

// Toma un promedio de lecturas en un pin dado


// Devuelve el promedio
int averageAnalogRead ( int pinToRead)
{
byte numberOfReadings = 8 ;
unsigned int runningValue = 0 ;

para ( int x = 0 ; x <numberOfReadings; x ++)


runningValue + = analogRead (pinToRead);
runningValue / = numberOfReadings;

return (runningValue);
}

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;

S-ar putea să vă placă și