Material:
- Arduino UNO
- LED
- Resistencia 1K
- Potenciómetro 1K
Teoría:
Como habreis deducido es imposible conseguir, al menos a priori, que una saliga digital nos permita variar una señal de la manera que queremos hacerlo, esto es, de forma analógica ya que una salida digital solo tiene dos estados, 1 (5V) y 0 (0V).
Afortunadamente, existe una característica llamada PWM la cual nos permite justo eso, conseguir una señal analógica en una salida digital.
PWM son las siglas de "Pulse-width modulation", esto es, se modula la anchura de cada pulso digital. No voy a entrar a explicar los fundamentos teóricos de esta técnica porque son extensos y creo que innecesarios para lo que aqui pretendemos, que es la sencillez. Basicamente se basa en que si en un corto periodo de tiempo (muy corto), encendemos y apagamos repetidas veces el led, por ejemplo en una proporción 50/50 (50% del tiempo encendido y 50% apagado) lo que se apreciará es que solo se ilumina un 50% de su capacidad lumínica. Si este proceso se hiciera de forma lenta, simplemente veriamos el LED parpadeando.
Una vez explicado esto, que como digo no es necesario (el que quiera saber más hay infinidad de información en google y wikipedia), podemos explicar como variamos la cantidad de luz a nuestro antojo, lo cual es más interesante ya que es un tipo de control aplicable a cualquier proyecto Arduino que queramos hacer.
Usaremos un potenciómetro para variar la cantidad de luz que queremos que emita el led. El de la figura es el tipo que yo uso porque debido a las prácticas de la facultad tengo muchos como ese. Igualmente podeis usar cualquier otro, el funcionamiento es el mismo.
Estos componentes constan de 3 patillas, para saber cual es cual debeis buscar las especificaciones de vuestro modelo pero la configuración que aqui voy a explicar es la misma prácticamente para todos.
Las patillas suelen estar alineadas, o casi alineadas, asi que nos ayudará a identificarlas. Las patillas de los extremos son iguales, asi que una la conectais a 5V y la otra a 0V (lo único que cambiará es el sentido de giro del potenciómetro, cosa que es indiferente ahora mismo). Al estar asi conectado, lo que tendremos será un divisor de tensión, esto es, girando el potenciómetro modificaremos la resistencia a un lado y a otro de la patilla central, por lo que la tensión que encontraremos en la patilla central variará entre 5V (potenciómetro a tope en un sentido) y 0V (potenciómetro a tope en el otro sentido).
Como ya os habreis dado cuenta, la patilla central de nuestro potenciómetro deberá ir conectada a una entrada analógica de nuestro Arduino.
Hasta aqui hemos visto los dos conceptos claves para este proyecto: el PWM y el potenciómetro.
Es fácil deducir la combinación que vamos a realizar, ¿verdad? Nuestro potenciómetro nos dará una señal entre 0 y 5V, es decir, 0% y 100%. Esto lo interpretará nuestra salida PWM como 0% y 100% de capacidad lumínica.
Montaje:
Muy, muy sencillo, no tiene pérdida. Solo hay que asegurarse de la polaridad del led y de que la salida digital que utilicemos sea PWM. Esto podemos saberlo mirando las salidas digitales de nuestro Arduino ya que las salidas PWM tienen un "~" al lado del número. En Arduino UNO las salidas 3, 5, 6, 9, 10, 11 son PWM.
Código:
El código necesita alguna explicación que os será útil conocer para futuros proyectos ya que como he dicho, este proyecto es tan sencillo como útil para cualquier proyecto.
Por una parte se hace la lectura de la entrada analógica A0, lo cual internamente hace una transformación de una señal analógica (entre 0 y 5V) a un dato digital (entre 0 y 1023). Esto es importante tenerlo en cuenta, ya que la salida PWM nos dará un valor entre 0 y 255 (recordemos que es un dato digital). Entonces, el problema es: ¿Cómo pasamos un dato de rango 0-1023 a un dato de rango 0-255?
Facilísimo. Rápidamente nos damos cuenta de que la salida es 1/4 de la entrada, asi que lo que escribiremos en la salida PWM será la señal analógica medida en la entrada A0 pero dividida entre 4.
Ahí va el código:
int pinEntrada = A0; //Pin de entrada analogica int pinLed = 9; //Pin de salida PWM int resultado = 0; /*Variable que almacena la conversion analog/digital*/ void setup() { pinMode(pinLed, OUTPUT); /*Definimos pinLed como salida*/ } void loop() { resultado = analogRead(pinEntrada); /*Lectura analogica de nuestro potenciometro*/ analogWrite(pinLed, resultado/4); /*Escritura analogica en salida PWM (resultado/4)*/ }
Y hasta aquí! A probarlo!
No hay comentarios:
Publicar un comentario