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.

../_images/2.1.7_potentiometer_list.png

Diagrama de Conexión

../_images/2.1.7_potentiometer_second_1.png ../_images/2.1.7_potentiometer_second_2.png

Procedimientos del Experimento

Paso 1: Monta el circuito.

../_images/2.1.7_Potentiometer_circuit.png

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

  1. gpiozero para el control del LED PWM, ADC0834 para la conversión analógica a digital, y time para implementar pausas.

    #!/usr/bin/env python3
    
    from gpiozero import PWMLED
    import ADC0834
    import time
    
  2. 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()
    
  3. 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
    
  4. 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