Práctica Dirigida 2

Puerta Automatica

En esta práctica realizaremos el mecanismo para una puerta automática mediante un sensor ultrasónico y un servomotor, que ademas tendrá sonido y una pantalla donde se muestran los datos de distancia.
Utilizaremos un piezo, cables , protoboard, tarjeta Arduino, sensor ultrasonico, servomotor y una LCD.






Procedimiento

Sensor ultrasónico
Lo primero que se debe hacer es la conexión a negativo y positivo, para esto conectamos dos cables uno del bus positivo de la protoboard al pin de 5V de la tarjeta Arduino, y el otro del bus negativo al pin GND (tierra), Esta parte no necesita ser programada.

Para la conexión del sensor ultrasónico lo colocamos en la protoboard en un lugar sin obstáculos, este sensor cuenta con cuatro terminales las cuales de vamos a conectar mediante cables al polo negativo y positivo de la protoboard uniendo la terminal GND al bus negativo de la protoboard y la terminal VCC al bus positivo, las terminales ECHO Y TRIGGER SE conectan a la tarjeta Arduino, La terminal ECHO con el pin 12 y la terminal TRIGGER con el pin 13.

Piezo
Colocamos el piezo en la protoboard, de sus terminales conectamos una con en bus negativo de la protoboard y el otro al pin dos de la tarjeta arduino.
  
Servomotor
Para conectarlos colocamos tres cables en las terminales del servomotor de los cuales conectamos dos a la protoboard, uno al bus negativo y el otro al bus positivo y el último lo conectamos al pin 3 de la tarjeta Arduino.

LCD
Esta pantalla debe de colocarse con mucho cuidado ya que tiene muchas conexiones, en la parte inferior trasera de la LCD conectamos dos cables desde el pin 3 y 4 al polo positivo y negativo de la protoboard, luego en la parte superior trasera se conectan seis cables desde el pin 5 al 10 de la LCD a los pines desde el 4 al 9 de la tarjeta Arduino.



La programación es la siguiente:


#include <LiquidCrystal.h>      //Libreria para la pantalla LCD//
#include <Servo.h>      //Libreria para el servomotor//
Servo servo1;     //Sentencia//
LiquidCrystal lcd(8,9,4,5,6,7);     //Pines que controlaran la LCD//
int v = -1;
int puertoservo = 3;      //Variable para el servo//
int trig = 13;      //variable para el trigger quien envia la onda ultrasonica//
int echo = 12;      //variable para el echo quien recive la onda que rebota en el objeto//
int piezo = 2;      //variable del piezo, el cual emite el sonido//
int grados;     //Variable de angulo para el servo//
int tmp = 0;      //Variable temporal//
int pulsominimo = 650;      //Variable menor de angulo//
int pulsomaximo = 2550;     //Variable mayor del servo//
float disCalculada;     //Variable que guarda el valor de la distancia//


void setup()
{
  lcd.setCursor (4,1);      //define la ubicacion en la pantalla//
  lcd.print ("PRONIE");     //Muestra la palabra en la posicion antes definida//
  lcd.noBlink();      //Evita el parpadeo de la pantalla//
  delay (2000);     //Pausa//
 
  servo1.attach (puertoservo, pulsominimo, pulsomaximo);
 
  pinMode (trig, OUTPUT);     //Salida de datos//
  pinMode (echo, INPUT);      //Entrada de datos//
  pinMode (piezo, OUTPUT);      //Salida de datos//
  Serial.begin (9600); 
}

void loop()
{
  //procedimiento que calcula los datos a mostrar en el monitor//
  disCalculada = calcularDistancia ();     
  grados = servo1.read();     //Guarda valor del angulo de giro del servo//
  Serial.print("Grados :"); //imprime la palabra grados//
  Serial.println (grados);    //imprime el valor del angulo//
  delay (200);
  Serial.println("-------");      //Linea para dividir lecctura//
  Serial.print("cm :");     //Imprime las iniciales de centimetro//
  Serial.println(disCalculada);     //Imprime el valor de la variable en el siguiente reglon//
  delay(200);       //Pausa//
 
  if (disCalculada < 100)     //Condicional, valor de la distancia menor a 100//
  {
    tmp = 90+10;      //variable temporal//
    tone (piezo,600,100); //tono que se escuchara si se cumple la condicion//
  }
  else
  {
    tmp = 0-10;     //si no se cumple la condicion cambia el valor//
  }
  delay (10);
  servo1.write (tmp);     //muestra los grados guardados en la variable temporal//
  lcd.setCursor(1,1);     //posicion del cursor//
  lcd.print("Distancia ");      //Muestra la palabra Distancia//
  lcd.println(disCalculada);      //Muestra el valor de la variable//
}

//procedimiento que calcula la distancia para devolver el valor//
int calcularDistancia ()
{
  long distancia;
  long duracion;
  digitalWrite (trig,LOW);      //Apagado//
  delayMicroseconds (4);      //Pausa//
  digitalWrite (trig, HIGH);      //Encendido//
  delayMicroseconds (10);
  digitalWrite (trig,LOW);
  duracion = pulseIn (echo, HIGH);
  duracion = duracion /2;
  distancia = duracion/29;
  return distancia;     //devuelve el valor de distancia//
  }





Reto 2

El reto consiste en modificar la melodía del ejemplo por otra conocida y encender un led cada vez que se abren las puertas.









Procedimiento

Para este reto tuvimos que agregar pocos elementos a los que ya teníamos, una luz LED, una resistencia y dos cables, uno desde la terminal más corta del LED al bus negativo de la protoboard y el otro desde la terminal mas corta hasta el pin 11 de la tarjeta Arduino, una resistencia colocada en línea con este último.





La programación es la siguiente:


#include <pitches.h>      //Librería//
#include <LiquidCrystal.h>      //Libreria para la pantalla LCD//
#include <Servo.h>      //Librería para el servomotor//
Servo servo1;     //Sentencia//
LiquidCrystal lcd(8,9,4,5,6,7);     //Pines que controlaran la LCD//
int v = -1;
int pinVerde = 11;      //Variable para el LED//
int puertoservo = 3;      //Variable para el servo//
int trig = 13;      //variable para el trigger quien envia la onda ultrasonica//
int echo = 12;      //variable para el echo quien recibe la onda que rebota en el objeto//
int piezo = 2;      //variable del piezo, el cual emite el sonido//
int grados;     //Variable de angulo para el servo//
int tmp = 0;      //Variable temporal//
int pulsominimo = 650;      //Variable menor de angulo//
int pulsomaximo = 2550;     //Variable mayor del servo//
int tonos[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};    //Notas musicales//
int numTonos = 10;      //numero de notas//
float disCalculada;     //Variable que guarda el valor de la distancia//

void setup()
{
  lcd.setCursor (4,1);      //define la ubicacion en la pantalla//
  lcd.print ("PRONIE");     //Muestra la palabra en la posicion antes definida//
  lcd.noBlink();      //Evita el parpadeo de la pantalla//
  delay (2000);     //Pausa//
 
  servo1.attach (puertoservo, pulsominimo, pulsomaximo);
 
  pinMode (trig, OUTPUT);     //Salida de datos//
  pinMode (echo, INPUT);      //Entrada de datos//
  pinMode (piezo, OUTPUT);      //Salida de datos//
  pinMode (pinVerde, OUTPUT);     //Entrada de datos//
  Serial.begin (9600); 
}

 void loop()
{
  //procedimiento que calcula los datos a mostrar en el monitor//
  disCalculada = calcularDistancia ();     
  grados = servo1.read();     //Guarda valor del angulo de giro del servo//
  Serial.print("Grados :"); //imprime la palabra grados//
  Serial.println (grados);    //imprime el valor del angulo//
  delay (200);
  Serial.println("-------");      //Linea para dividir lecctura//
  Serial.print("cm :");     //Imprime las iniciales de centimetro//
  Serial.println(disCalculada);     //Imprime el valor de la variable en el siguiente reglon//
  delay(200);       //Pausa//
 
  if (disCalculada < 50)     //Condicional, valor de la distancia menor a 50//
  {
    tmp = 90+10;      //variable temporal//
    tone (piezo,600,100);     //tono que se escuchara si se cumple la condicion//
    digitalWrite(pinVerde,HIGH);      //Led enciende//
   
    for (int thisNote = 0; thisNote < 10; thisNote++)     //variable temporal//
  {
    tone(piezo, tonos[thisNote]);
    delay(100);   //espera//
    noTone(piezo);    //Para de sonar//
  }
  }
    else
  {
    tmp = 0-10;     //si no se cumple la condicion cambia el valor//
    digitalWrite(pinVerde,LOW);     //si no se cumple la condicion el LED se apaga//
    noTone(piezo);    //Para de sonar//
  }
  delay (10);
  servo1.write (tmp);     //muestra los grados guardados en la variable temporal//
  lcd.setCursor(1,1);     //posicion del cursor//
  lcd.print("Distancia ");      //Muestra la palabra Distancia//
  lcd.println(disCalculada);      //Muestra el valor de la variable//
}

//procedimiento que calcula la distancia para devolver el valor//
int calcularDistancia ()
{
  long distancia;
  long duracion;
  digitalWrite (trig,LOW);      //Apagado//
  delayMicroseconds (4);      //Pausa//
  digitalWrite (trig, HIGH);      //Encendido//
  delayMicroseconds (10);
  digitalWrite (trig,LOW);
  duracion = pulseIn (echo, HIGH);
  duracion = duracion /2;
  distancia = duracion/29;
  return distancia;     //devuelve el valor de distancia//
  }




Problemas Técnicos

  • Problemas al cargar el programa en la tarjeta Arduino.

Después de intentarlo varias veces, cambie la tarjeta, hice nuevamente las conecciones y funcionó correctamente, luego volví a probar de nuevo la tarjeta y ya funcionaba.

  • Dificultades al programar la melodía.

Lo intente varias veces y busque ejemplos que me ayudaran a comprender cómo funcionaba.
Encontré un blog que me ayudo mucho no solo a lograr la programación, sino tambien a comprenderla.


Blog recomendado:
El cajón de Arduino
Ardu ecda. (2014). Tutorial - Haciendo Sonidos con Ardu. febrero 28, 2018, de El cajón de Arduino Sitio web: http://elcajondeardu.blogspot.com/2014/01/tutorial-haciendo-sonidos-con-ardu.html









No hay comentarios:

Publicar un comentario