En este post estudiaremos cómo encender un led con Arduino, montar diferentes secuencias de luces con leds, etc para ello:
- Repasaremos brevemente qué es un led.
- Aprenderemos a calcular la resistencia de polarización que acompaña al led.
- Veremos los montajes o conexiones.
- Estudiaremos la programación de diferentes ejemplos con leds en el IDE de Arduino.
Entonces: ¿QUÉ ES UN LED?
A lo que llamamos coloquialmente led es realmente un tipo de diodo que emite luz (diodo led).
Un led emite luz con el paso de corriente eléctrica y para que esto ocurra debe haber aplicada una diferencia de potencial o voltaje entre sus terminales.
Un led a diferencia de una resistencia, tiene polaridad. Esto significa que solo podrá permitir el paso de intensidad en un único sentido, de positivo a negativo.
Como vemos en la fotografía, en los leds existe un terminal más largo que otro. El terminal positivo corresponde a la pata más larga, mientras que el negativo corresponde a la pata más corta.
A grandes rasgos el funcionamiento de un led se basa en la unión de dos semiconductores con diferente dopaje, la cual cosa crea una barrera de potencial (Vd) que hay que superar para que el diodo se encienda.
Destacar que cada led emite realmente la luz del color que indica su encapsulado de plástico y eso implica que en función del color tendremos una barrera de potencial (Vd) diferente.
Tipo de led | Vd |
Rojo | 1,8 V |
Amarillo | 2,1 V |
Verde | 2,1 V |
Si no llegamos a superar esa Vd entonces el diodo led estará apagado en lo que se llama la zona de corte.
Si superamos la tensión Vd entonces el diodo led estará en la zona de conducción y empezará a emitir luz.
El problema es que cuando el diodo entra en conducción porque se supera Vd prácticamente no existe oposición al paso de corriente ya que su resistencia interna es muy baja. Esto provoca que aumente mucho la corriente que lo atraviesa y por tanto exista peligro de quemar el componente, es por ello que hemos de colocar una resistencia en serie con el diodo led para limitar el paso de corriente y así protegerlo.
CÁLCULO DEL VALOR DE LA RESISTENCIA DE POLARIZACIÓN DEL LED:
Simplemente hemos de aplicar la ley de Ohm sobre la resistencia de polarización:
Teniendo en cuenta que el voltaje aplicado sobre la resistencia será igual al voltaje de alimentación de arduino (5V) menos la barrera de potencial del led (Vd) tenemos que:
Sabiendo que las salidas digitales de la placa compatible con Arduino están pensadas para funcionar a un valor de intensidad alrededor de 20 mA (con un máximo de 40 mA), el valor de la resistencia vendrá dado por:
Como la tensión del diodo Vd tiene un valor diferente según el color del diodo led, nos queda:
Entonces la resistencia de 160 es la que hace que por el led rojo pasen como mucho 20mA y comprobamos que por los leds amarillo y verde con dicha resistencia pasaría una intensidad de:
Debemos coger la resistencia normalizada inmediatamente superior a 160 ohms.
Podemos aumentar un poco el valor de la resistencia y aunque perdamos un poco de brillo en el led ganaremos en tiempo de vida útil. En la práctica tampoco vamos a notar grandes diferencias en el brillo de los leds.
Por último, vamos a calcular la potencia que disipará la resistencia y nos aseguraremos que la resistencia que montemos sea de una potencia superior para evitar que se queme:
Aquí hay que ver la potencia que es capaz de disipar nuestra resistencia. En nuestro caso utilizamos resistencias de 1/4W (muy comunes) y así cumplimos holgadamente la condición de potencia.
CONEXIÓN PARA ENCENDER UN LED CON ARDUINO:
Acabamos de estudiar que debemos conectar en serie una resistencia de 220 Ω
Ahora vemos el esquema de montaje:
Recordar que:
- Conectamos el pin número 5 al ánodo del led o terminal positivo (pata larga del led).
- Conectamos el pin GND al cátodo del led o terminal negativo (pata corta del led) a través de la resistencia de 220 Ω.
Comentar que daría lo mismo si conectáramos la resistencia entre el ánodo y el pin número 5.
PROGRAMACIÓN:
Vamos a implementar unos cuantos programas lo más sencillos posible para familiarizarnos con los comandos básicos, construir la base y partir de ahí empezar a explorar otros programas más complejos:
1. Programa para encender el led:
1 2 3 4 5 6 7 8 9 10 11 |
/* InputMakers: Práctica básica para encender un led*/ int PinledRojo = 5; // Definimos la variable PinledRojo y la asociamos al pin 5. void setup() { pinMode(PinledRojo, OUTPUT); // Definimos el pin 5 como salida (output). } void loop() { digitalWrite(PinledRojo, HIGH); // Ponemos el pin al que está conectado el led rojo a HIGH (5V), encendemos así el led rojo. } |
2. Programa que enciende y apaga el led de forma intermitente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/* InputMakers Práctica básica para encender y apagar un led de forma intermitente.*/ const int PinledRojo = 5; // Definimos la variable PinledRojo y la asociamos al pin 5. /*El tipo de variable const int indica que la variable no puede ser cambiada en tiempo de ejecución. Básicamente se dice que const int es una variable solo de lectura, no de escritura. También tiene la ventaja de que ocupa menos memoria. Podríamos haber definido dicha variable con int como en el ejemplo anterior, pero lo hemos hecho por enseñar otro tipo de variable.*/ void setup() { pinMode(PinledRojo, OUTPUT); // Definimos el pin 5 como salida (output). } void loop() { digitalWrite(PinledRojo, HIGH); // Encendemos el led rojo. delay(1000); digitalWrite(ledPinRojo, LOW); // Apagamos el led rojo y volveremos al inicio del loop. delay(1000); } |
3. Programa que enciende el led presionando la tecla “a” del teclado y lo apaga presionando la tecla “b”. Para ello utilizaremos el puerto serie.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/*InputMakers Práctica para encender y apagar un led por lectura de tecla del teclado (puerto Serial). */ int tecla; // definimos la variable tecla donde guardaremos la lectura de la tecla. int Pinled = 5; // definimos la variable Pinled que corresponderá la pin 5 donde conectaremos el led. void setup(){ Serial.begin(9600); //inicializamos el puerto serie. pinMode(Pinled, OUTPUT); // Definimos el pin 5 como salida. } void loop(){ //si hay datos disponibles por el puerto serial hacemos la lectura. if (Serial.available()>0){ tecla=Serial.read(); // leemos los datos y los guardamos en la variable tecla if(tecla=='a') { digitalWrite(Pinled, HIGH); // si presionamos la tecla "a" encendemos el led. Serial.println("ON"); // imprimimos por pantalla "ON" de encendido. } if(tecla=='b') { digitalWrite(Pinled, LOW); // si presionamos la tecla "b" apagamos el led. Serial.println("OFF"); // imprimimos por pantalla "OFF" de apagado. } } } |
Para comunicar nuestra placa con el ordenador utilizaremos el puerto serie.
El puerto serie en Arduino está conectado físicamente a los pines 0 y 1, por eso si se utiliza el puerto serie no podremos utilizar dichos pines como entradas o salidas.
Y ¿cuándo estamos utilizando el puerto serie? si en nuestro programa hemos iniciado el puerto serie con la instrucción Serial.begin(9600); entonces estamos utilizando el puerto serie.
¿Por qué se gastan dos pines para usar el puerto serie? porque se utiliza un pin como recepción RX(0) y otro como transmisión TX(1).
Para acceder al monitor serie pulsamos el símbolo marcado con el recuadro rojo:
Entonces se nos abrirá el monitor serie,
Vemos que en la parte superior nos permite enviar datos y en la parte inferior recibimos la información:
Para los siguientes programas con diferentes leds tenemos que realizar el siguiente montaje:
4. Programa que realiza la secuencia de luces “tipo circular” con 6 leds.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
/*InputMakers Práctica que realiza la secuencia de luces "tipo circular" con 6 leds */ int pin2 = 2; int pin3 = 3; int pin4 = 4; int pin5 = 5; int pin4 = 6; int pin5 = 7; int tiempo = 60; // Tiempo en ms que estará encendido cada led. void setup(){ pinMode(pin2, OUTPUT); // Definimos los pines como salidas pinMode(pin3, OUTPUT); pinMode(pin4, OUTPUT); pinMode(pin5, OUTPUT); pinMode(pin6, OUTPUT); pinMode(pin7, OUTPUT); } void loop() { digitalWrite(pin2, HIGH); // Enciende y apaga los leds (secuencia circular). delay(tiempo); digitalWrite(pin2, LOW); delay(tiempo); digitalWrite(pin3, HIGH); delay(tiempo); digitalWrite(pin3, LOW); delay(tiempo); digitalWrite(pin4, HIGH); delay(tiempo); digitalWrite(pin4, LOW); delay(tiempo); digitalWrite(pin5, HIGH); delay(tiempo); digitalWrite(pin5, LOW); delay(tiempo); digitalWrite(pin6, HIGH); delay(tiempo); digitalWrite(pin6, LOW); delay(tiempo); digitalWrite(pin7, HIGH); delay(tiempo); digitalWrite(pin7, LOW); delay(tiempo); } |
5. Programa que realiza la secuencia de luces del “coche fantástico” con 6 leds.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
/*InputMakers Práctica que realiza la secuencia de luces del coche fantástico con 6 leds */ int pin2 = 2; int pin3 = 3; int pin4 = 4; int pin5 = 5; int tiempo = 60; // Tiempo en ms que estará encendido cada led. void setup(){ pinMode(pin2, OUTPUT); // Definimos los pines como salidas pinMode(pin3, OUTPUT); pinMode(pin4, OUTPUT); pinMode(pin5, OUTPUT); pinMode(pin6, OUTPUT); pinMode(pin7, OUTPUT); } void loop() { digitalWrite(pin2, HIGH); // Enciende y apaga los leds delay(tiempo); digitalWrite(pin2, LOW); delay(tiempo); digitalWrite(pin3, HIGH); delay(tiempo); digitalWrite(pin3, LOW); delay(tiempo); digitalWrite(pin4, HIGH); delay(tiempo); digitalWrite(pin4, LOW); delay(tiempo); digitalWrite(pin5, HIGH); delay(tiempo); digitalWrite(pin5, LOW); delay(tiempo); digitalWrite(pin6, HIGH); delay(tiempo); digitalWrite(pin6, LOW); delay(tiempo); digitalWrite(pin7, HIGH); delay(tiempo); digitalWrite(pin7, LOW); delay(tiempo); digitalWrite(pin6, HIGH); delay(tiempo); digitalWrite(pin6, LOW); delay(tiempo); digitalWrite(pin5, HIGH); delay(tiempo); digitalWrite(pin5, LOW); delay(tiempo); digitalWrite(pin4, HIGH); delay(tiempo); digitalWrite(pin4, LOW); delay(tiempo); digitalWrite(pin3, HIGH); delay(tiempo); digitalWrite(pin3, LOW); delay(tiempo); } |
6. Programa alternativo al anterior para realizar la secuencia de luces del “coche fantástico” con 6 leds mediante 2 bucles for. Más avanzado e interesante.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/*InputMakers Práctica más avanzada utilizando bucles for para simular las luces "tipo coche fantástico" con 6 leds.*/ // Declaramos un vector llamado leds que va a definir a los leds. int leds[] = {2,3,4,5,6,7}; int n; // variable para el bucle for int tiempo=100; //tiempo que dura encendido cada led. void setup() { // Utilizamos un bucle for para declaramos los pines como salidas. for(n=0;n<6;n++) { pinMode(leds[n], OUTPUT); } } void loop() { // bucle for para encender todos los leds en orden ascendente. for (n=0;n<7;n++) { digitalWrite (leds[n],HIGH); delay(tiempo); digitalWrite (leds[n],LOW); delay(tiempo); } // bucle for para encender todos los leds en orden descendente. for (n=6;n>=0;n--) { digitalWrite (leds[n],HIGH); delay(tiempo); digitalWrite (leds[n],LOW); delay(tiempo); } } |
En nuestra página encontraréis el proyecto del “Semáforo” con el que podrás ampliar tus conocimientos sobre el uso y montaje de leds con Arduino. ¡ÉCHALE UN VISTAZO!
IMPORTANTE: OFRECEMOS GRANDES DESCUENTOS PARA CENTROS EDUCATIVOS! SI ERES UN CENTRO EDUCATIVO PIDE PRESUPUESTO PERSONALIZADO AQUÍ
[product_page id=”238″]
Comparte si te ha gustado 🙂
Saludos del equipo de InputMakers y ¡Sigue siempre aprendiendo!