PRACTICA DIRIGIDA 2

PUERTA AUTOMÁTICA

Vamos a crear el prototipo de una puerta automática que detecta a una persona en la entrada de un lugar, se divide el problema en 4 etapas donde necesitamos el bus principal donde se conectan los componentes, el sensor ultrasónico, el actuador piezo que nos da el sonido y por ultimo la pantalla LCD que reporta la distancia del sensor ultrasónico

Se necesita el arduino 1, la protoboard, el sensor ultrasonico, piezo, actuador , display o LCD y cables.

PRIMERA PARTE 

Puerta automática - sensor ultrasónico

Se conectan cables para la polaridad positiva y negativa de la protoboard a la arduino 1, se conecta el sensor ultrasónico en la protoboard de tal manera que este direccionado donde no hayan cables que obstaculicen, este sensor tiene 4 contactos GND, Echo, Trig y Ucc. Se definen los pines 13 y 12 para enviar y recibir las ondas ultrasonicas el envio es el triger pin 13 y  echo 12 para recibir.


Programación

int trig = 13;
int echo = 12;
float disCalculada;



void setup()
{
  pinMode (trig, OUTPUT);
  pinMode (echo, INPUT);
  Serial.begin (9600);

}

void loop()
{

  disCalculada = calcularDistancia();
  Serial.println("---------------");
  Serial.print("cm :");
  Serial.println (disCalculada);
  delay(200);
}

int calcularDistancia()
{
long distancia;
long duracion;
digitalWrite (trig, LOW);
delayMicroseconds (4);
digitalWrite (trig, HIGH);
delayMicroseconds (10);
digitalWrite (trig, LOW);
duracion = pulseIn (echo, HIGH);
duracion = duracion/2;
distancia = duracion/29;
return distancia;
}

SEGUNDA PARTE

Puerta automática-piezo

Para su construcción uno de los terminales va al bus en su parte negativa y la parte positiva va direccionada al pin 2 de la tarjeta arduino.

Programa

Se continua el mismo código y se le agrega otras lineas para que sea capaz de tomar decisiones con base en la distancia.


#include <Servo.h>
Servo servo1;

int puertoservo = 3;
int trig = 13;
int echo = 12;
int piezo = 2;   variable del pin piezo
int grados;
int tmp = 0;
int pulsominimo = 650;
int pulsomaximo = 2550;
float disCalculada;



void setup()
{
  servo1.attach (puertoservo,pulsominimo, pulsomaximo);
  pinMode (trig, OUTPUT);
  pinMode (echo, INPUT);
  pinMode (piezo, OUTPUT);  //se pone el piezo en modo de salida
  Serial.begin (9600);

}

void loop()
{

  disCalculada = calcularDistancia();
  grados=servo1.read();
  Serial.print("Grados : ");
  Serial.println (grados);
  delay(200);
  Serial.println("---------------");
  Serial.print("cm :");
  Serial.println (disCalculada);
  delay(200);
if (disCalculada < 100) //se agrega lógica computacional con la condicional IF que comparara si la distancia es menor a 100 y con base en eso activara el tono del piezo
 {
  tmp=100;
  tone (piezo, 600,100); 
 }
 else // sino cumple no se ejecuta la acción
{
  tmp=0;
}
delay (10);
servo1.write (tmp);
}
int calcularDistancia()
{
long distancia;
long duracion;
digitalWrite (trig, LOW);
delayMicroseconds (4);
digitalWrite (trig, HIGH);
delayMicroseconds (10);
digitalWrite (trig, LOW);
duracion = pulseIn (echo, HIGH);
duracion = duracion/2;
distancia = duracion/29;
return distancia;
}

  TERCERA PARTE

Puerta automática, servomotor

Este nos ayudara a abrir la puerta automática, empleando un servomotor conectado a los polos negativo y positivo de la protoboard. Y las instrucciones seran enviadas por un cable concetado al pin 3.



Programa

Continuamos con el mismo y le incluimos lo siguiente

#include <Servo.h> // se incluye esta libreria
Servo servo1;

int puertoservo = 3; // puerto del servo
int trig = 13;
int echo = 12;
int piezo = 2; 
int grados; // guarda los grados del angulo del giro del servo
int tmp = 0; // variable temporal que se usa en la condicional
int pulsominimo = 650; // variable para el angulo menor del servo
int pulsomaximo = 2550; // variable para el angulo mayor del servo
float disCalculada;



void setup()
{
  servo1.attach (puertoservo,pulsominimo, pulsomaximo); //  se indica el pin y el angulo menor y mayor a usar
  pinMode (trig, OUTPUT);
  pinMode (echo, INPUT);
  pinMode (piezo, OUTPUT);
  Serial.begin (9600);

}

void loop()
{

  disCalculada = calcularDistancia();
  grados=servo1.read();guarda  en la variable el valor del gir del servo en grados
  Serial.print("Grados : ");
  Serial.println (grados);
  delay(200);
  Serial.println("---------------");
  Serial.print("cm :");
  Serial.println (disCalculada);
  delay(200);
if (disCalculada < 100)
 {
  tmp=100;
  tone (piezo, 600,100); 
 }
 else
{
  tmp=0;
}
delay (10);
servo1.write (tmp);
}
int calcularDistancia()
{
long distancia;
long duracion;
digitalWrite (trig, LOW);
delayMicroseconds (4);
digitalWrite (trig, HIGH);
delayMicroseconds (10);
digitalWrite (trig, LOW);
duracion = pulseIn (echo, HIGH);
duracion = duracion/2;
distancia = duracion/29;
return distancia;
}


CUARTA PARTE

Puerta automática LCD

Para mostrar valores por medio de la pantalla LCD, es importante tener en cuenta para hacer el circuito que la pantalla tiene dos partes una es para la alimentación eléctrica, esta se conecta al bus de la protoboard y la segunda parte es la comunicación y se necesita 6 conexiones a terminales desde el pin 4 hasta el pin 9 en la tarjeta de arduino 1 y en la pantalla LCD del pin 5 al 10.



Programa

Se continua con lo ya existente y se agrega lo siguiente:

#include <LiquidCrystal.h> // s agrega libreria
#include <Servo.h>
Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7); // se indican pin de conexion
int v=-1;
int puertoservo =3;
int trig = 13;
int echo = 12;
int piezo = 2; 
int pulsominimo=650;
int pulsomaximo=2550;
int tmp=0;
int grados;
float disCalculada;

                     

void setup()
{
  
  lcd.setCursor(4,1); se define la posición de la fila
  lcd.print("PRONIE");
  lcd.noBlink(); // indica que no paradee
  delay(2000);
  
  servo1.attach (puertoservo,pulsominimo, pulsomaximo);

  pinMode (trig, OUTPUT);
  pinMode (echo, INPUT);
  pinMode (piezo, OUTPUT);
  pinMode (pinVerde, OUTPUT);
  
  Serial.begin (9600);
}

void loop()
{
  disCalculada = calcularDistancia ();
  grados=servo1.read();
  Serial.print("Grados :");
  Serial.println (grados);
  delay(200);
  Serial.println("--------");
  Serial.print("cm :");
  Serial.println (disCalculada);
  delay(200);
  if (disCalculada < 100)
 {
  tmp=90+10;
  
 }
 else
 {
  tmp=0-10;
  
 }
 delay (10);
 servo1.write (tmp);
 lcd.setCursor(1,1); // posicion de la linea
 lcd.print("Distancia "); // palabra que va aparecer
 lcd.println(disCalculada); // imprime resultado del calculo de la variable que es la  distancia (pasa al siguiente renglon)}
int calcularDistancia()
{
long distancia;
long duracion;
digitalWrite (trig, LOW);
delayMicroseconds (4);
digitalWrite (trig, HIGH);
delayMicroseconds (10);
digitalWrite (trig, LOW);
duracion = pulseIn (echo, HIGH);
duracion = duracion/2;
distancia = duracion/29;
return distancia;
}


VIDEO DE LA PRACTICA DIRIGIDA 2





RETO 2

El reto es el siguiente: Modificar la melodía del ejemplo por otra conocida y encender un led cada vez que se abren las puertas.




Programa

Se utilizo el mismo programa y se le agrego lo siguente para cumplir con el reto

#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7);
int pinVerde = 10;  Indica pin de conexion del led
int v=-1;
int puertoservo =3;
int trig = 13;
int echo = 12;
int piezo = 2; 
int pulsominimo=650;
int pulsomaximo=2550;
int tmp=0;
int grados;
float disCalculada;

                     

void setup()
{
  
  lcd.setCursor(4,1);
  lcd.print("PRONIE");
  lcd.noBlink();
  delay(2000);
  
  servo1.attach (puertoservo,pulsominimo, pulsomaximo);

  pinMode (trig, OUTPUT);
  pinMode (echo, INPUT);
  pinMode (piezo, OUTPUT);
  pinMode (pinVerde, OUTPUT); //se define como salida
  
  Serial.begin (9600);
}

void loop()
{
  disCalculada = calcularDistancia ();
  grados=servo1.read();
  Serial.print("Grados :");
  Serial.println (grados);
  delay(200);
  Serial.println("--------");
  Serial.print("cm :");
  Serial.println (disCalculada);
  delay(200);
  if (disCalculada < 100)
 {
  tmp=90+10;
  delay (500);
  tone (piezo, 330,200); //melodía que se activara
  delay (100);
  tone (piezo, 450,150);
  delay (100);
  tone (piezo, 400,200);
  delay (50);
  tone (piezo, 150, 200);
  delay (50);
  
  digitalWrite (pinVerde, HIGH);  //led encencido al abrir la puerta
 }
 else
 {
  tmp=0-10;
 digitalWrite (pinVerde, LOW); // led se apaga cuando se cierra
  
 }
 delay (10);
 servo1.write (tmp);
 lcd.setCursor(1,1);
 lcd.print("Distancia ");
 lcd.println(disCalculada);
}
int calcularDistancia()
{
long distancia;
long duracion;
digitalWrite (trig, LOW);
delayMicroseconds (4);
digitalWrite (trig, HIGH);
delayMicroseconds (10);
digitalWrite (trig, LOW);
duracion = pulseIn (echo, HIGH);
duracion = duracion/2;
distancia = duracion/29;
return distancia;
}

VIDEO DEL RETO 2










No hay comentarios:

Publicar un comentario

PAGINA PRINCIPAL

ESTE BLOG TIENE COMO FINALIDAD RECOPILAR LAS ACTIVIDADES Y APRENDIZAJES QUE SE VAN GENERANDO ACORDE AVANZA EL CURSO DE PROTOTIPOS INTERACT...