Descripción ADM
Conectaremos un LED con su resistencia limitadora al Pin 9 de arduino,el LED se encenderá y apagará, pero en lugar de hacerlo rápidamente como en el caso del LED intermitente, se encenderá y apagará gradualmente.
Hasta este momento solo hemos trabajado con entradas y salidas digitales, es decir, hemos trabajado con señales digitales, que solo pueden tomar dos valores, HIGH o LOW, pero no pueden tomar valores intermedios.
Si representamos una el valor de una señal digital a lo largo del tiempo veríamos algo como en la imagen de la derecha:
En el mundo real muchas cosas son así, está o no está, enciendes o apagas, vamos que se
puede definir cuando algo solo puede ser blanco o negro, pero otras muchas cosas, son variables, medibles, continuas y pueden tomar cualquier valor que imaginemos, como el temperatura, el ángulo formado por dos rectas, que aun dentro de valores finitos pueden tomar tantos valores intermedios como podamos imaginar, vamos que no solo son negro o
blanco sino que tienen infinidad de tonos grises.
A esta clase de variables las llamamos analógicas , sería algo como de esta otra imagen de la derecha:
Lo natural es que tarde o temprano necesitemos controlar algo del mundo exterior usando una señal analógica, como por ejemplo modificar la luminosidad de una lámpara o de un diodo LED y no solo encenderlo o apagarlo.
Salidas casi analógicas.
Lo primero es que hay que dejar claro que Arduino, no tiene salidas analógicas a excepción del arduino DUE. Pero hay un truco para hacer que una salida digital se comporte casi como una salida analógica, y es el PWM (Pulse Width Modulation) la Modulación del Ancho de Pulso.
La idea básica es poner salidas digitales que varían de forma muy rápida de modo que el valor eficaz de la señal de salida sea equivalente a una señal analógica de menor voltaje.
Fijaros en la anchura del pulso. Cuanto más ancho es, más tensión promedio hay presente entre los pines, y esto se traduce a un valor analógico de tensión comprendido entre 0 y 5V. Al 50% es equivalente a una señal analogica de 2,5 V.
Si mantenemos los 5V un 75% del tiempo, será el equivalente a una señal analógica de 75% de 5V = 3,75 V.
Para poder usar un pin digital de Arduino como salida analógica, lo declaramos en el Setup() igual que si fuera digital
pinMode(LED, OUTPUT);
La diferencia viene a la hora de escribir en el pin, en vez de:
digitalWrite(9, HIGH);
Ponemos
analogWrite(9, V);analogWrite( 9, V) ;
analogWrite escribe en el pin de salida un valor entre 0 y 5V, dependiendo del valor de V (que debe estar entre 0 y 255).
De este modo si conectamos un LED a una de estas salidas PWM podemos modificar su brillo sin más que variar el valor que escribimos en el pin.
Pero hay una restricción. No todos los pines digitales de Arduino aceptan poner valores PWM en la salida. Solamente aquellos que tienen el símbolo de la virgulilla, que es el símbolo que tiene la Ñ encima (~), delante del número.
Fijaros en la numeración de los pines solo los que llevan el símbolo de la virgulilla son los pines 3, 5, 6, 9, 10 y 11 los que pueden hacer PWM para simular un valor analógico en su salida.
Si intentas hacer lo mismo pero con un pin diferentes de estos, Arduino te acepta la orden y no te va a dar un error, pero para los valores de 0 a 127 entiende que es LOW y para el resto pone un HIGH.
Componentes
Para ello vamos a necesitar los siguientes componentes:
La placa de arduino
1 Resistencia Limitadora de 330 Ohmios.
1 diodo LED de 5mm, del color que más te guste nosotros usaremos el rojo.
Usaremos al protoboard y cables para las conexiones y el cable USB para conectar el arduino al ordenador, que su vez nos servirá de alimentación para nuestro primer circuito.
Esquema
Vamos a montar un circuito simple, y usaremos el Pin 9 con PWM, para conectar el ánodo o patilla positiva del LED, luego conectaremos en serie su resistencia limitadora de 330 ohmios, y esta GND. Alimentaremos la placa de arduino, bien a través del conector USB, o bien a través del conector de alimentación
Montaje
Vemos que el montaje es prácticamente igual que el primer montaje que hicimos solo que en lugar de usar el pin 13 y usaremos el pin 9.
Código
void setup() {
pinMode(9, OUTPUT);
}
void loop() {
for(int i = 0; i < 255; i++){
analogWrite(9,i);
delay(50);
}
}
Durante el tiempo que i sea menor que 255, pon una señal analógica eso lo hacemos con analogWriter, en el pin 9, y que esa señal tenga un valor en voltios, equivalente al el valor de i, espera 50 segundos, y repite, incrementando el valor de i en 1. Empieza con i con valor 0. Cuando i sea igual que 255 vuelve a ejecutar la funcion loop de nuevo.
El efecto es que el LED empieza de 0, es decir, apagado y va incrementado cada 50 ms la intensidad de su brillo en 0.01 voltio y veremos como cogen intensidad de su brillo hasta que alcanza el brillo máximo, luego bruscamente vuelve a cero y comienza de nuevo. Podemos hacer que sea más rápido o más lento modificando el tiempo del delay. Por ejemplo con 10 ms sería mucho más rápido.
El efecto es muy brusco, modificando el código podemos hacer que tanto la subida de intensidad como la bajada de intensidad del brillo del mismo sea progresiva y no tenga esa bajada brusca.
void setup() {
pinMode(9, OUTPUT);
}
void loop() {
for(int i = -255; i < 255; i++){
analogWrite(9,abs(i));
delay(50);
}
}
Durante el tiempo que i sea menor que 255, pon una señal analógica eso lo hacemos con analogWriter, en el pin 9, y que esa señal tenga un valor en voltios, equivalente al el valor de i, siendo i un valor absoluto, sin tener en cuenta el signo del valor. espera 50 segundos, y repite, incrementando el valor de i en 1. Empieza con i con valor -255 Cuando i sea igual que 255 vuelve a ejecutar la funcion loop de nuevo.
El valor de i es -255, en la siguiente repetición será -254 y así sucesivamente hasta llegar a 0 y luego seguirá con 1, 2, 3 hasta llegar de nuevo a 255. Como hemos usado la función abs(), analogWritte escribirá 255, en lugar de -255, con lo cual el efecto será que el LED comienza con brillo máximo, y poco a poco irá perdiendo intensidad de brillo hasta llegar al 0, luego comenzará a incrementarse, hasta alcanzar el brillo máximo y comenzará el ciclo de nuevo. El delay controla la velocidad del cambio. Por supuesto en ambos casos podemos delimitar la intensidad del brillo del LED, utilizando valores máximos inferiores a 255, lo cual también influye en la frecuencia del ciclo.