Semaforo Inteligente en arduino

SEMAFORO INTELIGENTE 1. MATERIALES  Arduino MEGA  Protoboard donde conectamos los componentes  6 resistencias 220 Ω 

Views 186 Downloads 0 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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); }