1. Descripción del proyecto:
Este proyecto es un cruce de semáforos con Arduino . 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.
2. Lista de elementos utilizados:
- 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
- 2 leds de 10 mm, color amarillo
- 2 leds de 10 mm, color rojo
- 1 protoboard
- Cables para conexiones
/*
Programa para un par de semaforos que cambian de uno
a otro, y la implementacin de un boton para terminar
el tiempo de la luz verde y pasar al otro.
*/
// Declaramos la variable para el pin del boton
const int button = 8;
void setup() {
// Con un ciclo activamos los pines del 2 al 7 como salidas
for (int pin = 2; pin <= 7; pin++) {
pinMode(pin, OUTPUT);
}
// El pin del boton lo ponemos como entrada
pinMode(button, INPUT);
}
// Funcion para el primer semaforo y sus cambios de estado
void semaforouno() {
digitalWrite(2, HIGH);
int count = 0;
while (count < 30) {
// El ciclo esta en espera mientras el boton no es presionado
if (digitalRead(button) == true) {
break;
}
count++;
delay(200);
}
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delay(2500);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(7, LOW);
// Mandamos a llamar al otro semaforo
semaforodos();
}
// Funcion para el segundo semaforo y sus cambios de estado
void semaforodos() {
digitalWrite(5, HIGH);
int count = 0;
while (count < 30) {
if (digitalRead(button) == true) {
break;
}
count++;
delay(200);
}
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(2500);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(4, LOW);
// Mandamos a llamar al otro semaforo
semaforouno();
}
// Iniciamos nuestro semaforo
void loop() {
// Cambiamos el estado de todos los leds para
// que esten apagados todos al inicio
for (int pin = 2; pin <= 7; pin++) {
digitalWrite(pin, LOW);
}
// Prendemos el verde de un semaforo y el
// rojo del otro semaforo
digitalWrite(2, HIGH);
digitalWrite(7, HIGH);
// Iniciamos el primer semaforo
semaforouno();
}
7. Codigo Fuente en Arduino Semaforo cambia solo si se oprime el push:
const int button = 8;
void setup() {
for (int pin = 2; pin <= 7; pin++) {
pinMode(pin, OUTPUT);
}
pinMode(button, INPUT);
}
void semaphoreOne() {
digitalWrite(2, HIGH);
int count = 0;
while (true) {
if (digitalRead(button) == true) {
break;
}
}
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delay(2500);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(7, LOW);
semaphoreTwo();
}
void semaphoreTwo() {
digitalWrite(5, HIGH);
int count = 0;
while (true) {
if (digitalRead(button) == true) {
break;
}
}
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(2500);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(4, LOW);
semaphoreOne();
}
void loop() {
for (int pin = 2; pin <= 7; pin++) {
digitalWrite(pin, LOW);
}
digitalWrite(2, HIGH);
digitalWrite(7, HIGH);
semaphoreOne();
}