En este segundo artículo dedicado a Arduino, vamos a ver un programa muy sencillo. Este programa consiste en un semáforo (una secuencia de parpadeo de tres diodos leds) que se activa al pulsar un pulsador.
El esquema es muy sencillo, como podréis ver ahora. Uso tres pines, uno para cada diodo LED (rojo, amarillo y verde). A continuación se puede ver la salida del diodo rojo.
![2017-04-14 19_50_31-LTspice XVII - [Draft1.asc]](https://trescientosbaudios.files.wordpress.com/2017/04/2017-04-14-19_50_31-ltspice-xvii-draft1-asc.png?w=300)
No uséis resistencias de valores inferior a 220 ohmios, ya que este valor es suficiente para que se vea bien y no se «carga» demasiado la salida del Arduino. La corriente máxima de un pin configurado como salida es de 40 mili-amperios. Si necesitásemos mas habria que recurrir a usar un transistor que funcione en conmutación.
La caída de tensión en un diodo led es de unos dos voltios. Como la tensión de salida del pin digital es de cinco, nos queda pues que:
Un led con esta corriente, luce mas que suficiente y si colocáis varios juntos no tendréis problemas de que luzcan mas unos que otros.
Veamos como es el circuito del botón de entrada:
![2017-04-14 19_54_19-LTspice XVII - [Draft1.asc]](https://trescientosbaudios.files.wordpress.com/2017/04/2017-04-14-19_54_19-ltspice-xvii-draft1-asc.png?w=300)
Vemos pues, que lo que debe considerar pulsaciones del botón o lo que entra en la entrada son «unos» (cinco voltios de tensión). Esta resistencia de 4k7 se llama resistencia de pull-down.
Esta resistencia esta siempre conectada a masa. De esta manera hacemos que si hay ruido en la entrada por dejarla al aire, este no le afecte. El valor no debe ser demasiado bajo, ya que habría demasiado consumo al haber un «uno» (5 voltios) en la entrada. Yo he utilizado una de 4700 ohmios (4k7) y no he tenido ningún problema.
Ya solo queda ver el programa, que es el siguiente:
// DEFINO LAS ENTRADAS Y SALIDAS const int VERDE = 13; const int AMBAR = 12; const int ROJO = 11; const int BOTON = 2; // ESTA FUNCION ENCIENDE EL LED QUE SE LE INDIQUE static void enciendeLed(int led) { digitalWrite(led, HIGH); } // ESTA FUNCION APAGA EL LED QUE SE LE INDIQUE static void apagaLed(int led) { digitalWrite(led, LOW); } // ESTO SE EJECUTA AL INICIAR EL PROGRAMA void setup() { pinMode(VERDE, OUTPUT); pinMode(AMBAR, OUTPUT); pinMode(ROJO, OUTPUT); pinMode(BOTON, INPUT); } // ESTO SE EJECUTA SIEMPRE void loop() { // CUANDO DETECTO TENSION EN LA ENTRADA // ACTIVO EL SEMAFORO if (digitalRead(BOTON) == true) { // LE PONGO UN RETARDO DE 30 MILI-SEGUNDOS PARA EVITAR REBOTES. delay(30); // ENCIENDO EL LED VERDE enciendeLed(VERDE); delay(2000); apagaLed(VERDE); delay(500); //ENCIENDO EL LED AMBAR enciendeLed(AMBAR); delay(2000); apagaLed(AMBAR); delay(500); //ENCIENDO EL LED ROJO enciendeLed(ROJO); delay(2000); apagaLed(ROJO); delay(500); } }
Creo que con los comentarios del programa es mas que suficiente para poder entenderlo.
Nada mas, hasta el próximo artículo.