Sensor ultravioleta I2C VEML6070

publicado en: Portada | 6

Estimar la radiación ultravioleta midiendo la luz ultravioleta

En el anterior artículo sobre la estimación del índice de radiación ultravioleta con el sensor GUVA-S12SD desde Arduino se explicaba que es complejo medir realmente la radiación ultravioleta, ya que se necesitan espectrorradiómetros, equipos muy costos. Por tanto, calcular de forma precisa el índice UV es difícil. Para eludir esta dificultad, la alternativa propuesta es medir la luz ultravioleta en lugar de la irradiancia ultravioleta y hacer una estimación suponiendo que la primera es proporcional a la segunda, que la cantidad de luz corresponde aproximadamente a la cantidad de radiación.

Por otra parte, la radiación de onda más corta, UVC (entre 100 nm y 280 nm), es absorbida por la capa de ozono, y solamente una pequeña parte (entorno al 0,1 %) de la radiación ultravioleta UVB (entre 280 nm y 315 nm), peligrosa por su efecto ionizante, llega a la superficie de la tierra.

El problema se reduce entonces a medir la luz ultravioleta con una longitud de onda entre los 280 nm y los 400 nm, especialmente la parte entre 315 nm y 400 nm, que representa el 98 % de la luz ultravioleta. A su vez, la luz ultravioleta que atraviesa la capa de ozono supone el 5 % del espectro electromagnético, hasta llegar a las microondas, frente al 39 % de la parte visible o al 56 % del infrarrojo.

Descripción del sensor VEML6070

El VEML6070 es un fotodiodo sensible a la luz ultravioleta, precisamente en el rango de longitud de onda que más conviene a la estimación que se utiliza para obtener el índice UV. Su máxima sensibilidad se encuentra en los 355 nm y recorre toda la zona UVA, quizá con el ligero inconveniente de detectar una pequeña parte del espectro visible. En la siguiente gráfica se muestra la distribución porcentual de su sensibilidad en función de la longitud de onda.

VEML6070 respuesta porcentual en longitud de onda rango ultravioleta

La ventaja que añade el fotodiodo de ultravioleta VEML6070 frente, por ejemplo, al sensor GUVA-S12SD, que se trató en un anterior artículo, es incorporar comunicaciones por medio del bus I2C en lugar de entregar un nivel de tensión, que sería más sensible a interferencias.

Dentro del VEML6070 se encuentra el fotodiodo, la amplificación de la señal y un conversor analógico-digital que entrega el resultado de la medida por medio del bus I2C en forma de «pasos», que habrá que interpretar posteriormente en el microcontrolador considerando la configuración del hardware y del tiempo de lectura elegido. Como puede verse en la gráfica de la imagen de abajo, la distribución de estos pasos es prácticamente lineal y aunque puede obtenerse el índice UV interpolando los valores de las tablas que ofrece el fabricante en sus ejemplos de aplicación, puede obtenerse un resultado bastante bien aproximado suponiendo que la distribución de los valores es uniforme.

VEML6070 distribución porcentual de la media en función del índice UV

Implementación hardware del VEML6070

La implementación del sensor VEML6070 en un circuito es realmente sencilla, sólo necesita una pequeña protección anti-interferencias en el lado de la alimentación, básicamente el clásico filtro formado por un condensador de 10 µF y otro de 100 nF y una resistencia de configuración de la sensibilidad (RSET). En el lado de las comunicaciones, además de las resistencias pull-up del bus I2C, dispone de una señal (ACK) que se activa al alcanzar cierto valor (que es configurable) y que también debe conectarse a una resistencia pull-up y a un pin del µC, preferiblemente que disponga de una interrupción hardware.

circuito de aplicación del sensor ultravioleta UV VEML6070

Como es lógico, la disposición del VEML6070 requiere que le llegue correctamente la luz, por lo que debe colocarse sobre la superficie del dispositivo. Si no es posible disponerlo completamente en el exterior, el fabricante recomienda un ángulo de 55° medido desde la vertical de cada extremo del sensor hasta la abertura del exterior. Este ángulo (±55°) corresponde aproximadamente con el ángulo máximo hasta una sensibilidad de la mitad de la capacidad del sensor. Si se protege el dispositivo con un medio transparente hay que asegurarse que no filtre la luz ultravioleta o, en el peor caso, conocer el nivel y compensarlo en la configuración.

Como se trata de un dispositivo muy popular, es fácil encontrar módulos a bajo precio (incluso más baratos que el propio sensor en pedidos pequeños). Estos módulos, como los del ejemplo de las imágenes de abajo, incluyen los componentes pasivos que acompañan en el circuito de aplicación típica al VEML6070. Como uno de ellos (RSET) se utiliza junto con el tiempo de lectura para determinar la relación entre pasos (valor devuelto por el VEML6070) e índice UV, será necesario conocer su valor, si lo omitiera el fabricante, se puede deducir al conocer los valores (fijos) del resto.

El sensor de luz ultravioleta VEML6070 puede alimentarse con tensiones entre 1V7 y 5V5 por lo que funciona sin más circuitería con casi todas las placas de prueba microcontroladas y se integra fácilmente en un circuito con cualquier µC.

VEML6070 módulo Arduino índice UV UVi index radiación solar ultravioletaVEML6070 módulo Arduino UV index UVi índice radiación solar ultravioleta

Configuración del VEML6070

Ya se ha adelantado que el sensor VEML6070 se configura por dos vías: hardware y software. Por una parte, con una resistencia en el circuito que conecta a masa el pin RSET y que establece un valor multiplicador. Por otra parte, se puede elegir por software un tiempo de integración, que resulta en el tiempo que tarda la lectura, para determinar el rango de medida usado finalmente por el sensor al combinarse con el valor de la resistencia RSET. Los valores de la resistencia en RSET son muy flexibles, suelen encontrarse en el rango de los 220 KΩ hasta los 2,2 MΩ, como su influencia en el comportamiento del VEML6070 es lineal, puede conocerse cómo afectan finalmente al valor medido a partir de los datos de resistencias de ejemplo que indica el fabricante en sus sugerencias de aplicación para este sensor.

El tiempo de refresco o tiempo de lectura se configura por software estableciendo el valor de dos los bits del registro IT, IT0 e IT1. Los cuatro posibles valores corresponden con 00, la mitad de indicado por la resistencia; 01, que no modifica el valor que expresa la resistencia; 10, que duplica el valor de la resistencia (el doble de tiempo); y 11 que cuadriplica el tiempo que indica la resistencia.

Elegir una resistencia y un tiempo de integración (el tiempo de medida o de refresco) afectará a la precisión de la medida: a mayor tiempo de exposición del fotodiodo a la luz, mejor lectura se obtiene; la lectura es más precisa. Esta circunstancia se manifiesta en una resolución (pasos intermedios) más densa con resistencias y tiempos de refresco mayores. La siguiente tabla, de la información de aplicación del fabricante, sirve para obtener el índice UV en función de la lectura del sensor VEML6070 dependiendo de su configuración hardware y software.

Índice UV ½T → 56,25 ms 1T → 112,5 ms 2T → 225 ms 4T → 450 ms
Bajo. De 0 a 2 0-280 0-560 0-1120 0-2240
Moderado. De 3 a 5 281-560 561-1120 1121-2241 2241-4482
Alto. De 6 a 7 561-747 1121-1494 2242-2988 4483-5976
Muy alto. De 8 a 10 748-1027 1495-2054 2989-4108 5977-8216
Los valores están expresados en pasos y corresponden a una resistencia en RSET de 270 KΩ. Los valores aumentan o disminuyen proporcionalmente a la resistencia; por ejemplo, con 540 KΩ el número de pasos sería el doble de estos.

Con los valores de la tabla anterior se puede obtener un vector de valores, que puede incluir los pasos correspondientes a los índices intermedios, a partir de la cual calcular el valor interpolando la medida en pasos entregada por el sensor ultravioleta VEML6070. Como la distribución de los valores es muy uniforme, es aceptable calcular un coeficiente para obtener el índice UV en función del número de pasos.

Entendiendo que se trataría de un valor estimado y aproximado, también sería posible obtener la irradiancia sabiendo que cada paso del índice UV corresponde a 0,025 W/m2 de forma que, por ejemplo, un UVi de 6 equivaldría a 0,15 W/m2.

La configuración de la señal ACK se realiza siempre por software y permite habilitarla o deshabilitarla, con el bit del registro ACK, y determinar el número de pasos a los que se produce su activación, 102 o 145 pasos, según valga 0 o 1 el bit del registro ACK_THD. Si no se utiliza, la patilla ACK puede simplemente dejarse al aire y, como puede verse en el circuito de aplicación, necesita una resistencia de pull-up en caso de explotar esta capacidad. La señal ACK es especialmente útil en tiempos de lectura largos, que permitirá dedicar los recursos del sistema a otras tareas mientras no haya lectura de luz ultravioleta.

VEML6070 índice UV UVi radiación solar ultravioleta módulo Arduino

Para disminuir el consumo hasta 15 µA mientras no se está utilizando, el VEML6070 dispone del registro SD (shutdown) que establece un modo de reposo cuando se activa. En modo espera, el conusmo es de unos 100 µA y el máximo consumo, mientras se lee y convierte un valor, no excede de 250 µA con un valor de resistencia en RSET de 240 kΩ

El sensor ultravioleta VEML6070 usa la dirección 0x38 (7 bits más isgnificativos) del bus I2C para los comandos de escritura, y las direcciones 0x38 y 0x39 para las operaciones de lectura (el resultado es un entero de 16 bits). El formato del byte de con el que se configura el VEML6070 incluye los siguientes bits:

bit 7 → 0 bit 6 → 0 bit 5 → ACK bit 4 → ACK_THD bit 3 → IT1 bit 2 → IT0 bit 1 → 1 bit 0 → SD

Los bits de las posiciones 1, 6 y 7 están reservados y deben tomar los valores indicados en la tabla anterior al enviar una orden de configuración al sensor.

Software para gestionar el VEML6070

En el siguiente ejemplo de código Arduino para VEML6070 se utiliza un tiempo de lectura fijo configurado para una resistencia de 270 KΩ (la más frecuente) y un tiempo de integración TI de 1T. La lectura se realiza cada tres segundos, así que hay que tener en cuenta TI para calcular el índice UV pero no es necesario considerarlo a la hora de realizar lecturas sucesivas ya que en este caso el tiempo de integración será muy inferior a el tiempo entre lecturas que realiza el programa.

VEML6070 UV index UVi índice radiación solar ultravioleta módulo Arduino

Víctor Ventura

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

Más entradas - Página web

Sígueme:
TwitterLinkedIn

Seguir Víctor Ventura:

Programador multimedia y web + IoT. Mejor con software libre.

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

6 Respuestas

  1. Alfonso Sánchez Perdomo

    Buenas, disculpe tengo una duda con la resistencia reset, puesto que no se en que pin del sensor debe ir ya que este solo tiene 5 pines, entonces en donde deberia colocar esa resistencia?

    • Víctor Ventura

      Hola, Alfonso.

      El pinout del VEML6070 puedes encontrarlo en su datasheet. Abajo incluyo una imagen con el esquema de los contactos; el pin RESET es el 4.

      VEML6070-pinout-esquema

      Si no estás usando el componente sino un módulo que lo contiene, verás que hay más circuitería y seguramente no necesites conectar RESET puesto que ya lo ha hecho el fabricante por ti. En tal caso, si usas un módulo, solo necesitas alimentarlo y conectarlo al bus I2C

      Un saludo y suerte con tu proyecto.

      • Alfonso Sánchez Perdomo

        Gracias por la información, estoy haciendo un solmaforo y tengo que hacerlo con este sensor, por consiguiente este proyecto debe estar funcionar todo el dia y lo que ahora me falla esque al estar en unnivel alto ya sea rojo o violeta el sensor deja deja de funcionar o en su defecto solo queda en nivel naranja. No se entonces si es el arduino (estoy utilizando arduino nano) o en su defecto el sensor.

        Gracias por su atención.

        • Alfonso Sánchez Perdomo

          Sera que el ack es muy necesario en este proyecto??, digo solo tengo que recibir los datos y asignarles valor con el arduino y despues encender un respectivo color de led’s.

  2. Samuel

    Hola, respecto al VEML6070, podrias apoyarme con mas informacion, tenemos entre manos un proyecto para medir los indices de radiacion UV, me ayudaria mucho tu apoyo si pudieras comunicarte en mi direccion email

  3. Aldair Martinez

    Como es que sale el valor de Pasos devueltos por el VEML6070 que son 186.81818182

    #define PASOS_UVI 186.81818182 // Pasos devueltos por el VEML6070 con una resistencia RSET de 270 KΩ configurado a 1T (los cambios serían proporcionales al cambio del tiempo y de la resistencia)

    Es el numero de pasos devueltos, pero a que sensibilidad o de donde se basa ese calculo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *