Nueva función analogWrite (pin, val)
Hoy veremos una de las funciones más utilizadas en cualquier proyecto Arduino, analogWrite(), con ella puedes enviar un valor analógico a uno de los 6 pines PWM con un valor variable entre 0 y 256.
Se dice en términos informáticos que cuando un valor oscila entre 0 (2 elevado a 0) y 256 (2 elevado a 8) tiene una resolución de 8 bits, en nuestro caso, podemos decir que la función analogWrite tiene una resolución de 8 bits.
Entonces sólo necesitaremos darle dos valores enteros de entrada:
- pin: cualquiera de los pines PWM 3, 5, 6, 9, 10, u 11
- valor: cualquier valor entero entre 0 (valor mínimo) y 255 (valor máxio)
Un uso muy común para esta función sería la de encender un led conectado a un pin PWM, en este caso no nos limitaremos a encenderlo o apagarlo, sino que ahora podremos darle un valor intermedio para que luzca con mayor o menor intensidad según nos interese, así si le enviamos un valor de…
- 0: no se encenderá
- 128: se encenderá a la mitad de intensidad, al 50%
- 255: se encenderá al máximo, al 100%
- 64: se encenderá al 25%
- 26: se encenderá al 10%
FPS y PWM
Tienes que entender cómo es posible que Arduino envía un valor analógico por un pin digital, aparentemente es un sinsentido, pero el truco está en la tecnología PWM, que permite enviar un tren de pulsos, de forma que si, por ejemplo, queremos que luzca al 50% un led le enviaremos valores de 0 V, 5 V, 0 V, 5 V, 0 V, 5 V o informáticamente hablando 0, 1, 0, 1, 0 1.. así el 50 % del tiempo está encendido y la otra mitad apagado, pero como se hace con una frecuencia altísima (cientos de veces por segundo) el ojo humano no lo nota y parece que el led se enciende al 50% de su valor máximo.
La frecuencia que Arduino usa en los pines PWM 3, 9, 10 y 11 es de 490 Hz. Y si necesitas un poco más de resolución debes saber que los pines 5 y 6 alcanzan los 980 Hz.




De forma parecida, encontramos un símil entre la tecnología PWM y el cine; recuerda que una proyección cinematográfica engaña al ojo mostrando 24 fotogramas por segundo (fps), y si enviamos un fotograma blanco, otro negro repetidamente terminaremos viendo la pantalla gris. Actualmente se proyecta a 48 fps, mucho más nítido.
Nada tiene que ver con Arduino, pero aprovecho la ocasión para mostrar un interesante vídeo comparativo para que aprecies la diferencia entre ambas resoluciones, 24 y 48 fps:
También podemos usar estas 6 salidas PWM para conectar otros actuadores, como:
- un motor de corriente continua y hacer que gire a diferentes velocidades
- un zumbador y que suene a diferentes frecuencias
El resto de pines digitales no pueden ser utilizados en esta función.
Ejercicio
Tienes en la diapositiva un código que podrías guardar como “Intermitente2.ino” donde para probarlo deberías conectar un led con un a resistencia en serie y conectarlos al pin 10.
¿Qué hace este código?
Piénsalo un poco antes de seguir leyendo, mira las líneas de código y observa que hay dos bucles, uno creciente y otro decreciente.
El primer bucle se ejecuta 255 veces y va aumentando de 0 a 255 la intensidad del led, y el segundo hace lo contrario.
El resultado es un led que se enciende y apaga infinitamente aumentando y disminuyendo su brillo, sería como la luz de un faro visto de lejos.
Dejo una pregunta en el aire, ¿cuál es la frecuencia aproximada de este dispositivo intermitente?