Introducción

Arduino tiene unas salidas a las que se les ha llamado “salidas analógicas”. En esta unidad aprenderemos qué son estas salidas, por qué no son realmente analógicas, y cómo pueden usarse para simular una salida analógica real.

Modulación por ancho de pulso – PWM

La modulación por ancho de pulso, abreviada PWM (del inglés, Pulse-Width Modulation), es una técnica para simular señales analógicas usando pulsos digitales. En PWM se genera una señal cuadrada encendiendo y apagando un pin. Este patrón de encendido y apagado puede simular voltajes entre siempre encendido (5V) y apagado (0V), cambiando el porcentaje de tiempo durante el que la señal está encendida respecto al que pasa apagada.

El tiempo durante el que la señal está encendida se llama “ancho de pulso”. Para obtener diferentes valores analógicos, hay que cambiar (llamado técnicamente modular) ese ancho de pulso. El porcentaje de tiempo que la señal está encendida, respecto al tiempo total de la señal, se llama ciclo de trabajo.

Si repites este patrón de encendido y apagado lo suficientemente rápido, el resultado es similar al de una señal analógica cuyo valor depende del ciclo de trabajo elegido.

Los pulsos PWM pueden aparecer en situaciones como:

* Servos, para ajustar el ángulo de posición. * Motores, controlando su velocidad con el ciclo de trabajo. * LEDs, para atenuar su intensidad. * …

PWM en Arduino

En Arduino, los pulsos PWM pueden generarse en los pines en los pines 3, 5, 6, 9, 10, y 11 (para Arduino UNO) utilizando la función analogWrite(PIN, CICLO_DE_TRABAJO). Esta función produce una señal cuadrada en la salida PIN que se repite cada 2ms, donde CICLO_DE_TRABAJO puede ser cualquier número entero entre 0 y 255, de la forma en que se indica en la figura.

 

Explora

Controlando la intensidad de un LED

Vamos a elegir la intensidad con la que hacemos brillar el LED en nuestra placa Arduino haciendo uso de la función analogWrite().

Para ello construimos el siguiente circuito:

Recuerda que los pines que pueden generar PWM son los pines 3, 5, 6, 9, 10 y 11.

Programando la intensidad del LED en Arduino IDE

Abrimos Arduino IDE.

En la función void setup() no hay configurar nada, porque el LED se va a inicializar cada vez que llamemos a la función analogWrite()

En la función void loop() vamos a crear cinco intensidades diferentes:

  • Brillo del LED al 0%: 0
  • Brillo del LED al 25%: 63
  • Brillo del LED al 50%: 127
  • Brillo del LED al 75%: 191
  • Brillo del LED al 100%: 255

Con esto, en la función void loop() tendremos:

void loop(){
  analogWrite(9,0);     // Brillo del LED al 0%
  delay(1000);          // Espera un segundo
  analogWrite(9,63);    // Brillo del LED al 25%
  delay(1000);          // Espera un segundo
  analogWrite(9,127);   // Brillo del LED al 50%
  delay(1000);          // Espera un segundo
  analogWrite(9,191);   // Brillo del LED al 75%
  delay(1000);          // Espera un segundo
  analogWrite(9,255);   // Brillo del LED al 100%
  delay(1000);          // Espera un segundo
}

Sube el sketch a Arduino y observa lo que ocurre.

Prueba a escribir otros valores en la variable brillo, como: 10, 70, 120, 180 y 250, y observa cómo varía la iluminación del LED.

Ajustando la intensidad del LED con un potenciómetro

Hasta ahora hemos decidido el valor que define el brillo. Vamos a ajustarlo mediante la rueda del potenciómetro. Es decir, vamos a hacer que dependa del valor arrojado por el potenciómetro. Para ello construimos el siguiente circuito:

¡Vamos a programarlo!

El dato “brillo” vamos a mostrarlo en el monitor serie, por lo que lo primero que debemos hacer es inicializarlo en la función void setup().

Recuerda que la lectura analógica da un valor entre 0 y 1023, mientras que al escribir un PWM el rango debe situarse entre 0 y 255. Por ello, para ajustar los valores, vamos a dividir por 4 la lectura del potenciómetro antes de escribirla en el pin PWM.

void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.println(analogRead(A0)/4);
  analogWrite(9, analogRead(A0)/4);
}

Carga este sketch en tu Arduino y observa cómo puedes ajustar la intensidad de un LED al rotar el potenciómetro.

 

Sigue explorando

Regulador de intensidad automática

Utiliza el sensor de luz LDR para que el brillo del LED dependa de la luz ambiente.

Deja un comentario