Arduino desde cero – Artículo II

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]

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:

I \ led = \frac{3}{220} = 13.6 \ mili amperios

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]

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.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s