Si te divertiste haciendo que los LED parpadeen en una Raspberry Pi, ¡espera hasta que escuches sobre cómo controlar su brillo! En esta guía, trabajamos con un par de botones para ajustar el brillo del LED en una Raspberry Pi.
¿Estás comenzando tu primer proyecto de Raspberry Pi? Aquí se explica cómo instalar rápidamente el sistema operativo Raspberry Pi en su dispositivo.
Qué le hace PWM a un LED
PWM, o modulación de ancho de pulso, es un método que reduce artificialmente la salida de voltaje de los pines GPIO (entrada/salida de propósito general) de Raspberry Pi. Es artificial, ya que en realidad no reduce el voltaje y simplemente lo enciende y apaga tan rápido que el voltaje general se vuelve más bajo que el voltaje real que le está aplicando.
Para un LED o diodo emisor de luz, aumentar el voltaje general hace que brille más, mientras que disminuirlo lo hace más tenue. Pero como la Raspberry Pi no tiene salida analógica, usamos PWM para controlar el brillo del LED.
Lo que necesitarás
- 2 pulsadores
- 3 resistencias (250-550Ω funcionarán. Use una clasificación más baja si el LED está demasiado oscuro).
- 1 LED (cualquier color)
- Tablero de circuitos
- Cables puente
- Raspberry Pi (cualquier modelo excepto Pi Pico)
Cómo usar PWM para controlar el brillo de los LED en una Raspberry Pi
En esta guía, usamos dos botones para hacer que el LED brille más o se atenúe con PWM. Presionar el botón «más brillante» aumenta la salida PWM, mientras que presionar el botón «atenuar» la disminuye.
Preparando el Circuito
- Comencemos con el LED. En la protoboard, coloque el LED y conecte una resistencia a un lado. El lado en el que se coloca la resistencia no importa.
- Conecte un puente a su lado del cátodo. Este apuntará al pin 11 en la Raspberry Pi. Agregue otro puente que conduzca al riel azul en la placa de prueba, luego agregue otro puente desde ese riel azul al pin 9 en la Raspberry Pi, que es GND.
Nota: para encontrar el número de pin correcto en la Raspberry Pi, sostenga la placa de modo que la bandeja de pines GPIO quede a la derecha. El pin superior izquierdo debe ser el pin 1, a su derecha debe ser el pin 2 y debajo debe ser el pin 3.
- Necesitarás construir los pulsadores. Coloque los botones en la placa de prueba y agregue una resistencia a una pata de cada botón. El otro lado de la resistencia debe conducir al riel azul de la placa de prueba.
Propina: ¿Quieres saber más sobre pulsadores? Tenemos una guía completa dedicada a mostrarle cómo usar botones con pines GPIO de Raspberry Pi.
- Agregue cables de puente en una conexión paralela con la resistencia y el botón pulsador. Conecte el otro lado de estos a los pines 13 (botón «Brighter») y 15 (botón «Dimmer»).
- Use un cable de puente para conectar los botones al costado con el riel rojo de la placa de pruebas.
- Conecte el riel rojo a una fuente de 3,3 V en la Raspberry Pi, como el pin 1.
Si Python es su lenguaje de programación favorito, aprenda a instalar y administrar varias versiones de Python en Linux.
Preparando el Código
En su herramienta de edición de código favorita, cree un nuevo archivo y guárdelo como «rpi-lcdpwm.py».
- Comience con el código a continuación, que le brinda dos formas de importar módulos en Python: la primera importa el
RPi.GPIO
módulo y te permite llamarlo con soloGPIO
y el segundo importa sólo elsleep()
función de la totalidad deltime
módulo.
import RPi.GPIO as GPIO from time import sleep
- Defina los números de pin para que sea más fácil cambiar los pines en caso de que cambie de opinión más adelante.
ledPin = 11 brightenButton = 13 dimButton = 15
- Opcional: agregar la línea
GPIO.setwarnings(False)
para que pueda evitar el mensaje de advertencia de GPIO cuando inicie el script más tarde.
- Configure el método de selección de pines.
BOARD
es una buena opción para principiantes, ya que facilita la búsqueda de pines sin tener que consultar el pinout. El otro método esBCM
, que significa «Broadcom». Esto utiliza los números de Broadcom asignados a cada pin, que pueden diferir según la marca de su Raspberry Pi.
GPIO.setmode(GPIO.BOARD)
- Asigne los pines GPIO como entrada o salida. estamos asignando
ledPin
como un pin de salida y siempre comenzará su estado comoLOW
. Las siguientes dos líneas establecidasbrightenButton
ydimButton
como pines de entrada que escuchan las pulsaciones de sus botones. Estos también deben establecerse comoGPIO.PUD_DOWN
para designarlos como usando resistencias desplegables.
GPIO.setup(ledPin, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(brightenButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(dimButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
- Declaremos el PWM.
pwmLEDPin
es una variable que facilita escribirGPIO.PWM(ledPin, 100)
más tarde, y el.start(0)
El comando inicia el proceso PWM. Ahora podemos cambiar la salida deledPin
utilizando PWM.
pwmLEDPin = GPIO.PWM(ledPin, 100) pwmLEDPin.start(0)
- El ciclo de trabajo es el porcentaje de tiempo que el pin está activo durante una onda de pulso. Aquí, estamos configurando el ciclo de trabajo al 100% primero. Tuvimos una discusión bastante larga sobre este tema en nuestra guía para usar servomotores con Raspberry Pi, si está interesado.
dutyCycle = 100 GPIO.output(ledPin, GPIO.HIGH)
- Para la parte de bucle, estamos configurando un
while
bucle que se ejecuta virtualmente para siempre.
while True:
- Al comienzo de este ciclo de bucle, estamos actualizando el ciclo de trabajo.
pwmLEDPin.ChangeDutyCycle(dutyCycle)
- Programemos lo que
brightenButton
lo hace. Cuando la frambuesa detecta electricidad que pasa a través del pin parabrightenButton
mostrará un mensaje que dice «brightenButton is HIGH», que suma 5 al valor actual del ciclo de trabajo hasta que llega a 100.
if GPIO.input(brightenButton) == GPIO.HIGH: print("brightenButton is HIGH") if dutyCycle < 100: dutyCycle += 5 sleep(0.25) else: dutyCycle = 100
- Al programar el
dimButton
función, hace lo contrario, reduciendo el valor en 5 hasta llegar a 0.
elif GPIO.input(dimButton) == GPIO.HIGH: print("dimButton is HIGH") if dutyCycle > 0: dutyCycle -= 5 sleep(0.25) else: dutyCycle = 0
Código final:
import RPi.GPIO as GPIO from time import sleep ledPin = 11 brightenButton = 13 dimButton = 15 GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(ledPin, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(brightenButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(dimButton, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) pwmLEDPin = GPIO.PWM(ledPin, 100) pwmLEDPin.start(0) dutyCycle = 100 GPIO.output(ledPin, GPIO.HIGH) while True: pwmLEDPin.ChangeDutyCycle(dutyCycle) if GPIO.input(brightenButton) == GPIO.HIGH: print("brightenButton is HIGH") if dutyCycle < 100: dutyCycle += 5 sleep(0.25) else: dutyCycle = 100 elif GPIO.input(dimButton) == GPIO.HIGH: print("dimButton is HIGH") if dutyCycle > 0: dutyCycle -= 5 sleep(0.25) else: dutyCycle = 0
Haciendo que funcione
Primero, necesitarás una terminal. Puede usar el terminal incorporado de Raspberry Pi o controlar Raspberry Pi a través de SSH en una computadora separada. A través de la terminal, debe ir al directorio del script de Python e ingresar python3 rpi-ledpwm.py
o el nombre de archivo que utilizó.
A veces, el LED parecerá parpadear. La frecuencia PWM probablemente sea demasiado baja, si ese es el caso. Puede aumentar la frecuencia aumentando el número en pwmLEDPin = GPIO.PWM(ledPin, 100)
hasta que ya no se note el parpadeo.
Si encuentra que las transiciones son granulosas, reduzca el tiempo en sleep(0.25)
dentro del ciclo while. Sin embargo, se vuelve más rápido a medida que lo bajas, así que no lo bajes demasiado.
Propina: prefiere Arduino en su lugar? Aquí hay una guía completa para comenzar con los proyectos de Arduino.
Preguntas frecuentes
¿Cuál es la frecuencia mínima que puedo generar con la Raspberry Pi?
La frecuencia más baja que puede establecer en una Raspberry Pi es de 10 Hz. El hardware no puede soportar nada más bajo que eso.
¿Cuál es la frecuencia máxima que puedo generar con la Raspberry Pi?
La frecuencia más alta que puede establecer en una Raspberry Pi es de 8000 Hz.
¿Es posible convertir ondas de pulso en ondas de sonido?
Sí. Con un elemento piezoeléctrico, es completamente posible convertir ondas de pulso en ondas de sonido que puede escuchar. En este caso, modificando la frecuencia cambia el tono, mientras que modificando el ciclo de trabajo se ajusta el volumen.
Todas las imágenes por Terenz Jomar Dela Cruz.
Danos tu opinión