Nota
¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.
¿Por qué unirse?
Soporte Experto: Resuelve problemas postventa y desafíos técnicos con ayuda de nuestra comunidad y equipo.
Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Avances Exclusivos: Accede anticipadamente a anuncios de nuevos productos y adelantos exclusivos.
Descuentos Especiales: Aprovecha descuentos exclusivos en nuestros productos más recientes.
Promociones Festivas y Sorteos: Participa en sorteos y promociones especiales.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.
2.1.4 Potenciómetro
Introducción
La función ADC puede usarse para convertir señales analógicas en señales digitales, y en este experimento se utiliza el ADC0834 para lograr esta conversión. Aquí implementamos este proceso utilizando un potenciómetro. El potenciómetro cambia la cantidad física — voltaje, que es luego convertida mediante la función ADC.
Componentes Necesarios
En este proyecto, necesitamos los siguientes componentes.

Diagrama de Conexión


Procedimientos del Experimento
Paso 1: Monta el circuito.

Nota
Coloca el chip de acuerdo a la posición mostrada en la imagen. Observa que las ranuras en el chip deben estar hacia la izquierda cuando esté colocado.
Paso 2: Abre el archivo de código.
cd ~/davinci-kit-for-raspberry-pi/python-pi5
Paso 3: Ejecuta el código.
sudo python3 2.1.4_Potentiometer.py
Una vez que el código esté en ejecución, gira la perilla del potenciómetro y verás cómo cambia la intensidad del LED en consecuencia.
Advertencia
Si aparece el mensaje de error RuntimeError: Cannot determine SOC peripheral base address
, consulta Si gpiozero no funciona.
Código
Nota
Puedes Modificar/Restablecer/Copiar/Ejecutar/Detener el código a continuación. Antes de eso, asegúrate de estar en 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
# Inicializa un LED PWM en el pin GPIO 22
led = PWMLED(22)
# Configura el módulo ADC0834
ADC0834.setup()
def MAP(x, in_min, in_max, out_min, out_max):
"""
Map a value from one range to another.
:param x: The value to be mapped.
:param in_min: The lower bound of the value's current range.
:param in_max: The upper bound of the value's current range.
:param out_min: The lower bound of the value's target range.
:param out_max: The upper bound of the value's target range.
:return: The mapped value.
"""
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
try:
while True:
# Obtiene la lectura actual del módulo ADC0834
res = ADC0834.getResult()
print('res = %d' % res)
# Mapea el valor del ADC a un rango adecuado para la intensidad del LED
R_val = MAP(res, 0, 255, 0, 100)
# Ajusta la intensidad del LED
led.value = float(R_val / 100)
# Espera 0.2 segundos antes de leer nuevamente
time.sleep(0.2)
# Salida segura cuando se presiona 'Ctrl+C'
except KeyboardInterrupt:
led.value = 0 # Apaga el LED
Explicación del Código
gpiozero
para el control del LED PWM,ADC0834
para la conversión analógica a digital, ytime
para implementar pausas.#!/usr/bin/env python3 from gpiozero import PWMLED import ADC0834 import time
Inicializa un objeto PWMLED conectado al pin GPIO 22 y configura el convertidor ADC0834.
# Inicializa un LED PWM en el pin GPIO 22 led = PWMLED(22) # Configura el módulo ADC0834 ADC0834.setup()
Define una función llamada
MAP
para convertir un rango de valores a otro, útil para ajustar los niveles de brillo del LED.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
Lee continuamente el valor del ADC en un bucle, mapeando la lectura (0-255) a un nivel de brillo (0-100) para el LED. Ajusta la intensidad del LED basado en este valor mapeado. Implementa una pausa de 0.2 segundos para una mayor legibilidad y estabilidad.
try: while True: # Obtiene la lectura actual del módulo ADC0834 res = ADC0834.getResult() print('res = %d' % res) # Mapea el valor del ADC a un rango adecuado para la intensidad del LED R_val = MAP(res, 0, 255, 0, 100) # Ajusta la intensidad del LED led.value = float(R_val / 100) # Espera 0.2 segundos antes de leer nuevamente time.sleep(0.2) # Salida segura cuando se presiona 'Ctrl+C' except KeyboardInterrupt: led.value = 0 # Apaga el LED