En este apartado aprenderás qué son las señales PWM (Pulse Widht Modulation) y las utilizarás para controlar la intensidad de brillo de un LED.
Imagina que requieres realizar un circuito donde se necesita controlar la intensidad de iluminación de un led o la velocidad de un motor. Entonces necesitamos manejar un valor analógico de voltaje. Para ello se recurre a la señal PWM (Modulación por ancho de pulsos).
PWM es una técnica en la que se modifica el ciclo de trabajo de una señal periódica para controlar la cantidad de energía que se envía en una señal.
Este tipo de señales se utiliza en los circuitos cuando se necesita simular una señal analógica. Consiste en cambiar el ancho relativo de la señal respecto al período de la misma, el resultado de este cambio es llamado ciclo de trabajo y sus unidades están representadas en términos de porcentaje.
Para entender cómo funciona esta técnica, vamos a ver el siguiente video.
Salidas analógicas en Arduino
Arduino implementa por hardware salidas PWM en varios de sus pines, que aparecen identificados en la placa con el símbolo «~» junto al número del pin.
Vamos a ver el uso de las salidas analógicas con el siguiente ejemplo:
Se desea programar un circuito electrónico que encienda un LED ajustando el brillo con el valor de un potenciómetro usando señal PWM. El LED se conectará al pin 6 y potenciómetro al pin A0 (Figura 2).
Comenzamos declarando como constantes los pines utilizados para controlar el LED y el potenciómetro
const int pinSensor = 0; // Sensor analógico conectado al potenciómetro
const int pinLed = 6; // Salida PWM conectada al LED
Para utilizar los valores que necesitamos, se declaran dos variables de tipo entero, una para manejar el brillo y otra para almacenar el valor del potenciómetro:
int brilloLed = 0; // Almacena el valor de brillo que se dará al LED
int valorPotenciometro = 0; // Almacena el valor leído del potenciómetro
La tarjeta Arduino enviará al led el valor de la señal PWM para encenderlo, por lo tanto, el pin debe ser configurado de salida. La instrucción de configuración del pin 6 PWM sería:
pinMode(pinLed, OUTPUT); // Define al pin 6 como salida PWM
Para hacer la lectura del valor del potenciómetro utilizamos la función analogRead y se almacena en la variable valorPotenciómetro como se muestra:
valorPotenciometro = analogRead(pinSensor); // Lee el valor del potenciómetro
Como los valores del potenciómetro van del 0 al 1024 y el pin PWM sólo maneja un rango del 0 al 254, ajustamos los valores del potenciómetro para usar toda su escala, que al bajarlo por completo sea cero y al girarlo por completo sea 255, no 1023. Para realizar este ajuste utilizamos la función map
Función map
Sirve para convertir números de un rango a otro. Ahorra trabajo de conversión y podemos cambiar una magnitud a otra.
Sintaxis
map(valor, valor mínimo, valor máximo, rango mínimo, rango máximo);
Parámetros
valor – el número a mapear.
valor mínimo: el límite inferior del rango actual del valor.
valor máximo: el límite superior del rango actual del valor.
rango mínimo: el límite inferior del rango objetivo del valor.
rango máximo: el límite superior del rango objetivo del valor.
Para comprender cómo funciona la función map, observa el video:
Como pudes observar en el video, la utilización de la función map queda como sigue:
brilloLed = map(valorPotenciometro, 0, 1023, 0, 255); // Reescala el valor del pot
Ahora que ya tenemos el valor mapeado en la variable brilloLed, se envía el valor a través de la tarjeta Arduino UNO al LED que se encuentra en el pin PWM 6 y que fué declarado como salida. Para envíar la cantidad de brillo lo hacemos enviando una señal PWM utilizando la función analogWrite.
Función analogWrite
La función analogWrite, sirve para escribir un valor a un pin PWM. Los valores posibles están comprendidos entre 0 y 255.
Sintaxis
analogWrite (pinPWM, valor);
Parámetros
pinPWM – número de pin PWM del Arduino que se quiere configurar
valor – el ciclo de trabajo de la señal entre 0 (siempre apagado) y 255 (siempre encendido)
La siguiente imagen muestra ejemplos del valor del ciclo de trabajo y la señal PWM a la que corresponde (Figura 3):
En nuestro ejemplo, el pin PWM es el 6 y se almacena en la variable pinLed, y el valor de la señal PWM esta almacenado en la variable brilloLed, por lo que la instrucción es la siguiente:
analogWrite(pinLed, brilloLed); // Se ajusta la salida del pin PWM
Manos a la obra
Ahora que ya conoces cómo utilizar las señales PWM, vamos a realizar una práctica que consiste en la construcción y programación de un circuito electrónico lea el valor de un potenciómetro
y lo utilice para ajustar el brillo de un led usando una señal PWM
Materiales
Si no te acuerdas o deseas repasar las características técnicas y funcionamiento de alguno de los componentes electrónicos, puedes dar clic sobre su imagen para consultar su información.
Construcción del circuito electrónico
Realiza las conexiones del circuito electrónico que se muestra en el diagrama esquemático de la Figura 4. Observa que el ánodo del led va conectado a la resistencia y al osciloscopio, el cátodo a la tierra.
Cómo puedes apreciar, el circuito utiliza un osciloscopio. la forma de conectarlo y su explicación del uso lo veras en el siguiente video:
Programación del circuito electrónico
Captura el código del programa en el IDE de Arduino. Recuerda escribir el código para aprender las instrucciones.
/* Manual de programación con Arduino
* Práctica: Señales PWM
* Objetivo: Programa que lee el valor de un potenciómetro
y lo usa para ajustar el brillo a un led usando una señal PWM
* Fecha: agosto 2020
* Autor: Miguel Ángel Bañuelos
*/
// Declaración de constantes
const int pinSensor = 0; // Sensor analógico conectado al potenciómetro
const int pinLed = 6; // Salida PWM conectada al LED
// Declaración de variables
int brilloLed = 0; // Almacena el valor de brillo que se dará al LED
int valorPotenciometro = 0; // Almacena el valor leído del potenciómetro
// Inicialización
void setup() {
pinMode(pinLed, OUTPUT); // Define al pin 6 como salida PWM
}
// Programa principal
void loop(){
valorPotenciometro = analogRead(pinSensor); // Lee el valor del potenciómetro
brilloLed = map(valorPotenciometro, 0, 1023, 0, 255); // Reescala el valor del pot
analogWrite(pinLed, brilloLed); // Se ajusta la salida del pin PWM
delay(100); // Retardo de 100 milisegundos
}
Compila, depura y sube el sketch a la tarjeta Arduino UNO.
Funcionamiento del circuito electrónico
Prueba el funcionamiento de tu circuito electrónico. Verifica que el circuito funcione como la simulación que se muestra a continuación. Presiona el botón Iniciar simulación, gira el potenciómetro y observa y observa cómo cambia la intensidad del brillo del led y la señal en el osciloscopio.
Autoevaluación
Para aprender más
Si en tu navegador no se muestra la simulación, ingresa al enlace https://www.tinkercad.com/embed/3WDP1DBtk5B
LLamas L. ( 2015 ) Salidas analógicas PWM en Arduino. https://www.luisllamas.es/salidas-analogicas-pwm-en-arduino/
Guerra Carmenate J. (s/f). Señal PWM con Arduino y analogWrite. Recuperado de: https://programarfacil.com/blog/arduino-blog/pwm-con-arduino-analogico/