

El PWM es una de las herramientas más útiles que nos proveen los microcontroladores, con ellos podemos hacer infinidad de cosas, vamos a ver cómo usarlo:
El circuito no podría ser más sencillo, un leds con su correspondiente resistencia de 470Ohm conectado a una de las salidas PWM de Arduino.
Este es el código que vamos a utilizar, podemos encontrarlo en file => Examples => Basic => Fade :
// Brillo del led; int brightness = 0; // Cuanto se incrementará el PWM en cada vuelta del bucle. int fadeAmount = 5; void setup() { // definimos dónde tenemos conectado el led, en este caso al Pin 9 que puede entregar PWM pinMode(9, OUTPUT); } void loop() { /* enviamos el valor de la variable donde almacenamos la intensidad del Led al led.*/ analogWrite(9, brightness); // En cada vuelta del bucle aumentamos el ancho del pulso. brightness = brightness + fadeAmount; /* Cuando llegamos a un extremo, nos dirigimos hacia el otro, es decir, si estábamos encendiendo empezamos a apagar y si estábamos apagando empezamos a encender. */ if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // Ponemos una pequeña pausa para que nos de tiempo a ver el efecto. delay(30); }
Cómo vemos, utilizamos la función AnalogWrite pese a que los leds estén conectados a salidas marcadas como Digital, eso es así porque en pines digitales la función AnalogWrite de arduino gestiona el PWM en aquellas salidas que lo sean.
Lo que hacemos es recorrer todos los valores del pulso mediante un bucle, desde 0 hasta 255 que es la resolución completa que puede entregar Arduino. Al hacerlo vemos que la intensidad del Led va cambiando, desde apagado hasta el máximo encendido y vuelve a apagarse poco a poco.
Si en lugar de un led tuviésemos un motor ( con su correspondiente etapa de potencia o controladora) lo que estaríamos haciendo es variar su velocidad.
Este es sólo un ejemplo muy sencillo, podríamos complicarlo mucho más, por ejemplo usando tres les, Uno rojo, otro azul y otro verde (o un led RGB) y creando toda la gama cromática con él, utilizando un motor para variar su velocidad... etc.