lunes, 15 de febrero de 2021

Contador de tráfico mediante Arduino

Autor: Fernando Martín Pérez
Idea del Proyecto
Se ha ideado una herramienta que controla el número de vehículos que circula por una calle, de tal manera que se automatiza la cuenta de vehículos que circulan para poder realizar estudios y estadísticas.

Funcionamiento
Se incrustará en el centro del carril de la calzada una resistencia LDR (debidamente protegida para que en caso de que un vehículo la atraviese con las ruedas, no sea dañada). Cuando no circula ningún vehículo, la resistencia al paso de la corriente a través de ella es baja porque le llega la iluminación de la calle, por lo que Arduino considerará que está recibiendo una señal "HIGH".
En el momento que un coche circula por encima, le llegará muy poca iluminación, por lo que la resistencia será muy elevada, y arduino considerará que está recibiendo una señal "LOW".
Cuando recibe una señal "LOW", Arduino contará al coche y sumará el paso de un nuevo coche.

Para evitar desajustes, se han añadido dos pulsadores, uno restará el paso de coches, y otro lo sumará; es decir, si un coche atraviesa el sensor y por cualquier motivo Arduino no lo ha detectado, se puede añadir manualmente que ha pasado un coche. A su vez, si pasa una persona por encima (por ejemplo si atraviesa mal la calle y justo por el lector), con el seggundo pulsador se puede restar un paso por el lector.

A cada paso de vehículo, se encenderá un LED, que nos indicará que el sistema ha realizado una lectura correcta, y si se resta una lectura, se encenderá otro LED, para comprobar que se ha realziado correctamente esta sustracción.

Asimismo, para evitar exceso de cableado que dificulte la operación del sistema y visualización de datos, se opta por aprovechar las características de las placas protoboard y no emplear cables con banana, sino cables colocacdos a medida que permitan utilizar únicamente bananas para conectar la placa Arduino a la protoboard.

Materiales
  • 1 o 2 placas protoboard
  • 1 placa Arduino
  • 1 pantalla LCD Arduino
  • 1 potenciómetro 10 kohmios
  • 2 LED
  • 1 resistencia LDR
  • 2 pulsadores
  • 3 resistencias de 10 kohmios
  • 1 resistencia de 1 kohmio
  • cables necesarios para realizar conexiones 
Esquema conexionado
El esquema de conexiones es el siguiente:


Imágenes del montaje








Vídeo demostrativo



Código
El código, explicado mediante comentarios, es el siguiente:


#include <LiquidCrystal.h>
//Incluye la librería para utilizar la pantalla LCD

 

 

LiquidCrystal lcd(7,6,5,4,3,2); //Define los pines a utilizar de la pantalla LCD

 

//Se declaran las variables necesarias

int LED1=0;

int LED2=1;

int BOTON1=8;

int BOTON2=9;

int val1;

int val2;

const int LDR1 = 12;

int vehiculos=0;

 

 

//Setup, se desarrolla solo una vez, al inicio

void setup() {

 //Se especifica si los pines van a ser de salida o entrada

pinMode(LED1,OUTPUT);

pinMode(BOTON1,INPUT);

pinMode(LED2,OUTPUT);

pinMode(BOTON2,INPUT);

pinMode(LDR1, INPUT);

 

//Se inicializa el uso de pantalla LCD

lcd.begin(16,2);

 

//Loop, se desarrolla en bucle constantemente

}

void loop() {

 //Muestra en la pantalla LCD cuántos vehículos han pasado

lcd.setCursor(0,0);

lcd.print("Vehículos:");

lcd.setCursor(0,1);

lcd.print(vehiculos);

 

//Variables para controlar el estado de los pulsadores

val1=digitalRead(BOTON1);

val2=digitalRead(BOTON2);

 

//Variable que nos dice si la LDR está recibiendo luz (HIGH), u oscuridad (LOW)

int value1 = digitalRead(LDR1);

 

 

//Bucle if para contar un vehículo si se atraviesa la LDR

if (value1 == LOW)

 {

  vehiculos=vehiculos+1;

  digitalWrite(LED1,HIGH);

  delay(1000);

  digitalWrite(LED1,LOW);

 }

 

//Bucle if para contar un vehículo si se pulsa el pulsador de sumar un vehículo y encender el LED de vehículo contado

if(val1==HIGH)

{

  vehiculos=vehiculos+1;

  digitalWrite(LED1,HIGH);

  delay(1000);

  digitalWrite(LED1,LOW);

  }

 

else { digitalWrite(LED1,LOW);

}

 

//Bucle if para restar un vehículo si se pulsa el pulsador de restar y encender el LED de vehículo restado

if(val2==HIGH)

{

  vehiculos=vehiculos-1;

  digitalWrite(LED2,HIGH);

  delay(1000);

  digitalWrite(LED2,LOW);

  }

 

else { digitalWrite(LED1,LOW);

}

 

}

No hay comentarios:

Publicar un comentario