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
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.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ARTÍCULOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Raphael |
337 |
También puedes comprarlos por separado en los enlaces a continuación.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
- |
|
Diagrama Esquemático
Procedimientos Experimentales
Paso 1: Montar el circuito.
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
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
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()
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
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)
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