encender-un-led-con-arduino

Encender un LED con Arduino

En esta entrada veremos como encender un LED mediante las salidas de Arduino. Para ello, veremos el principio de funcionamiento y el esquema eléctrico necesario.

Por supuesto, también podemos usar el contenido de esta entrada para encender un LED con cualquier otro autómata, o directamente conectándolo a tensión con una fuente de alimentación o batería. El esquema eléctrico es el mismo, sin más que sustituir la salida de Arduino por vuestra fuente de tensión.

En algunos libros o páginas web veréis que, a veces, conectan directamente el LED a una salida digital o analógica de Arduino. Aunque esto funciona (luego veremos porque) es una mala práctica. EN general, los LED deben conectarse siempre a través de una resistencia.

Para entender la importancia y el papel de esta resistencia, y poder calcular su valor, es necesario entender cómo funciona un LED.

¿Qué es un LED?

Un LED es un diodo emisor de luz, es decir, un tipo particular de diodo que emite luz al ser atravesado por una corriente eléctrica. Los diodos (emisor de luz, o no) son unos de los dispositivos electrónicos fundamentales.

Recodemos que diferenciamos entre dispositivos eléctricos y electrónicos. Los dispositivos eléctricos engloban resistencias, condensadores y bobinas, e integran el campo de electricidad. Los dispositivos electrónicos, surgen del uso de materiales semiconductores, y dan lugar al campo de la electrónica.

Un diodo es una unión de dos materiales semiconductores con dopados distintos. Sin entrar en detalles, esta diferencia de dopado hace que genere una barrera de potencial, que como primera consecuencia hace que el paso de corriente en uno de los sentidos no sea posible.

Aquí tenemos la primera característica de los diodos, tienen polaridad, es decir, solo dejan pasar la corriente en un sentido. Por tanto, tenemos que conectar correctamente la tensión al dispositivo.

La patilla larga debe ser conectada al voltaje positivo (ánodo), y la corta al voltaje negativo (cátodo).

arduino-led-patillaje

Regla menométcnica: - La patilla “más” larga es la positiva. - La patilla “menos” larga es la negativa.

La otra consecuencia de la barrera de potencial es que, incluso conectando el dispositivo con la polaridad correcta, a baja tensión los electrones siguen sin poder atravesar el dispositivo. Esto ocurre hasta alcanzar un cierto valor de tensión que llamamos tensión de polarización directa (Vd), que depende del tipo de diodo.

A partir de esta tensión decimos que el diodo está polarizado y la corriente puede atravesarlo libremente con una resistencia casi nula. La tensión que realmente está alimentando al diodo es la diferencia entre la tensión aplicada, y la tensión de polarización directa del diodo.

Como vemos, en el momento que superamos la tensión de polarización, y dado que la resistencia del diodo es muy pequeña, se genera una gran corriente que destruirá el diodo. Por ese motivo, necesitamos una resistencia que limite la cantidad de corriente que circula por el diodo.

En resumen, si no ponemos una resistencia, el sistema solo tiene dos estados.

  • Si alimentamos a una tensión inferior a Vd, el LED no luce.
  • Si alimentamos a una tensión superior a Vd, el LED se rompe.

En cualquier caso, no conseguiremos hacer lucir el LED sin utilizar una resistencia de valor adecuado.

¿Por qué funciona conectando a una salida de Arduino directamente?

Como hemos adelantado esto, a veces veréis en tutoriales en Internet que algunos conectan un LED directamente a una salida de Arduino, sin usar una resistencia. Efectivamente, esto funciona y el LED luce sin romperse. ¿Cómo puede ser posible esto?

Esto funciona porque Arduino tiene una limitación de 20mA en sus salidas. Esta limitación hace que el LED no se funda, aunque realmente se está comportando como si fuera un cortocircuito. Simplemente Arduino no puede dar más corriente.

No obstante es esto es una práctica totalmente desaconsejada por varios motivos. En primer lugar porque supone forzar de forma innecesaria la salida de Arduino, lo que puede acortar su vida a largo plazo. Por otro porque 20mA es, en general, una corriente demasiado elevada para un Led. Pero sobre todo, porque es una chapuza y una falta de higiene electrónica total.

¿Qué tipos de LED usaremos en electrónica?

Existe una gran gama de LED disponibles, desde los LED habituales de pequeña potencia, a los LED de gran potencia empleados en iluminación. Estos últimos requieren etapas adicionales de potencia (drivers) para poderlos encender desde un autómata.

Dentro de los LED de pequeña potencia, que son los que vamos a emplear con más frecuencia, los más habituales son los encapsulados tradicionales de LED de 3mm o 5mm.

arduino-led-3mm-5mm

También podemos encontrar LED opacos (diffused) o LED transparentes (clear). Los LED opacos están pensados para “encenderse” ellos mismos (por ejemplo, para hacer un panel de mando). Por el contrario, los LED transparentes están pensados para iluminar una área, pero no al propio LED.

arduino-led-clear-diffused

Adicionalmente, encontraremos LED con diferentes ángulos. Los LED con un ángulo de iluminación más pequeño tienen un haz más cerrado, por lo que concentran la luz en un área estrecha. Por el contrario, los LED con ángulos más amplios concentran una cantidad de luz inferior hacia delante, y a cambio iluminan un área mayor.

Por último, veréis que algunos LED tienen el encapsulado de un color. Este color es simplemente para identificar el color de la luz emitida por el LED sin tener que encenderlo, pero no tiene ninguna influencia en el color de la luz emitida, que sólo depende de la construcción interna del LED (personalmente, yo los prefiero con el encapsulado sin colorear).

arduino-led-color

¿Cuánto cuesta un LED?

El coste de los LED es muy similar independientemente de su tipo y tamaño (exceptuando, lógicamente, los LED de alta potencia), aunque algunos colores pueden ser un poco más caros.

En general, son dispositivos realmente baratos. Podemos encontrar LED por 1 céntimo de euro, en vendedores internacionales de eBay o AliExpress.

arduino-led-buy

Por último, comentar que tenemos también disponibles una gran cantidad de accesorios para LED, como soportes, soportes roscados, tapas decorativas de plástico, etc. ..y también son muy baratos, en torno a un céntimo de euro la unidad.

arduino-led-accesories

Calcular el valor de la resistencia

Hemos dicho que lo principal para hacer funcionar un LED es calcular el valor de la resistencia necesaria. Para calcular el valor de tensión necesaria para alimentar un LED necesitamos conectar 3 parámetros

  • La tensión de alimentación (Vcc)
  • La tensión de polarización directa del LED (Vd)
  • La corriente nominal del LED (In)

Calcula el valor de la resistencia es sencillo. Como hemos dicho, la tensión que soporta el LED es la diferencia entre la tensión aplicada y la tensión de polarización directa del LED.

Aplicando la ley de Ohm, con el valor de la intensidad nominal del LED

Por lo que lo que el valor de la resistencia resulta

Dado que las resistencias comerciales tienen valores normalizados, no encontraréis una resistencia con el valor exacto que hayáis calculado. En este caso, elegiremos la resistencia normalizada inmediatamente superior al valor calculado, para garantizar que la corriente es inferior a la nominal.

La tensión de alimentación Vcc es conocida para nosotros. En caso de aplicar una fuente de alimentación o una batería, Vcc es la tensión nominal de la misma. En el caso de una salida digital o analógica de Arduino, Vcc dependerá del modelo que estemos usando (5V o 3.3V) pero también es conocido.

Recordar que aunque uséis una salida analógica PWM la tensión entregada a la carga es siempre Vcc. Consultar la entrada Salidas analógicas PWM en Arduino si tenéis dudas en esto.

Respecto a la tensión de polarización y la corriente nominal dependen de los materiales y constitución interna del diodo. En el caso de diodos LED convencionales de 3mm y 5mm, dependen principalmente del color y luminosidad

No obstante, en la mayoría de las ocasiones el propio vendedor facilita estos valores en el anuncio. En caso de duda deberemos acudir al Datasheet del LED para consultar los valores nominales.

En la siguiente tabla os adjuntamos unos valores generales de la tensión de polarización Vd típica para cada color. También os figura el valor de la resistencia necesaria, en Ohmios, para distintos valores de tensión de alimentación Vcc.

ColorVddResistencia (Ohmios)
3.3V5V9V
---------
Infrarrojo1.4V150
Rojo1.8V100
Naranja2.1V100
Amarillo2.2V100
Verde3.2V10
Azul3.5V-
Violeta3.6V-
Blanco3.8V-

Conexión eléctrica

La conexión eléctrica es realmente sencilla. Simplemente ponemos la resistencia previamente calculada en serie con el LED.

arduino-led-esquema-electrico

El montaje en una protoboard quedaría de la siguiente forma.

arduino-led-montaje

Ejemplos de código

A continuación alguno de los códigos para probar a encender LED con nuestros Arduinos, y el montaje indicado. Los códigos son similares a los que hemos visto previamente en las distintas entradas del blog, pero empleando un LED externo en lugar del LED integrado en la placa. Para ello, solo tenemos que sustituir el número de PIN 13, correspondiente con el LED integrado, por el PIN de la salida a la que vamos a emplear.

Así, el primer código sirve para encender y apagar un LED, tal y como vimos en la entrada salidas digitales en Arduino.

const int ledPIN = 9;
 
void setup() {
  Serial.begin(9600);    //iniciar puerto serie
  pinMode(ledPIN , OUTPUT);  //definir pin como salida
}
 
void loop(){
  digitalWrite(ledPIN , HIGH);   // poner el Pin en HIGH
  delay(1000);                   // esperar un segundo
  digitalWrite(ledPIN , LOW);    // poner el Pin en LOW
  delay(1000);                   // esperar un segundo
}

Pruébalo online

El siguiente código emplea las salidas digitales y la comunicación por puerto serie para hacer parpadear el LED el número de veces que enviemos por el puerto serie, tal y como vimos en la entrada comunicación por el puerto serie de Arduino.

const int ledPIN = 9;

int option;

void setup(){
  Serial.begin(9600);
  pinMode(ledPIN , OUTPUT); 
}

void loop(){
  //si existe información pendiente
  if (Serial.available()>0){
    //leeemos la opcion
    char option = Serial.read();
    //si la opcion esta entre '1' y '9'
    if (option >= '1' && option <= '9')
    {
      //restamos el valor '0' para obtener el numero enviado
      option -= '0';
      for(int i=0;i<option;i++){
         digitalWrite(ledPIN , HIGH);
         delay(100);
         digitalWrite(ledPIN , LOW);
         delay(200);
      }
    }
  }
}

Pruébalo online

Por último, el siguiente código emplea una salida PWM para hacer variar la intensidad del LED, tal y como vimos en la entrada salidas analógicas en Arduino.

const int ledPIN = 5;

byte outputValue = 0;  

void setup()
{  
   Serial.begin(9600);         // Iniciar puerto serie
   pinMode(ledPIN , OUTPUT); 
}

void loop() 
{
   if (Serial.available()>0)  // Si hay datos disponibles
   {
      outputValue = Serial.read();  // Leemos la opción
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue -= '0';    // Restamos '0' para convertir a un número
         outputValue *= 25;    // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  

Pruébalo online

Hasta aquí el tutorial de usos de LED. ¡Parece mentira lo que ha dado para escribir un dispositivo tan pequeño! Esperamos que queda claro el uso de los LED con o sin Arduino, y os animamos a usarlos y probarlos en vuestros experimentos.

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full