Inicio » Leds para Arduino » Regular la intensidad de un LED con Arduino

En este tutorial vamos a regular la intensidad de un LED con Arduino. Para ello nos vamos a ayudar de una técnica llamada Modulación por Ancho de Pulso o PWM.

Materiales

A continuación puedes consultar todos los materiales que vamos a necesitar para realizar este tutorial:

Una placa Arduino (Yo usaré Arduino UNO)
Un led de 5 mm
Una resistencia de 330Ω
Cables
Una protoboard
Un ordenador con el IDE de Arduino instalado

Conexiones

conexión LED a pin PWM de Arduino

El ánodo del LED (positivo, pata larga) debe ir conectado a un pin digital que soporte PWM. Normalmente estos pines van marcados con una virgulilla (~), pero asegúrate de elegir el correcto consultando la documentación de tu placa.

Como puedes ver en la imagen, yo he elegido el pin digital 11 porque estoy usando Arduino UNO y ese pin es PWM.

En cuanto al cátodo del LED (negativo, pata corta) va conectado a tierra (pin GND). Entre el pin GND y el cátodo colocaremos una resistencia de 330Ω para evitar que se queme.

Sketch

Antes de ver el código del sketch necesito que entiendas cómo funciona la modulación por ancho de pulso. Si no lo sabes, lee este artículo ante de continuar: PWM.

El sketch que vamos a usar es el siguiente:

//DECLARACIONES
const int LED = 11;
byte intensidad = 10;

//CONFIGURACIÓN
void setup()
{
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

//FUNCIÓN LOOP
void loop()
{
  byte x = (intensidad*255)/100;
  Serial.println(x);
  analogWrite(LED, x);
  delay(1000);
}

Vamos a realizar diferentes pruebas con él cambiando el valor de la variable intensidad, pero antes de nada, vamos a analizar todo el código para que lo entiendas sin problema.

Declaraciones

Por un lado, he declarado una constante entera, que he llamado LED, que representa el pin PWM en el que está conectado el LED. En mi caso es el pin 11. Si has conectado el LED a otro pin PWM cambia el valor de esta constante por el correcto.

Lo segundo que he declarado es una variable de tipo byte que he llamado intensidad. Esta variable la vamos a usar para especificar el porcentaje de intensidad con el que queremos que se ilumine el LED. Será un valor entre 0% (totalmente apagado) y 100% (máxima intensidad).

Cómo puedes ver en el código he puesto valor 10, pero haremos varias pruebas con distintos valores para apreciar la variación de intensidad en el LED.

Configuración

La configuración es muy simple. Si ya has conectado anteriormente un LED con Arduino es exactamente la misma.

La instrucción pinMode(LED, OUTPUT) configura el pin en el que está conectado el LED como salida. En mi caso el pin 11.

La segunda instrucción dentro de la función setup es Serial.begin(9600). Simplemente estoy inicializando el puerto serie para poder mostrar posteriormente, a través del monitor serie, el valor calculado para la intensidad especificada.

Función loop

La primera instrucción dentro de la función loop calcula el valor que tenemos que enviar al pin PWM para la intensidad indicada en la variable:

byte x = (intensidad*255)/100;

Los pines PWM soportan valores comprendidos entre 0 y 255. Según está conectado el LED, si enviamos valor 255 se iluminará al 100% de intensidad y si enviamos valor 0 se apagará (0% de intensidad). Teniendo esto en cuenta, un valor comprendido entre 0 y 255 hará que el LED varíe su intensidad.

Realizando el cálculo podemos saber qué valor debemos enviar al pin PWM para una intensidad concreta.

El valor que dimos inicialmente a la variable intensidad en la declaración era 10. Eso significa que queremos que el LED se ilumine a un 10% de intensidad. ¿Qué valor tenemos que enviar al pin PWM para conseguirlo? El código se encarga de calcularlo, pero podemos hacer el cálculo manualmente para descubrirlo sustituyendo intensidad por 10:

x = (10 * 255) / 100 = 25

Esto significa que la variable x tomará valor 25. Ese es el valor que debemos enviar al pin PWM para que el LED se ilumine a un 10%.

La siguiente instrucción es Serial.println(x). Cuando ejecutes el sketch tendrá que aparecer en el monitor serie un 25 para la intensidad 10.

Ya tenemos en x el valor que tenemos que enviar el pin PWM. Pues vamos a enviarlo. De eso se encarga la siguiente instrucción:

analogWrite(LED, x);

La función analogWrite solo funciona con pines digitales PWM. Nos permite enviar valores comprendidos entre 0 y 255 para conseguir la modulación por ancho de pulso. En este caso enviará el 25 que calculamos antes, haciendo que el LED se ilumine solo a un 10% de intensidad.

La última instrucción es un delay(1000). Simplemente para que la ejecución espere 1 segundo antes de continuar.

Ahora que ya hemos revisado todo el código vamos a ver algunos ejemplos para comprobar cómo se aplica la modulación por ancho de pulso.

Ejemplo 1: 10% de intensidad

Si ejecutamos el sketch tal y como lo hemos visto, con valor 10 en la variable intensidad, el LED se ilumina al 10%. Esto significa que el ciclo de trabajo (duty cycle) es de un 10%.

La modulación que conseguimos en el pin PWM es la siguiente:

duty cycle 10%

El voltaje que estamos enviando al pin se calcula con esta formula: V = (Vmax – Vmin) * (duty cycle / 100)

Sustituyendo por los valores quedaría así:

V = (5V – 0V) * (10 / 100) = 0,5V

Ejemplo 2: 50% de intensidad

Ahora vamos a cambiar el valor de la variable intensidad, declarada en la zona de declaraciones del sketch, por 50.

byte intensidad = 50;

Esto significa que el ciclo de trabajo será el 50%, por lo que el LED se iluminará a un 50% de intensidad.

El valor que tomará la variable x, es decir, el valor que enviaremos al pin PWM, será 127:

x = (50 * 255) / 100 = 127

(En realidad da 127,5, pero el tipo byte no tiene decimales, por lo que se queda en 127).

La modulación que conseguimos es esta:

duty cycle 50%

El voltaje medio enviado al pin sería este:

V = (5V – 0V) * (50 / 100) = 2,5V

Ejemplo 3: 75% de intensidad

Creo que está bastante claro ya, pero te dejo un último ejemplo, solo para asegurarme.

Vamos a encender el LED a un 75% de intensidad. Cambia el valor de la variable intensidad por 75:

byte intensidad = 75;

El ciclo de trabajo será del 75% y la modulación en el pin PWM quedará así:

duty cycle 75%

Y el voltaje enviado al pin sería este:

V = (5V – 0V) * (75 / 100) = 3,75V

Como habrás comprobado en los tres ejemplos, el voltaje medio que se envía al LED es directamente proporcional al ciclo de trabajo. Cuanto más bajo es, menor es el voltaje, y menos brilla el LED.

Haz varias pruebas con diferentes intensidades para que puedas apreciar el efecto.


Te avisaré cuando publique nuevo contenido en paraarduino.com y en mi canal de YouTube (@ParaArduino).

No hemos podido validar tu suscripción.
¡Se ha realizado tu suscripción!

Newsletter

Suscríbete para que te avise cuando publique nuevo contenido.

Usamos Brevo como plataforma de marketing. Al hacer clic a continuación para enviar este formulario, consiente que la información proporcionada sea transferida a Brevo para su procesamiento de acuerdo con sus términos de uso