Cómputo Integrado Laboratorio |
|
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.
Circuito
El circuito es sencillo y fácil de elaborar, yo use Fritzing para mostrárselos aquí y vean como son las conexiones.
Y aquí una imagen de como quedo el circuito ya montado en el protoboard.
Código
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.
Esta es una imagen del circuito, con el programa ya subido al Arduino y funcionando.
Vídeo
Un vídeo de muestra con el semáforo funcionando.
Versión modificada
El semáforo anterior tiene un push button que cuando es presionado mientras el semáforo se encuentra en luz verde, termina su tiempo y empieza a parpadear la luz amarilla, para después cambiar a rojo, en pocas palabras el botón tiene la función de cambiar de semáforo.
Esta versión es de un semáforo manual, es decir, no cambia de un semáforo a otro hasta que es presionado el botón.
Aquí les dejo el código modificado, quite los comentarios ya que son prácticamente los mismos que en el anterior. Podemos ver el cambio dentro del ciclo while donde cambiamos la condición.
Y aquí esta el vídeo para ver cuál fue la diferencia que tenemos en este semáforo que cambia manualmente.
9 pts lab integrados
ResponderEliminarMuy buen proyecto, lo acabo de testear y funca bien!
ResponderEliminarHola que tal, he estado buscando información sobre como usar el arduino pero ya de una forma más real.. para conectarlo en un semáforo un poco más real, no nada más en protoboar.. pero no encuentro nada, es que en mi escuela hay un semaforo didáctico, y necesitamos conectarlo usando el arduino como programación
ResponderEliminarLa programación sería básicamente lo mismo, lo que deberías de buscar es el diagrama esquemático del semáforo didáctico con el que cuentas, y ver mediante electrónica como conectar con las salidas digitales del Arduino.
Eliminarhola ote es k me toca haser dos semafors de calle y un peatonal lo cual tiens k demorar
ResponderEliminar20 segundos Rojo
10 segundos Amarillo
20 segundos Verde
el peatonal tien k tener dos led y el resto tiene k tener 3 lo cual el peatona tien ke star solo pero nos e como se hace en arduino se me alludarias porfavor
Puedes programar tres funciones, una para cada semáforo, tal y como lo hice yo en mi código.
EliminarBUEN DIA DISCULPA KE PROGRAMA UTILIZASTE PARA EL PROYECTO
ResponderEliminarSe llama "Arduino IDE", disponible para diferentes sistemas operativos.
EliminarAmigo no hay forma de que funcione sin el pulsador
ResponderEliminarSi, en las funciones semaphoreOne() y semaphoreTwo() elimina el bloque del ciclo while.
Eliminaryo copie el programa y el circuito y no me funciona
ResponderEliminarAlguien mas ya había intentado y le funcionó, verifica que hayas copiado bien.
EliminarMuy buen proyecto amigo, oye tendras ese codigo para c# ?
ResponderEliminarLo siento, solo tengo el que muestro aquí.
EliminarHola Ramon
ResponderEliminarYa lo hice y no funcionó, sale el siguiente texto,avrdude: stk500_getsync(): not in sync: resp=0x00
Gracias
Ese error sale en consola cuando tu computadora no pudo conectar correctamente con el Arduino. Busca en algún foro si alguien tiene la solución para este problema. Suerte.
Eliminarpor favor dime con sabes cual es el pulsador y tambn en la seccion de int porque no estan nombrados los 6 leds?
ResponderEliminarNo necesite nombrarlos porque preferí inicializarlos en el "setup" directo con el número de pin, y para no hacerlo uno por uno los inicialice con un "for". Puedes también declarar cada uno de los led tal y como lo hice con el botón, y sería algo así:
Eliminarconst int led1 = 2;
const int led2 = 3;
... etc.
y luego en el "setup" ya sin usar el "for",
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
... etc.
y cambiarías también líneas como,
digitalWrite(2, LOW);
por
digitalWrite(led1, LOW);
funciona de las dos maneras, solo es cuestión de como se te hace más cómodo.
Para el botón, ya que esta declarado y se que esta en el pin 8 del Arduino, al cual nombre "button", y solo es cuestión de tomar lectura de el con "digitalRead(button)".
Espero haya aclarado algo tus dudas.
hola muchas gracias funciono de maravilla pero solo tengo un problema, los leds no se alumbran muy bien, al parecer les falta voltaje o algo asi para q se iluminen mejor, que hacer en este caso ?? Gracias de antemano :)
ResponderEliminarFijate que resistencias le estas poniendo a los led ya que si es de un omiaje muy alto no alumbraria bien, ponle una de 330 omios.
Eliminarahora tengo otra duda bro, bueno ya sabemos que el pin 8 es el PB asi que mi siguinte cuestion es: que seccion debo de eliminar para que solo funcione sin el PB osea quitar el PB del circuito y del codigo de arduino, que solo sean los 6 led delñ semaforo, gracias y espero no fregar tanto porq enserio me quiero enseñar a manejar el arduino
ResponderEliminarconst 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();
}
Solo elimina la sección correspondiente al "if" que se encuentra dentro del "while" para cada función de semáforo.
Eliminarok osea en este esta seccion borro desde while
Eliminarvoid semaphoreTwo() {
digitalWrite(5, HIGH);
int count = 0;
DE AQUI,,,,, while (true) {
if (digitalRead(button) == true) { ,,,,,,,,HASTA AQUI?
break; ESTO NO LO BORRO?
}
Quita todo esto:
Eliminarint count = 0;
while (true) {
if (digitalRead(button) == true) {
break;
}
}
y pon un delay:
delay(5000);
donde le darás el tiempo que quieres que dure en verde.
q mas amigo necesito hacer un juego de semaforos pero no puedo usa un arduino me podria colaborar
ResponderEliminar¿Ocupas dos semáforos a la vez?
Eliminaramigo, fiz exatamente igual ao seu projeto, mas não funcionou, os leds não acendem. Você poderia me ajudar? por favor. Sou Brasileira
ResponderEliminar-------
google tradutor:
Amigo, hizo exactamente lo mismo que su proyecto, pero no funcionó, los LEDs no se encienden. ¿Podría usted ayudarme? por favor. soy brasileño
Olá Erika, provavelmente é um problema com a conexão do circuito. Agregame em G+ para conversar.
EliminarOlá Ramón, adicionei você
EliminarMuy bueno,me encanto tu blog,seguire viendo todo lo que has echo con arduino.
ResponderEliminarGracias por tu visita!
EliminarQue tal disculpa como podria hacer para que en el momento en el que desde el puerto COM3 le mande un 1todas las luces del semaforo empiezen a parpadear y cuando le doy 0 vuelva al semaforo normal? si no es mucho pedir para saber :c
ResponderEliminarHola disculpa no haber respondido en su momento, tal vez ya no necesites la ayuda, pero respondo por si alguien más necesita hacer algo como lo que comentas.
EliminarPara poder controlar el Arduino desde la PC necesitas hacer una conexión serial, para que desde la consola de la IDE puedas mandarle datos al Arduino, y este las procese.
En la página oficial de Arduino tienen un ejemplo donde mandan por puerto serial un entero para encender un led RGB de determinado color (http://arduino.cc/en/Tutorial/ReadASCIIString), ahí tienes una buena base para aprender a enviar datos, recibirlos y tomar acciones, y una vez practicado con ese ejemplo, será sencillo modificar el código del semáforo para dar solución al problema.