Está en la página 1de 12

SEMAFORO INTELIGENTE

1. MATERIALES
 Arduino MEGA
 Protoboard donde conectamos los componentes
 6 resistencias 220 Ω
 2 resistencias 10 kΩ
 3 LEDs verdes
 3 LEDs amarillos
 3 LEDs rojos
 2 pulsadores

2. LEDS CON ARDUINO

Lo primero que debemos saber antes de utilizar múltiples LEDs, es que se


trata de un diodo. Este tipo de componentes son muy particulares ya que
solo dejan pasar la electricidad en un sentido.

Pero ¿cuál es ese sentido? Es muy sencillo y con la práctica, te


acostumbrarás a utilizarlos. Los LEDs tienen una patilla más larga que otra,
esa patilla se conoce como ánodo (el polo positivo). Es por donde tiene que
entrar la corriente. La patilla más pequeña se conoce como cátodo (polo
negativo) y es por donde saldrá la corriente de electrones.

Pero, ¿cómo calculamos el valor de la resistencia? Sólo tenemos que aplicar


la Ley de Ohm. Conocemos el voltaje, por los pines digitales se
suministran 5 V. La intensidad la podemos sacar de la hoja de
características técnicas del propio Arduino. Si nos dirigimos a su web
oficial podemos ver el detalle que te muestro en la siguiente imagen.
La intensidad es de 20 mA (miliamperios) que son 0,02 A (Amperios).
El voltaje que tiene que caer en la resistencia es 5 V menos lo que
consume el LED, entre 1,8 V y 2,2 V. Esto nos da que la resistencia
debe consumir como mínimo 3,2 V.

Ya tenemos todo, solo hace falta sustituir los valores y calcular el valor
de la resistencia.

Ojo, que este es el mínimo. Por debajo de ese valor de resistencia


podemos dañar el LED, ya que aumentaría el voltaje y nos saldríamos
del rango de operación. En mi caso voy a utilizar resistencias de 220Ω
por comodidad. Esto me da como resultado que en la resistencia se
consumirán 4,4 V y quedarían 0,6 V para consumir en el LED. Estoy por
debajo de lo recomendado pero no dañaré el LED.

3. PULSADORES CON ARDUINO, CONTROLA EL FLUJO DE LA


CORRIENTE

Otro componente que vamos a utilizar y que debemos conocer son los
pulsadores. Gracias a estos componentes podemos dejar pasar o no la
corriente. Al utilizar un pulsador con Arduino tenemos que tener ciertas
precauciones, sobre todo cuando la salida la conectamos a un pin digital,
como es el caso. Lo primero es ver un esquema general de un pulsador.

El típico tiene cuatro patillas. Están conectadas entre ellas dos a dos y
entre ellas forman el interruptor. Un pulsador no es más que un interruptor,
deja pasar la corriente o no.
4. RESISTENCIA PULL DOWN, EVITA INDETERMINACIONES EN LOS
PULSADORES

Seguramente hayas oído hablar de las resistencias pull down y pull up. Se
trata de dos configuraciones que nos permiten tener un estado bajo (0
Voltios) o estado alto (5 Voltios) cuando un cable está al aíre.

Esto es lo que sucede con los pulsadores, mientras que no pulsemos,


tenemos el pin al aire y se produce una indeterminación. Las dos
configuraciones posibles son las siguientes.

El valor típico de la resistencia debe ser el mayor posible. Los 10kΩ es el


aconsejable para utilizar un pulsador con Arduino.
5. MONTAJE

Las resistencias conectadas a los múltiples LEDs son de 220 Ω y la de


los pulsadores 10 kΩ.

Lo primero es comprender el problema. Vamos a simular un cruce de calles


con múltiples LEDS, que harán de semáforos, y dos pulsadores, que harán
de sensores de presencia. El objetivo es que cuando se sitúe un coche en
un semáforo que está en rojo, permita que se ponga en verde y cierre el
otro semáforo.

Para empezar tenemos que partir de unas condiciones iniciales, ¿qué


semáforo comienza abierto y qué semáforo comienza
cerrado? Empezaremos con el semáforo 1 abierto y el semáforo 2 cerrado.
Para entendernos, en el esquema del circuito eléctrico, de izquierda a
derecha será semáforo 1, semáforo 2, pulsador 1 (simula sensor de
presencia del semáforo 1) y pulsador 2 (simula sensor de presencia del
semáforo 2).
Una vez que un coche esté parado ante un semáforo en rojo (simulamos
pulsando su pulsador), pasará un determinado tiempo y comenzará la
secuencia para apagar el otro semáforo y abrir el suyo. Sencillo ¿no?. Pues
vamos a ver el algoritmo.

1. Establecer condiciones iniciales


1. LED verde semáforo 1 encendido
2. LED rojo semáforo 2 encendido
3. Semáforo 1 activo
2. Comprobar que semáforo está activo
1. Semáforo 1 activo
1. Comprobar pin pulsador 2
1. Si pulsado
1. Cambiar semáforo 1 a rojo
2. Cambiar semáforo 2 a verde
2. Semáforo 2 activo
1. Comprobar pin pulsador 1
1. Si pulsado
1. Cambiar semáforo 2 a rojo
2. Cambiar semáforo 1 a verde
PROGRAMACION
// GRUPO 7 - CONFIGURACION SEMAFORO INTELIGENTE
// Pines a utilizar

#define LEDVERDE1 2
#define LEDAMARILLO1 3
#define LEDROJO1 4
#define LEDVERDE2 5
#define LEDAMARILLO2 6
#define LEDROJO2 7
#define PULSADOR1 8
#define PULSADOR2 9

// Variables

bool activo1 = true; // Indica si el semáforo 1 está activo, de lo contrario será el


semáforo 2
int tiempoCambio = 1500; // Tiempo de espera entre transición de LEDs
int tiempoEspera = 5000; // Tiempo de espera hasta comenzar transición

void setup() {
// put your setup code here, to run once:

Serial.begin(9600);

// Modo entrada/salida de los pines


pinMode(LEDVERDE1, OUTPUT);
pinMode(LEDAMARILLO1, OUTPUT);
pinMode(LEDROJO1, OUTPUT);
pinMode(LEDVERDE2, OUTPUT);
pinMode(LEDAMARILLO2, OUTPUT);
pinMode(LEDROJO2, OUTPUT);
pinMode(PULSADOR1, INPUT);
pinMode(PULSADOR2, INPUT);

// Apagamos todos los LEDs


digitalWrite(LEDVERDE1, LOW);
digitalWrite(LEDAMARILLO1, LOW);
digitalWrite(LEDROJO1, LOW);
digitalWrite(LEDVERDE2, LOW);
digitalWrite(LEDAMARILLO2, LOW);
digitalWrite(LEDROJO2, LOW);

// Estado inicial: semáforo 1 activo, semáforo 2 no activo


digitalWrite(LEDVERDE1, HIGH);
digitalWrite(LEDROJO2, HIGH);

void loop() {

// put your main code here, to run repeatedly:


// Dependiendo del semáforo que tengamos activo
if (activo1)
{
// Está encendido el semáforo 1, comprobamos el pulsador 2
int valor2 = digitalRead(PULSADOR2);

// Si hay un coche esperando, pulsador pulsado


if (valor2 == HIGH)
{
// Encender semáforo 2
ecenderSemaforo2();

// Semáforo 2 activo
activo1 = false;
}
}
else
{
// Está encendido el semáforo 1, comprobamos el pulsador 1
int valor1 = digitalRead(PULSADOR1);

// Si hay un coche esperando, pulsador pulsado


if (valor1 == HIGH)
{
// Encender semáforo 1
ecenderSemaforo1();

// Semáforo 1 activo
activo1 = true;
}
}

void ecenderSemaforo2()
{
// Apagamos semáforo 1
// Esperamos
delay(tiempoEspera);

// Pasamos a luz amarilla


digitalWrite(LEDVERDE1, LOW);
digitalWrite(LEDAMARILLO1, HIGH);

// Esperamos
delay(tiempoCambio);

// Pasamos a luz roja


digitalWrite(LEDAMARILLO1, LOW);
digitalWrite(LEDROJO1, HIGH);

// Encendemos semáforo 2
// Esperamos
delay(tiempoCambio);

// Pasamos a luz amarilla


digitalWrite(LEDROJO2, LOW);
digitalWrite(LEDVERDE2, HIGH);
}

void ecenderSemaforo1()
{
// Apagamos semáforo 2
// Esperamos
delay(tiempoEspera);

// Pasamos a luz amarilla


digitalWrite(LEDVERDE2, LOW);
digitalWrite(LEDAMARILLO2, HIGH);

// Esperamos
delay(tiempoCambio);

// Pasamos a luz roja


digitalWrite(LEDAMARILLO2, LOW);
digitalWrite(LEDROJO2, HIGH);

// Encendemos semáforo 1
// Esperamos
delay(tiempoCambio);

// Pasamos a luz amarilla


digitalWrite(LEDROJO1, LOW);
digitalWrite(LEDVERDE1, HIGH);
}

También podría gustarte