Numeradas con la señal PWM o virgulilla ~, tenemos algunos pines digitales que tienen la funcionalidad añadida de comportarse como salidas analógicas (realmente pseudoanalógicas) porque incorporan internamente un conversor digital-analógico, estos pines en Arduino UNO son:
3, 5, 6, 9, 10 y 11
En estos pines podremos utilizar la función analogWrite() para indicar que queremos sacar por uno de esos pines una señal con valores entre 0 y 5 V, lo que significa que con una resolución de salida de 8 bits podemos sacar 2 elevado a 8 (255) valores diferentes escalonados entre 0 y 5 V.
Entonces podemos utilizar una variable entera (int) para almacenar este valor, y adelantando un poco de lenguaje Wiring, podemos también utilizar un valor de tipo binario (ceros y unos precedidos de la letra B) que podría tomar estos valores: B00000000, B00000001, B00000010, B00000011, B00000100,… B11111111 que se corresponderían a los valores enteros: 0, 1, 2, 3, 4,…,255.
Una curiosidad, antes de utilizar la función analogWrite()no es necesario declarar los pines PWM que vamos a utilizar con la función pinMode().
Ejercicio de escritura analógica
Analiza la imagen del circuito de la diapositiva e impleméntalo, necesitarás poco material:
1 potenciómetro
1 led
1 resistencia 220-330 ohm
3 cables M-M
Ahora crea el sketch, llámalo “Salidas-analogicas.ino” y responde a estas preguntas:
¿Por qué dividimos por 4 en la línea 13 del código?
¿Es correcto usar el pin 13?
¿Puedes hacer una segunda versión de este sketch que utilice la función map()? (llámalo “Salidas-analogicas2.ino“)
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.
Secuencia antigua a 16 fps
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?
Este sitio web utiliza cookies. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.