Una placa Arduino solo puede generar una señal baja (0 voltios) y una señal alta (5 voltios). Sin embargo también es posible realizar una modulación de ancho de pulso en Arduino, para alimentar dispositivos que requieren un rango de voltajes entre 0 y 5 voltios.
Si es tu caso, y buscas aprender a alimentar un LED o servomotores, a continuación te mostraremos cómo funciona la modulación por ancho de pulso y cómo generar dichas señales en una placa Arduino Uno.
Modulación de ancho de pulso en una placa Arduino
Una señal modulada por ancho de pulso se compone de pulsos de corriente cortos de alta frecuencia. La señal parece una onda cuadrada, con el voltaje cayendo muy rápidamente de 5 voltios a 0 voltios:

En Arduino, la frecuencia de modulación de ancho de pulso es de alrededor de 500 Hz, por lo que ocurren 500 de estos ciclos cada segundo.
La duración de cada ciclo es de sólo unos 2 milisegundos.
La duración de la parte alta de la señal se denomina ancho de pulso. La duración de las partes alta y baja de la señal se denomina Tiempo del ciclo.
El porcentaje de la duración del ancho del pulso en relación con el tiempo del ciclo, se denomina ciclo de trabajo:

Al cambiar el ciclo de trabajo, podemos cambiar el voltaje aparente a cualquier valor entre 0 y 5 voltios:

En un ciclo de trabajo del 50 %, el ancho del pulso es el 50 % del ciclo, por lo que el voltaje aparente es el 50% de 5 voltios o 2,5 voltios.
Esto corresponde a un valor analogWrite de 127.
Las señales de modulación de ancho de pulso solo se pueden generar en los pines de la placa Arduino rotulados con el símbolo: «~»

Función analogWrite() para generar señales de modulación de ancho de pulso
La función analogWrite()
puede generar la señal de modulación de ancho de pulso en Arduino. Para ellos se requieren dos argumentos en la función, pin
y value
:
analogWrite(pin, value);
El Argumento pin
indica el número de pin donde se generará la señal de modulación de ancho de pulso.
Por otro lado, el argumento value
es el valor analogWrite. Dicho valor es el ciclo de trabajo de la señal de modulación de ancho de pulso.
Si deseas hallar el valor de analogWrite que producirá una señal de modulación de ancho de pulso, utiliza la siguiente fórmula:

proyecto ejemplo
El siguiente proyecto sirve de ejemplo en el uso de la modulación de ancho de pulso en una placa Arduino. La finalidad de dicho proyecto es el de aumentar y disminuir automáticamente el brillo de un LED.
La siguiente imagen ilustra el montaje físico para entre los componentes y la placa Arduino Uno:

La resistencia limitadora debe ser de entre 220 y 1.000 ohmios.
Programación del Arduino para modulación de ancho de pulso
Este programa aumentará el brillo del LED al 100 % y luego lo disminuirá al 0 %, en un ciclo infinito.
Una vez realizado el montaje de los componentes, sube el siguiente código en tu placa:
int ledPin = 6;
int brightness = 0;
int fadeAmount = 5;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
analogWrite(ledPin, brightness);
brightness = brightness + fadeAmount;
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
delay(30);
}
En primer lugar se declara la variable int ledPin
para almacenar el número de pin donde está conectado el LED.
Luego, se declara la otra variable int que llamaremos brightness
(brillo). Dicha variable almacenará los valores de analogWrite a medida que se desplazan entre 0 y 255.
También se declara una tercera variable que se llamará fadeAmount
que se utilizará para controlar la velocidad a la que el LED se enciende y se apaga.
Dentro del bloque setup()
, usaremos la función pinMode()
para establecer a la variable ledPin
como salida.
Dentro de la sección loop()
, escribimos la función analogWrite()
con el objetivo de generar la señal de modulación de ancho de pulso.
El primer argumento es el número de pin que generará la señal de modulación de ancho de pulso, por lo que usamos la variable ledPin
como primer argumento.
El segundo argumento es el valor analogWrite que establece el ciclo de trabajo.
Hemos declarado una variable llamada brightness
para almacenar este valor, por lo que se utiliza como segundo argumento.
La siguiente línea es brightness = brightness + fadeAmount;
.
La línea de código anterior toma la variable brightness
y le suma la variable fadeAmount
cada vez que se ejecuta un ciclo.
Se declaró la variable fadeAmount
igual a 5, por lo que esto hará que la variable brightness
aumente en 5 con cada ciclo del bucle.
Finalmente tenemos una sentencia if con la condición de que «si brightness
es menor o igual a 0, o brightness
es mayor o igual a 255″, se ejecutará el código dentro de la sentencia fadeAmount = -fadeAmount;
.
Esperamos que este sencillo tutorial te haya servido para aprender a realizar la modulación de ancho de pulso en Arduino.