Actividad 4: Uso del sensor de ultrasonidos

Actividad 4:

 

Actividad 4

El objetivo de esta actividad consiste en programar un pequeño parking funcional con lo visto anteriormente. Al presionar uno de los dos botones, se debe abrir el servomotor 1 (un coche entra), con el sensor de ultrasonidos se debe detectar el momento en el cual el coche ya ha pasado la barrera. Al pulsar el otro pulsador, el segundo servo debe abrir la barrera (un coche sale). Cuando el segundo sensor de ultrasonidos detecte que el coche ha salido, debe cerrar la barrera. En la pantalla LCD se debe mostrar el número de coches que están dentro (han entrado y no han salido). En caso de haber 6 coches, se debe impedir la entrada de un nuevo coche. El zumbador debe sonar cuando detecte un coche (sube la barrera) y cuando vaya a bajar la barrera.

Montaje eléctrico

Esta es la última actividad propuesta en la que es necesario realizar conectar nuevos componentes electrónicos. Para este último montaje nos van a hacer falta estos componentes

  • 2 Sensores de ultrasonidos HCSR-04

A continuación se puede ver el montaje propuesto:


 

 

A continuación se desglosan los pines en los que se recomienda conectar los dos sensores de ultrasonidos:

  • Pin digital 6 → trigger sensor ultrasonidos 1

  • Pin digital 7 → trigger sensor ultrasonidos 1

  • Pin digital 8 → trigger sensor ultrasonidos 2

  • Pin digital 9 → trigger sensor ultrasonidos 2

Al igual que sucede con la pantalla LCD, es posible utilizar y programar un Arduino para el uso
de un sensor HCSR-04 sin usar ninguna libreria aunque el muso de esta nos propoircioan un codigo
mas sencillo y modular. La librería propue3sta para la realización de esta actividad se muestra
a continuación:

#include <HCSR04.h>
Para utilizar este sensor es necesario declarar un objeto de topo HCSR04. A continuación se
muestra un código ejemplo de como declarar dicho objeto:

HCSR04 HC_SR(Pin_Trigg, Pin_echo);

Una vez declarado, se puede empezar a obtener la distancia que hay desde el sensor hasta un
objeto frontal haciendo uso de la siguiente sentencia:

HC_SR.dist();
Para poder evaluar la distancia a la cual hay un objeto va a ser necesario el uso de un
condicional. También es recomendable almacenar el valor de distancia en una variable por si se
desea hacer operaciones matemáticas con ella o mostrarla por monitor serial.

distancia = HC_SR.dist();
if((distancia >= 15) && (distancia<25)){ // Si la distancia es mayor/igual a 15 y menor de 25
    ...
}
//Agregamos librerías
#include <Servo.h>
#include <HCSR04.h>
#include <Wire.h>  //Comunicacion con modulo I2C
#include <LiquidCrystal_I2C.h> //Pantalla LCD

// Se crea el objeto de la pantalla LCD
LiquidCrystal_I2C lcd(0x27, 16,2);

#define trig2 9
#define echo2 8
#define trig1 7
#define echo1 6
#define LedRojo 3
#define LedVerde 4
#define Zumbador 12
#define BE 5 //boton entrada
#define BS 13 //boton salida

bool estadoVerde = false;
bool estadoRojo = false;

bool ultimoEstadoPulsador1 = HIGH;
bool ultimoEstadoPulsador2 = HIGH;

HCSR04 HC_SR_1(trig1, echo1);
HCSR04 HC_SR_2(trig2, echo2);

Servo servoMotor1;
Servo servoMotor2;

int Contador = 0;
int Salida = 0;

void setup() {

  Serial.begin(9600);
  pinMode(LedRojo,OUTPUT);
  pinMode(LedVerde,OUTPUT);
  pinMode(BE,INPUT);
  pinMode(BS,INPUT);
  pinMode(Zumbador,OUTPUT);
 
  lcd.init();
  lcd.backlight();
  lcd.clear();

  servoMotor1.attach(10);
  servoMotor2.attach(11);

  tone(Zumbador, 100);
  delay(500);
  servoMotor1.write(0);
  servoMotor2.write(180);
  noTone(Zumbador);
  delay(500);
  servoMotor1.write(60);
  servoMotor2.write(90);
  tone(Zumbador, 100);
  delay(500);
  noTone(Zumbador);
  servoMotor1.write(0);
  servoMotor2.write(180);

}

void loop() {

  // Leer el estado actual de los pulsadores
  bool estadoPulsador1 = digitalRead(BE);
  bool estadoPulsador2 = digitalRead(BS);

  float distancia1 = HC_SR_1.dist();
  Serial.print("Distancia 1: ");
  Serial.println(distancia1);
  delay(100);
  float distancia2 = HC_SR_2.dist();
  Serial.print("Distancia 2: ");
  Serial.println(distancia2);
  delay(100);
  Serial.println("---------------------------------");

  if(Contador <= 5){
    digitalWrite(LedVerde,HIGH);
    digitalWrite(LedRojo,LOW);
    lcd.setCursor(0,0);
    lcd.print("Numero de");
    lcd.setCursor(0,1);
    lcd.print("vehiculos:");
    lcd.setCursor(12,1);
    lcd.print(Contador);
    delay(100);
  }

  if(Contador > 5){
    digitalWrite(LedVerde,LOW);
    digitalWrite(LedRojo,HIGH);
    lcd.setCursor(0,0);
    lcd.print("Parking");
    lcd.setCursor(0,1);
    lcd.print("Completo");
    delay(100);
  }

  if ((ultimoEstadoPulsador1 == HIGH && estadoPulsador1 == LOW) && (Contador <= 5)){
    servoMotor1.write(60);
    tone(Zumbador, 1000);
    digitalWrite(LedVerde,LOW);
    digitalWrite(LedRojo,HIGH);
    lcd.clear();
    lcd.setCursor(0,0);
    Salida = 1;
    lcd.print("    Entrando    ");
    delay(100);
    noTone(Zumbador);
    while(Salida == 1){
      delay(50);
      distancia1 = HC_SR_1.dist();
      Serial.print("Distancia 1: ");
      Serial.println(distancia1);
      if((distancia1 <= 6) && (distancia1>=1)){
        tone(Zumbador, 1000);
        delay(170);
        noTone(Zumbador);
        delay(170);
        tone(Zumbador, 1000);
        delay(170);
        noTone(Zumbador);
        tone(Zumbador, 1000);
        delay(170);
        noTone(Zumbador);
        delay(170);
        Salida = 0;
      }
    }
    lcd.clear();
    servoMotor1.write(0);
    Contador = Contador + 1;
    Serial.println(Contador);
  }

  if((ultimoEstadoPulsador2 == HIGH && estadoPulsador2 == LOW) && (Contador > 0)){
    Salida = 1;
    servoMotor2.write(90);
    tone(Zumbador, 1000);
    digitalWrite(LedVerde,LOW);
    digitalWrite(LedRojo,HIGH);
    lcd.setCursor(0,0);
    lcd.print("    Saliendo    ");
    delay(100);
    noTone(Zumbador);
    while(Salida == 1){
      distancia2 = HC_SR_2.dist();
      Serial.print("Distancia 2: ");
      Serial.println(distancia2);
      delay(50);
      if((distancia2 >= 15) && (distancia2<25)){
        tone(Zumbador, 1000); // Genera un tono de 1000 Hz
        delay(333);
        noTone(Zumbador);
        delay(333);
        tone(Zumbador, 1000); // Genera un tono de 1000 Hz
        delay(333);
        noTone(Zumbador);
        Salida = 0;
      }
    }
    lcd.clear();
    servoMotor2.write(180);
    Contador = Contador - 1;
    Serial.println(Contador);
  }

  // Actualizar los últimos estados de los pulsadores
  ultimoEstadoPulsador1 = estadoPulsador1;
  ultimoEstadoPulsador2 = estadoPulsador2;

  delay(100); // Pequeña pausa para evitar rebotes

}
Vistas
12 Número de vistas
12 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.