A continuació estudiarem com encendre un led, muntar diferents seqüències de llums amb leds, etc amb Arduino, per a això:
- Repassarem breument que és un led.
- Aprendrem a calcular la resistència de polarització que acompanya el led.
- Veurem els muntatges o connexions.
- Estudiarem la programació de diferents exemples amb leds a l’IDE d’Arduino.
Aleshores: ¿QUÈ ÉS UN LED?
Al que anomenem col·loquialment led és realment un tipus de díode que emet llum (díode led).
Un led emet llum amb el pas de corrent elèctric i perquè això passi hi ha d’haver aplicada una diferència de potencial o voltatge entre els seus terminals.
Un led a diferència d’una resistència, té polaritat. Això vol dir que només podrà permetre el pas d’intensitat en un únic sentit, de positiu a negatiu.
Com veiem en la fotografia, en els leds ha un terminal més llarg que un altre. El terminal positiu correspon a la pota més llarga, mentre que el negatiu correspon a la pota més curta.
A grans trets el funcionament d’un led es basa en la unió de dos semiconductors amb diferent dopatge, la qual cosa crea una barrera de potencial (Vd) que cal superar perquè el díode s’encengui.
Cal destacar que cada led emet realment la llum de la color que indica la seva encapsulat de plàstic i això implica que en funció de la color tindrem una barrera de potencial (Vd) diferent.
Tipus de led | Vd |
Roig/vermell | 1,8 V |
Groc | 2,1 V |
Verd | 2,1 V |
Si no arribem a superar aquesta vosté llavors el díode led estarà apagat en el que s’anomena la zona de tall.
Si superem la tensió vostè llavors el díode led estarà a la zona de conducció i començarà a emetre llum.
El problema és que quan el díode entra en conducció perquè es supera Vd pràcticament no hi ha oposició a el pas de corrent ja que la seva resistència interna és molt baixa. Això provoca que augmenti molt el corrent que el travessa i per tant hi hagi perill de cremar el component, és per això que hem de posar una resistència en sèrie amb el díode led per limitar el pas de corrent i així protegir-lo.
CÀLCUL DEL VALOR DE LA RESISTÈNCIA DE POLARITZACIÓ DEL LED:
Simplement hem d’aplicar la llei d’Ohm sobre la resistència de polarització:
Tenint en compte que el voltatge aplicat sobre la resistència serà igual al voltatge d’alimentació de arduino (5V) menys la barrera de potencial d’el led (Vd) tenim que:
Sabent que les sortides digitals de la placa compatible amb Arduino estan pensades per funcionar a un valor d’intensitat al voltant de 20 mA (amb un màxim de 40 mA), el valor de la resistència vindrà donat per:
Com la tensió de l’díode vostè té un valor diferent segons el color del díode led, ens queda:
Llavors la resistència de 160 és la que fa que pel led vermell passin com a molt 20mA i comprovem que pels leds groc i verd amb aquesta resistència passaria una intensitat de:
Hem d’agafar la resistència normalitzada immediatament superior a 160 ohms.
Podem augmentar una mica el valor de la resistència i encara que perdem una mica de brillantor al led guanyarem en temps de vida útil. A la pràctica tampoc notarem grans diferències en la brillantor dels leds.
Finalment, calcularem la potència que dissiparà la resistència i ens assegurarem que la resistència que muntem sigui d’una potència superior per evitar que es cremi:
Aquí cal veure la potència que és capaç de dissipar la nostra resistència. En el nostre cas utilitzem resistències d’1/ 4W (molt comuns) i així complim ampliament la condició de potència.
CONNEXIÓ D’UN LED AMB ARDUINO:
Acabem d’estudiar que hem de connectar en sèrie una resistència de 220 Ω
Ara veiem l’esquema de muntatge:
Recordar que:
- Connectem el pin número 5 a l’ànode del led o terminal positiu (pota llarga deL led).
- Connectem el pin GND al càtode del led o terminal negatiu (pota curta del led) a través de la resistència de 220 Ω.
Cal comentar que donaria el mateix si connectéssim la resistència entre l’ànode i el pin número 5.
PROGRAMACIÓ:
Anem a implementar uns quants programes el més senzills possible per familiaritzar-nos amb les ordres bàsiques, construir la base i així després poder començar a explorar altres programes més complexos:
1. Programa per encendre un led:
1 2 3 4 5 6 7 8 9 10 11 |
/* InputMakers: Pràctica bàsica per encendre un led*/ int PinledVermell = 5; // Definimo la variable PinledVermell i la associem al pin 5. void setup() { pinMode(PinledVermell, OUTPUT); // Definim el pin 5 com sortida (output). } void loop() { digitalWrite(PinledVermell, HIGH); // Posem el pin al que està connectat el led vermell a HIGH (5V), encenem així el led vermell. } |
2. Programa que encén i apaga el led de forma intermitent:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/* InputMakers Pràctica bàsica para encendre i apagar un led de forma intermitent.*/ const int PinledVermell = 5; // Definim la variable PinledVermell i l'associem al pin 5. /*El tipus de variable const int indica que la variable no pot ser canviada en temps de execució. Bàsicament es diu que const int és una variable sols de lectura, no d'escriptura. També té l'avantatge de que ocupa menys memòria. Podríem haver definit aquesta variable amb int com a l'exemple anterior, però ho hem fet així per ensenyar altre tipus de variable.*/ void setup() { pinMode(PinledVermell, OUTPUT); // Definim el pin 5 com sortida (output). } void loop() { digitalWrite(PinledVermell, HIGH); // Encenen el led vermell. delay(1000); digitalWrite(ledPinVermell, LOW); // Apaguem el led vermell i tornem a l'inici del loop. delay(1000); } |
3. Programa que encén el led al pressionar la tecla “a” del teclat i l’apaga al pressionar la tecla “b”. Per fer-ho utilitzem el port 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 per encendre i apagar un led per lectura de tecla del teclat (port Serial). */ int tecla; // definim la variable tecla on guardarem la lectura de la tecla. int Pinled = 5; // definim la variable Pinled que correspondrà la pin 5 on connectarem el led. void setup(){ Serial.begin(9600); //inicialitzem el port sèrie. pinMode(Pinled, OUTPUT); // Definim el pin 5 como sortida. } void loop(){ //si hi ha disponibles pel port serial fem la lectura. if (Serial.available()>0){ tecla=Serial.read(); // llegim les dades i les guardem en la variable tecla if(tecla=='a') { digitalWrite(Pinled, HIGH); // si pressionem la tecla "a" encenem el led. Serial.println("ON"); // imprimim per pantalla "ON" de encès. } if(tecla=='b') { digitalWrite(Pinled, LOW); // si pressionem la tecla "b" apaguem el led. Serial.println("OFF"); // imprimim per pantalla "OFF" de apagat. } } } |
Per comunicar la nostra placa amb l’ordinador utilitzarem el port sèrie.
El port sèrie en Arduino està connectat físicament als pins 0 i 1, per això si s’utilitza el port sèrie no podrem utilitzar aquests pins com a entrades o sortides.
I quan estem utilitzant el port sèrie? si en el nostre programa hem iniciat el port sèrie amb la instrucció Serial.begin (9600); llavors estem utilitzant el port sèrie.
Per què es gasten dos pins per utilitzar el port sèrie? perquè s’utilitza un pin com a recepció RX (0) i un altre com a transmissió TX (1).
Per accedir al monitor sèrie premem el símbol marcat amb el requadre vermell:
Llavors se’ns obrirà el monitor sèrie,
Veiem que a la part superior ens permet enviar dades i a la part inferior rebem la informació:
Per als següents programes amb diferents leds hem de fer el següent muntatge:
4. Programa que realitza la seqüència de llums “tipus circular” amb 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 per realitzar la seqüència de llums "tipus circular" amb 6 leds */ int pin2 = 2; int pin3 = 3; int pin4 = 4; int pin5 = 5; int pin4 = 6; int pin5 = 7; int temps = 60; // Temps en ms que estarà encès cada led. void setup(){ pinMode(pin2, OUTPUT); // Definim els pins com sortides. pinMode(pin3, OUTPUT); pinMode(pin4, OUTPUT); pinMode(pin5, OUTPUT); pinMode(pin6, OUTPUT); pinMode(pin7, OUTPUT); } void loop() { digitalWrite(pin2, HIGH); // Encén i apaga els leds (seqüència circular). delay(temps); digitalWrite(pin2, LOW); delay(temps); digitalWrite(pin3, HIGH); delay(temps); digitalWrite(pin3, LOW); delay(temps); digitalWrite(pin4, HIGH); delay(temps); digitalWrite(pin4, LOW); delay(temps); digitalWrite(pin5, HIGH); delay(temps); digitalWrite(pin5, LOW); delay(temps); digitalWrite(pin6, HIGH); delay(temps); digitalWrite(pin6, LOW); delay(temps); digitalWrite(pin7, HIGH); delay(temps); digitalWrite(pin7, LOW); delay(temps); } |
5. Programa que realitza la seqüència de llums de el “cotxe fantàstic” amb 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 per realitzar la seqüència de llums del cotxe fantàstic amb 6 leds */ int pin2 = 2; int pin3 = 3; int pin4 = 4; int pin5 = 5; int temps = 60; // Temps en ms que estarà encès cada led. void setup(){ pinMode(pin2, OUTPUT); // Definim els pins como sortides. pinMode(pin3, OUTPUT); pinMode(pin4, OUTPUT); pinMode(pin5, OUTPUT); pinMode(pin6, OUTPUT); pinMode(pin7, OUTPUT); } void loop() { digitalWrite(pin2, HIGH); // Encén i apaga els leds delay(temps); digitalWrite(pin2, LOW); delay(temps); digitalWrite(pin3, HIGH); delay(temps); digitalWrite(pin3, LOW); delay(temps); digitalWrite(pin4, HIGH); delay(temps); digitalWrite(pin4, LOW); delay(temps); digitalWrite(pin5, HIGH); delay(temps); digitalWrite(pin5, LOW); delay(temps); digitalWrite(pin6, HIGH); delay(temps); digitalWrite(pin6, LOW); delay(temps); digitalWrite(pin7, HIGH); delay(temps); digitalWrite(pin7, LOW); delay(temps); digitalWrite(pin6, HIGH); delay(temps); digitalWrite(pin6, LOW); delay(temps); digitalWrite(pin5, HIGH); delay(temps); digitalWrite(pin5, LOW); delay(temps); digitalWrite(pin4, HIGH); delay(temps); digitalWrite(pin4, LOW); delay(temps); digitalWrite(pin3, HIGH); delay(temps); digitalWrite(pin3, LOW); delay(temps); } |
6. Programa alternatiu a l’anterior per realitzar la seqüència de llums de “el cotxe fantàstic” amb 6 leds mitjançant 2 bucles for. Més avançat i interessant.
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 avançada utilitzant bucles for per simular els llums "tipus cotxe fantàstic" amb 6 leds.*/ // Declarem un vector anomenat leds que va a definir als leds. int leds[] = {2,3,4,5,6,7}; int n; // variable pel bucle for int temps=100; //temps que dura encès cada led. void setup() { // Utilitzem un bucle for per declarar els pines com sortides. for(n=0;n<6;n++) { pinMode(leds[n], OUTPUT); } } void loop() { // bucle for per encendre tots els leds en ordre ascendent. for (n=0;n<7;n++) { digitalWrite (leds[n],HIGH); delay(temps); digitalWrite (leds[n],LOW); delay(temps); } // bucle for per encendre tots els leds en ordre descendent. for (n=6;n>=0;n--) { digitalWrite (leds[n],HIGH); delay(temps); digitalWrite (leds[n],LOW); delay(temps); } } |
A la nostra pàgina trobareu el projecte del “Semàfor” amb el qual podràs ampliar els teus coneixements sobre l’ús i muntatge de leds amb Arduino. ¡Fes una ullada!
IMPORTANT: OFERIM GRANS DESCOMPTES PER CENTRES EDUCATIUS! SI ERES UN CENTRE EDUCATIU DEMANA PRESSUPOST PERSONALITZAT AL SEGÜENT ENLLAÇ
[product_page id=”238″]
Comparteix si t’ha agradat 🙂
Salutacions de l’equip d’InputMakers i Segueix sempre aprenent!