Encender un LED con Arduino


arduiino-led

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 corticircuito. 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

V = V_{cc}-V_d = I_{nominal} * R


Por lo que lo que el valor de la resistencia resulta

R = \frac{V_{cc}-V_d}{I_{nominal}}


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.3V5V9V12V
Infrarrojo1.4V150270510680
Rojo1.8V100220470680
Naranja2.1V100200470680
Amarillo2.2V100200470680
Verde3.2V10150330560
Azul3.5V100330560
Violeta3.6V100330560
Blanco3.8V100330560

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.

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.

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.

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.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino
Previous Hacer gráficas fácilmente en Arduino IDE con Serial Plotter
Next Consultar servidor de licencias FlexLM desde C#

¡Deja un comentario!...

avatar
1000
Sort by:   newest | oldest | most voted
Alvaro Garracini
Guest
Hola. Soy nuevo en todo esto de la electrónica y arduino, pero ya tengo experiencia en programación. Me gustan muchos tus tutoriales, esta todo muy bien explicado, mas allá de que hay conceptos de electrónica que no tengo claro. Tengo una duda respecto a esta publicación, tú colocas la resistencia en el ánodo del led, pero yo he visto que muchos colocan la resistencia en el cátodo, es mas, en el simulador arduino (http://circuits.io) hice un semáforo (6 led) para practicar y coloqué una resistencia de 270 ohmios antes del GND, y funciona!. Mi duda es si esto está bien,… Read more »
luisllamas
Guest

Buena pregunta.

En este caso, es indistinto en que lugar pongas la resistencia, antes o después del LED. La resistencia simplemente limita la intensidad que pasar por el LED; y su funcionamiento y cálculo es el mismo en ambas posiciones.

Un saludo!

Juan Carlos Peña Garcia
Guest
Juan Carlos Peña Garcia
Estimado Luis: Primero que todo felicitarte por tus tutoriales, muy buenos, didàcticos y completos. Soy principiante en Arduino y estoy probando estos còdigos para entender mejor la programaciòn. Te quisiera preguntar en lo especìfico, en este tutorial, el ejemplo de còdigo para encender el led tantas veces como sea el numero leìdo por el monitor serial (1-9), lo he hecho y funciona de maravillas pero no logro entender la parte de restar cero al valor leìdo si por ejemplo, se recibe un 2, si le resto 0, sigo teniedo dos, sin embargo la resta es necesaria, sino, no funciona!!! Pudieras… Read more »
luisllamas
Guest

Porque en el puerto de serie recibes byte, que es básicamente lo mismo que un char. Es decir recibes ‘2’ como char, no 2 como int.
Para convertir el ‘2’ de char a int lo más sencillo es restarle ‘0’.
Para más información, échale un ojo a la entrada sobre puerto de serie https://www.luisllamas.es/arduino-puerto-serie/

Juan Carlos Peña Garcia
Guest
Juan Carlos Peña Garcia

Hola Luis: Muchas gracias por tomarte tu tiempo en responderme. No sabìa que se podìa hacer asì, me llamaba la atenciòn que ponìas una sola comilla (‘) en vez de (“), por lo que sospechaba de que se trataba de una variable tipo char. Voy a ver el tutorial que me sugieres, de momento muchas gracias, y te exhorto a continuar con estos buenos tutoriales.
Un saludo cordial,
Juan Carlos Peña

Juan Carlos Peña Garcia
Guest
Juan Carlos Peña Garcia

Estimado Luis: Poseo una placa Arduino UNO y desde hace unos dìas estoy por hacerte esta pregunta: siempre que conecto la placa al ordenador por el puerto usb, desde que la conecto aparece encendido el led amarillo de la placa(on board), el que està asociado al pin 13, aun sin haber cargado ningùn progama. Y cuando le cargo programas que tampoco usan el pin 13, sigue encendido.
Si conecto un led externo al pin 13, esto no sucede. (?!?!)
No he probado con otras fuentes de alimentaciòn, pero quisiera saber si esto es normal??
Muchas gracias de antemano,
Juan Carlos

luisllamas
Guest
wpDiscuz