Introducción Crearemos un semáforo con tiempos inferiores a los reales, para poder probarlo más rápidamente. Introducimos un pulsador para ir conmutando entre semáforo y otras funciones como dejar encendido un led rojo, etc. Lo que haremos será básicamente hacer un Programa y circuito circuito para la creación de cruce de semáforos con Arduino Uno. El estado verde tiene una duración de 6 segundos, más el tiempo de parpadeo, el estado amarillo es de 3 segundos y el estado rojo se encuentra activo mientras el otro semáforo pasa por el estado verde y amarillo. El botón sirve para terminar el tiempo del semáforo con luz verde activo en el momento y así pasar la actividad al otro semáforo. Intrucciones utilizadas:
pinMode: define si un pin del Arduino es entrada o salida, este comando es únicamente para 1 pin, asi que si quieres varios pines de entrada y salida se repite el comando y se cambia los campos. digitalWrite: establece un estado lógico (1 o 0) en la salida del pin de Arduino. delay: retardo en milisegundos
Material usado
Arduino Uno y cable para conexión USB 1 push button 1 resistencia de 10K ohms
6 resistencias de 330 ohms 2 leds de 10 mm, color verde difuso 2 leds de 10 mm, color ámbar difuso 2 leds de 10 mm, color rojo difuso 1 protoboard Cables para conexiones
Yo use cables para conexión macho-macho y algo de cable de ethernet. Los leds use de 10mm para que fuese más vistoso, pero pudo haber sido leds sencillos de 5mm. Funcionamiento
Monta el circuito y carga el programa al arduino. Inicialmente todos los leds deben estar apagados. Al pulsar una vez el botón, se activará el modo semáforo. Si pulsamos otra vez se enciende solo el led rojo. Si pulsamos una tercera vez se enciende el led ambar. Si pulsamos una cuarta vez se encience el led verde. Al pulsar una quinta vez el contador se pone a cero, se apagan todos los leds, y se vuelve a repetir este proceso.
Circuito:
Y aquí una imagen de como quedo el circuito ya montado en el protoboard.
Este es el programa creado para hacer funcionar los dos semáforos. Cada semáforo es una función, y al termino de cada función se manda a llamar a la otra función. La función loop inicializa el semáforo con uno en luz verde y el otro en luz roja. #include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int delai = 1000;
void setup() { pinMode(22,OUTPUT); pinMode(24,OUTPUT); pinMode(26,OUTPUT); }
void verde(){ digitalWrite(22,HIGH); digitalWrite(24,LOW);
digitalWrite(26,LOW); } void amarillo(){ digitalWrite(24,HIGH); digitalWrite(22,LOW); digitalWrite(26,LOW); } void rojo(){ digitalWrite(26,HIGH); digitalWrite(24,LOW); digitalWrite(22,LOW); }
void loop() { for(int count1 = 24;count1 > 0; count1){ verde(); lcd.clear(); lcd.begin(16, 2); lcd.print("Verde"); lcd.setCursor(0, 1);
lcd.print(count1); count1--; delay(delai); if(count1 == 0){ for(int count2 = 2;count2 > 0; count2){ amarillo(); lcd.clear(); lcd.begin(16, 2); lcd.print("Amarillo"); lcd.setCursor(0, 1); lcd.print(count2); count2--; delay(delai); if(count2 == 0){ for(int count3 = 10;count3>0; count3){ rojo(); lcd.clear(); lcd.begin(16, 2); lcd.print("Rojo"); lcd.setCursor(0, 1);
lcd.print(count3); count3--; delay(delai); if(count3 == 0){ for(int count4 = 2;count4 > 0; count4){ amarillo(); lcd.clear(); lcd.begin(16, 2); lcd.print("Amarillo"); lcd.setCursor(0, 1); lcd.print(count4); count4--; delay(delai); } } } } } } }
}