Actividad 3

 

Actividad 3

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) y, tras un pequeño tiempo, la barrera se cierra. Al pulsar el otro pulsador, el segundo servo debe abrir la barrera (un coche sale). 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. Siempre que se suba la barrera del servo hasta que vuelva a bajar debe sonar el zumbador.

Montaje eléctrico

Para continuar con el montaje eléctrico será necesario añadir los siguientes componentes:

  • Pantalla LCD con controlador I2C

  • Zumbador activo

A continuación se puede ver el montaje propuesto para la realización de esta actividad.


 

 

A continuación se desglosa una recomendación de donde conectar los pines de los componentes nuevos:

  • Pin analógico A4 → SDA

  • Pin analógico A5 → SCL

  • Pin digital 12→ Zumbador

Aunque si bien es posible usar la pantalla LCD sin el uso de ninguna librería, utilizar las
librerías ya desarrolladas presentes en internet puede simplificar y acelerar mucho la
programación de este tipo de componentes. La librería propuesta se declararía de la siguiente
forma:

#include <LiquidCrystal_I2C.h> //Pantalla LCD

Para crear un objeto de tipo pantalla LCD habría que usar la siguiente sentencia:

LiquidCrystal_I2C lcd(Direccion_I2C, Ancho, Alto);
Lo primero que hay que hacer para poder usar la pantalla lcd es inicializarla, para ello aremos
uso de la siguiente sentencia:

lcd.init();
lcd.backlight();

Para poder escribir en la pantalla LCD hay que indicar la posición en la que se desea empezar
a escribir y el texto que se desea imprimir. También se debe limpiar la pantalla antes de
escribir en ella, ya que si no se podrían mostrar caracteres no deseados:

lcd.clear();
lcd.setCursor(X,Y);
lcd.print("Texto");
En esta actividad es necesario plantear una lógica que modifique el funcionamiento del sistema
en su conjunto dependiendo de una serie de parámetros. En este caso el principal parámetro va a
ser la cantidad de coches que hay dentro del parking.

if(Numero_Coches<6){
    ...
}
else{ 
    ...
  }
//Agregamos librerías
#include <Servo.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 trig1 9
#define echo1 8
#define trig2 6
#define echo2 7
#define LedRojo 3
#define LedVerde 4
#define Zumbador 12
#define BE 5 //boton entrada
#define BS 13 //boton salida

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, 1000);
  delay(500);
  servoMotor1.write(0);
  servoMotor2.write(180);
  noTone(Zumbador);
  delay(500);
  servoMotor1.write(60);
  servoMotor2.write(90);
  tone(Zumbador, 1000);
  delay(500);
  noTone(Zumbador);
  servoMotor1.write(0);
  servoMotor2.write(180);

}

void loop() {

  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);
  }

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

  if ((digitalRead(BE) == 1) && (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(500);
    noTone(Zumbador);
    lcd.clear();
    servoMotor1.write(0);
    Contador = Contador + 1;
    Serial.println(Contador);
  }

  if((digitalRead(BS) == 1) && (Contador > 0)){
   
    Salida = 1;
    servoMotor2.write(90);
    tone(Zumbador, 1000);
    digitalWrite(LedVerde,LOW);
    digitalWrite(LedRojo,HIGH);
    lcd.setCursor(0,0);
    lcd.print("    Saliendo    ");
    delay(500);
    noTone(Zumbador);
    lcd.clear();
    servoMotor2.write(180);
    Contador = Contador - 1;
    Serial.println(Contador);
  }

}
Vistas
15 Número de vistas
15 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.