Nota

¡Hola, bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook! Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas.

¿Por qué unirse?

  • Soporte Experto: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Avances Exclusivos: Obtén acceso anticipado a anuncios de nuevos productos y adelantos exclusivos.

  • Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.

  • Promociones y Sorteos Festivos: Participa en sorteos y promociones festivas.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo!

2.2.1 Fotorresistor

Nota

../_images/mcp3008_and_adc0834.jpg

Dependiendo de la versión de su kit, identifique si tiene ADC0834 o MCP3008 y continúe con la sección correspondiente.

Introducción

El fotorresistor es un componente comúnmente utilizado para medir la intensidad de la luz ambiental. Ayuda al controlador a reconocer el día y la noche y realizar funciones de control de luz, como una lámpara nocturna. Este proyecto es muy similar al del potenciómetro, y podrías pensar que cambia el voltaje para detectar la luz.

Componentes Necesarios

En este proyecto, necesitamos los siguientes componentes.

../_images/2.2.1_photoresistor_list.png

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ARTÍCULOS EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Resistor

COMPRAR

LED

COMPRAR

ADC0834

-

Fotoresistor

COMPRAR

Diagrama Esquemático

../_images/2.2.1_photoresistor_schematic_1.png ../_images/2.2.1_photoresistor_schematic_2.png

Procedimientos Experimentales

Paso 1: Montar el circuito.

../_images/2.2.1_photoresistor_circuit.png

Paso 2: Ir a la carpeta del código.

cd ~/raphael-kit/python-pi5

Paso 3: Ejecutar el archivo ejecutable.

sudo python3 2.2.1_Photoresistor_zero.py

Cuando el código se esté ejecutando, la intensidad del LED cambiará según la intensidad de luz detectada por el fotorresistor.

Advertencia

Si recibe el mensaje de error RuntimeError: Cannot determine SOC peripheral base address, consulte Si «gpiozero» no funciona.

Código

Nota

Puedes Modificar/Restablecer/Copiar/Ejecutar/Detener el código a continuación. Pero antes de eso, debes ir a la ruta del código fuente como raphael-kit/python-pi5. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.

#!/usr/bin/env python3
from gpiozero import PWMLED
import ADC0834
import time

# Inicializar un LED PWM en el pin GPIO 22
led = PWMLED(22)

# Configurar el módulo ADC0834
ADC0834.setup()

# Definir una función para mapear valores de un rango a otro
def MAP(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

# Bucle principal para leer el valor del ADC y controlar el brillo del LED
def loop():
    while True:
        # Leer valor analógico del ADC
        analogVal = ADC0834.getResult()
        print('value = %d' % analogVal)

        # Mapear el valor del ADC a un valor PWM y establecer el brillo del LED
        led.value = float(analogVal/255)

        # Esperar 0.2 segundos
        time.sleep(0.2)

# Ejecutar el bucle principal y manejar KeyboardInterrupt para un apagado ordenado
try:
    loop()
except KeyboardInterrupt:
    # Apagar el LED antes de salir
    led.value = 0

Explicación del Código

  1. Este segmento importa la clase PWMLED de la biblioteca gpiozero, necesaria para controlar LEDs PWM. También incluye el módulo ADC0834 para la interfaz con el convertidor analógico-digital, y el módulo time para ejecutar funciones basadas en el tiempo, como sleep.

    #!/usr/bin/env python3
    from gpiozero import PWMLED
    import ADC0834
    import time
    
  2. Inicializa un LED PWM conectado al pin GPIO 22 y configura el módulo ADC0834, preparándolo para su uso en el proyecto.

    # Inicializar un LED PWM en el pin GPIO 22
    led = PWMLED(22)
    
    # Configurar el módulo ADC0834
    ADC0834.setup()
    
  3. Define una función para mapear un valor de entrada de un rango a otro. Esta función es crucial para traducir las lecturas del ADC en un rango adecuado para el control PWM.

    # Definir una función para mapear valores de un rango a otro
    def MAP(x, in_min, in_max, out_min, out_max):
        return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
    
  4. Esta sección contiene un bucle que lee continuamente el valor analógico del ADC0834, lo mapea a un valor PWM correspondiente y ajusta el brillo del LED. Se incluye una breve pausa (time.sleep(0.2)) para hacer visibles los cambios y evitar sobrecargar la CPU.

    # Bucle principal para leer el valor del ADC y controlar el brillo del LED
    def loop():
        while True:
            # Leer valor analógico del ADC
            analogVal = ADC0834.getResult()
            print('value = %d' % analogVal)
    
            # Mapear el valor del ADC a un valor PWM y ajustar el brillo del LED
            led.value = float(analogVal/255)
    
            # Esperar 0.2 segundos
            time.sleep(0.2)
    
  5. Ejecuta la función loop e incluye el manejo de errores para un apagado ordenado en caso de una interrupción de teclado. Asegura que el LED se apague cuando se detenga el programa.

    # Ejecutar el bucle principal y manejar KeyboardInterrupt para un apagado ordenado
    try:
        loop()
    except KeyboardInterrupt:
        # Apagar el LED antes de salir
        led.value = 0