### 4.3.3 Solar Ultraviolet Detector
#### 4.3.3.1 Overview

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.

#### 4.3.3.2 Component Knowledge

**Solar Ultraviolet Sensor**

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:

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): > (VB)
**Microbit 5×5LED Matrix**

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.

#### 4.3.3.3 Required Components
| |  | |
| :--: | :--: | :--: |
| micro:bit V2 main board ×1 | micro:bit shield ×1 | OLED display ×1 |
|| ||
| ultraviolet sensor ×1 | micro USB cable×1 | 4 pin wire ×1 |
||||
| 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 |

#### 4.3.3.5 Code Flow

#### 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](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” .

⚠️ **Consejo 2: El umbral 5 en la condición if() puede modificarse según la situación real.**
**Complete code:**
```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
'''
# 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)
```

**Breve explicación:**
① Importar las librerías microbit, oled_ssd1306, music y math.
```Python
from microbit import *
from oled_ssd1306 import *
import music
import math
```
② Inicializar los píxeles del OLED, limpiar el OLED.
```Python
initialize() # initialize oled
clear_oled() # clear oled
```
③ Inicializar el pin del sensor de radiación ultravioleta solar.
```Python
uv_sensor = pin1
```
④ Definir la subfunción del valor ultravioleta detectado por el sensor.
```Python
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.
```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
```
⑥ 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  y , y el altavoz emite la alarma. De lo contrario, la matriz muestra  y el altavoz no suena.
```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
```
⑦ Retardo de 1000ms (1s).
```Python
sleep(1000)
```
#### 4.3.3.7 Test Result

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.

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

⚠️ **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  y , y el altavoz emite la alarma. De lo contrario, la matriz muestra  y el altavoz no suena.

⚠️ **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.)
