4.3.3 Solar Ultraviolet Detector

4.3.3.1 Overview

Img

El detector de radiación ultravioleta solar es un instrumento de precisión utilizado para medir la intensidad de la radiación ultravioleta procedente del sol. Detecta la radiación ultravioleta (UV) que es invisible al ojo humano y cuantifica su intensidad. De manera similar a los detectores de intensidad de luz, también se basan en el efecto fotoeléctrico, pero su núcleo radica en la detección selectiva de los rayos ultravioleta.

En este proyecto, el OLED mostrará en tiempo real la intensidad ultravioleta detectada. Cuando supere cierto valor, el altavoz de la placa emitirá una alarma y la matriz de LED 5×5 mostrará un patrón para servir como advertencia.

El detector de radiación ultravioleta solar se utiliza ampliamente en casi todas las ocasiones que requieren la cuantificación de la “luz ultravioleta”, incluyendo pruebas de lámparas de curado UV y productos solares, equipos de fototerapia ultravioleta, monitorización de lámparas de esterilización ultravioleta en sistemas de purificación de agua y sistemas de purificación de aire, etc.

Img

4.3.3.2 Component Knowledge

Img

Solar Ultraviolet Sensor

Img

El sensor de ultravioleta se utiliza para detectar rayos ultravioleta, y está compuesto principalmente por G365S01M basado en fotodiodos semiconductores. Puede convertir la intensidad de la radiación UV en el entorno en una señal de voltaje analógico que puede ser leída por un microcontrolador (por ejemplo, una placa micro:bit). Su diagrama esquemático es el siguiente:

Img

Conversión fotoeléctrica: Cuando el fotodiodo ultravioleta dentro del sensor se expone a luz ultravioleta, genera una corriente extremadamente débil (proporcional a la intensidad UV).

Amplificación de la corriente: Esta corriente débil se amplifica mediante el amplificador operacional integrado internamente.

Salida de la señal: La señal amplificada sale directamente como un voltaje analógico por un pin. El valor de voltaje suele estar entre 0V y 1V (con alimentación de 3.3V). Cuanto mayor sea la intensidad UV, mayor será el voltaje.

Parámetros:

  • Operating voltage: DC 5V

  • Peak response wavelength: 355nm (λmax)

  • Peak responsivity (355nm) : 0.18A/W (Rmax)

  • Spectral response range: 220~370nm

  • UV/visible light responsivity ratio(Rmax/R400nm): > Img(VB)

Microbit 5×5LED Matrix

Img

La matriz de LED de la placa micro:bit contiene 25 LEDs en una cuadrícula. Podemos controlar un LED concreto integrando su valor de posición en el código de prueba. Teóricamente, podemos encender muchos LEDs al mismo tiempo para mostrar patrones, dígitos y caracteres en desplazamiento.

Img

4.3.3.3 Required Components

Img

Img

Img

micro:bit V2 main board ×1

micro:bit shield ×1

OLED display ×1

Img

Img

Img

ultraviolet sensor ×1

micro USB cable×1

4 pin wire ×1

Img

Img

Img

3 pin wire ×1

battery holder ×1

AA battery(self-prepared) ×6

4.3.3.4 Wiring Diagram

⚠️ Cuando realice el cableado, preste atención al color del cable.

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

4.3.3.5 Code Flow

Img

4.3.3.6 Test Code

⚠️ Consejo 1: Antes de descargar el código a la placa Microbit, importe el archivo de la librería “oled_ssd1306.py” refiriéndose a Import Library on MU” .

Img

⚠️ Consejo 2: El umbral 5 en la condición if() puede modificarse según la situación real.

Complete code:

'''
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
'''
# importar bibliotecas relacionadas
from microbit import *
from oled_ssd1306 import *
import music
import math

# inicializar y limpiar oled
initialize()  # initialize oled
clear_oled()  # clear oled

# Inicializar el pin ADC (el sensor de ultravioleta está conectado al pin1)
uv_sensor = pin1

def read_uv_index():
    # Leer el valor analógico (0-1023 corresponde a 0-5.0V)
    raw_value = uv_sensor.read_analog()
    # Asegurarse de que el valor esté dentro del rango válido
    if raw_value > 1023:
        raw_value = 1023
    elif raw_value < 0:
        raw_value = 0
    # Mapear al rango del índice ultravioleta de 0 a 15
    # El rango de mapeo puede ajustarse según las características reales del sensor
    uvi = raw_value * (15.0 / 1023)

    return round(uvi, 1)

while True:
    clear_oled()   # limpiar OLED
    uv = read_uv_index() # Leer el nivel de intensidad ultravioleta detectado por el sensor ultravioleta
    add_text(0, 0, "UV Intensity:")  # Mostrar la cadena de caracteres en la posición correspondiente del OLED
    add_text(14, 0, str(int(uv)))  # Mostrar el nivel de intensidad ultravioleta en la posición correspondiente del 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

Breve explicación:

① Importar las librerías microbit, oled_ssd1306, music y math.

from microbit import *
from oled_ssd1306 import *
import music
import math

② Inicializar los píxeles del OLED, limpiar el OLED.

initialize()  # initialize oled
clear_oled()  # clear oled

③ Inicializar el pin del sensor de radiación ultravioleta solar.

uv_sensor = pin1

④ Definir la subfunción del valor ultravioleta detectado por el sensor.

def read_uv_index():
    # Leer el valor analógico (0-1023 corresponde a 0-3.3V)
    raw_value = uv_sensor.read_analog()
    # Asegurarse de que el valor esté dentro del rango válido
    if raw_value > 1023:
        raw_value = 1023
    elif raw_value < 0:
        raw_value = 0
    # Mapear al rango del índice ultravioleta de 0 a 15
    # El rango de mapeo puede ajustarse según las características reales del sensor
    uvi = raw_value * (15.0 / 1023)

    return round(uvi, 1)

⑤ Leer el valor ultravioleta del sensor y mostrarlo en el 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

⑥ Sentencia de juicio: if()…else…

Cuando la intensidad ultravioleta detectada de la luz solar es mayor o igual a 5, la matriz de LED 5×5 muestra Img y Img, y el altavoz emite la alarma. De lo contrario, la matriz muestra Img y el altavoz no suena.

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

⑦ Retardo de 1000ms (1s).

sleep(1000)

4.3.3.7 Test Result

Img

Después de realizar el cableado y encender mediante el cable micro USB, conéctese a la alimentación externa (6 pilas AA) para asegurar un suministro de energía suficiente, y haga clic en “Flash” para descargar el código a la placa micro:bit.

Img

Después de subir el código de prueba, presione el botón de reinicio en la parte trasera de la micro:bit.

Img

⚠️ Nota: Entorno de prueba para el sensor ultravioleta: Luz solar del mediodía (10:00-14:00); Evitar sombras; Apuntar directamente el sensor hacia el sol.

El OLED muestra en tiempo real la intensidad ultravioleta detectada. Cuando la intensidad ultravioleta detectada de la luz solar es mayor o igual a 5, la matriz de LED 5×5 muestra Img y Img, y el altavoz emite la alarma. De lo contrario, la matriz muestra Img y el altavoz no suena.

Img

⚠️ Nota: Los bloques de construcción en el experimento no están incluidos en este kit.

(Consejo: Si no se observa ningún resultado, por favor presione el botón de reinicio de la placa micro:bit.)

Img