Medidor de Aforo Portátil
Autores del Proyecto: Alejandro Fuentes Camacho, Sandra Heredia Martínez, Alejandra Viana Durán.
Proyecto
Hemos realizado un contador de aforo portátil enfocándolo en un parking. Este recibe la información de los coches que entran, los suma y almacena, se encarga también de restar los coches de salida. Todo esto lo consigue gracias a los sensores ultrasonidos. Indica en una pantalla lcd, un mensaje de bienvenida al inicio, y avisa con un mensaje cuando no entran ni salen coches, añadiendo una frase de aforo completo al superar la cantidad de coches que pueden entrar. Ya para hacerlo más apropiado y que se asemeje a un parking de un supermercado hemos implementado con el servo motor una barra que al superar el aforo máximo se cierra para no dejar entrada a más coches. Además el aspecto de la maqueta con la caja ha sido de gran importancia, ya que la hemos realizado de unas dimensiones lo suficientemente pequeñas para que este pueda ser transportado sin problema y sea portátil, una ventaja la cuál creemos que es muy útil para su utilización.
Los componentes que hemos usado
Aparte de resistencias, placa Arduino 1 R3, protoboard y cables.
Equipo
Como equipo hemos funcionado muy bien. Decidimos realizar el proyecto trabajando los tres juntos para poder realizarlo de la mejor manera.
Entre los 3 fuimos a realizar la compra de los materiales necesarios. Compramos la caja e hicimos los espacios necesarios para los sensores así como los leds y la pantalla con ayuda de un cuter. También la pintamos y decoramos como hemos comentado anteriormente para darle el aspecto del parking utilizando sprays y pintura y moldes de el logo.
Hicimos el código juntos para poder hacerlo bien y detectar mejor los errores que pudiéramos cometer y mejorarlo, e igual realizamos el montaje de la protoboard y el Arduino con el resto de componentes.
Gracias a esto conseguimos realizar el proyecto sin apenas fallos y consiguiendo ideas de mejora y originalidad entre los 3.
Pasos
Iniciamos con una idea sobre un contador de personas relacionado con el covid, pero tras un tiempo pensando otro proyecto más original y con utilidad visible decidimos realizar esta especie de parking para verlo en funcionamiento y que se asemejara a algo que vemos todos los días, entenderlo y disfrutarlo haciéndolo.
Como se puede apreciar en la siguiente diapositiva nos apoyamos en tinkercad para ir viendo el código y el hardware en conjunto y ver que funcionara correctamente.
Compramos las piezas que nos faltaron así como la estructura para la maqueta. Montamos tanto la caja, e introducimos la placa de Arduino con sus respectivas conexiones.
Añadir para finalizar que tampoco nos surgió ningún error de gran importancia que hiciera que nos fallara, salvo cierta dificultad con los cables que se desconectaban generando problemas.
Proyecto en Tinkercad
Se pueden ver las conexiones que hemos realizado y los pines empleados
Costes aproximados
- •Caja ,spray, rotulares, palo para la barra (decoraciones varias) = 10€
- •Ultrasonidos = 7€
Código
#include <LiquidCrystal.h>
//SERVO
#include <Servo.h>
//SERVO
Servo servo1;
//SERVO
int PINSERVO=1;
int PULSOMIN=1000;
int PULSOMAX=2000;
int TRIG1 =8;
int ECO1=12;
int TRCO2=9;
int LED1=11;
int TRIG2=10;
int LED2=13;
int ZUMBADOR=A1;
int CONTADOR=0;
int Do=261;
int blanca=2000;
int DURACION1;
int DURACION2;
int DISTANCIA1;
int DISTANCIA2;
LiquidCrystal lcd(7,6,5,4,3,2);
void setup(){
servo1.attach(PINSERVO, PULSOMIN, PULSOMAX);//inicializar
servo1.write(0);
lcd.begin(16, 2);
lcd.print("BIENVENIDO");
delay(2000);
lcd.clear();
pinMode(TRIG1,OUTPUT);
pinMode(ECO1,INPUT);
pinMode(TRIG2,OUTPUT);
pinMode(ECO2,INPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
}
void loop(){
//PARA 1
digitalWrite(TRIG1,HIGH);
delayMicroseconds(10);
digitalWrite(TRIG1,LOW);
DURACION1=pulseIn(ECO1,HIGH);
DISTANCIA1=DURACION1/58.2;
//PARA 2
digitalWrite(TRIG2,HIGH);
delayMicroseconds(10);
digitalWrite(TRIG2,LOW);
DURACION2=pulseIn(ECO2,HIGH);
DISTANCIA2=DURACION2/58.2;
//BUCLES NI ENTRA NI SALE
if(DISTANCIA1>10 && DISTANCIA2>10){
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
lcd.setCursor(0,0);
lcd.print("NO ENTRA NADIE");
delay(1000);
lcd.setCursor(0,1);
lcd.print("NO SALE NADIE");
delay(1000);
}
//BUCLE DE ENTRADA
if (DISTANCIA1<11 && DISTANCIA2>10){
digitalWrite(LED1,HIGH);
digitalWrite(LED2,LOW);
if(CONTADOR>9){
lcd.setCursor(0,0);
lcd.print("AFORO COMPLETO");
delay(1000);
melodia();
lcd.setCursor(0,1);
lcd.print("NO SALE NADIE");
lcd.clear();
delay(1000);
servo1.write(180);
delay(1000);
}else{
lcd.setCursor(0,0);
lcd.clear();
delay(1000);
CONTADOR++;
lcd.setCursor(0,0);
lcd.print(CONTADOR);
lcd.print(" coches");
delay(1000);
lcd.setCursor(0,1);
lcd.print("NO SALE NADIE");
delay(1000);
}
//Salida
}
if(DISTANCIA1>10 && DISTANCIA2<11){
if(CONTADOR>0){
lcd.setCursor(0,1);
lcd.clear();
delay(1000);
digitalWrite(LED1,LOW);
digitalWrite(LED2,HIGH);
CONTADOR--;
delay(1000);
lcd.setCursor(0,0);
lcd.print("NO ENTRA NADIE");
delay(1000);
lcd.setCursor(0,1);
lcd.print(CONTADOR);
lcd.print(" coches");
delay(1000);
servo1.write(0);
delay(1000);
}
}
}
void melodia(){
tone(ZUMBADOR, Do,blanca);
delay(blanca);
}
Errores y soluciones
A pesar de no encontrarnos con muchos. Vimos como fallo a mejorar la dificultad de detectar, para el contador de aforos, con los sensores ultrasonido, los coches que salían y entraban cuando la entrada y la salida se producían simultáneamente.
Una de las soluciones que pensamos fue poner dos barras con un servo motor cada una. Su función sería cerrarse la de salida mientras se produce la entrada de coches y viceversa, así conseguir un orden a la hora de entrar y salir.
Una de las mejoras que también se nos ocurrió, ya que el aforo solo se podía modificar desde el software, fue implementar un teclado de números el cuál estableciera e aforo total.
Video Explicativo
Video Hardware y Software
Video funcionamiento