Práctica Dirigida 2

La práctica consiste en realizar una puerta automática, debemos utilizar el sensor ultra sónico, el servo motor, la pantalla LCD y un piezo, cuando algo se acerca a cierta distancia del sensor ultrasónico, la puerta se abre la cual lo simula el servo, cuando se aleja la puerta se cierra y también el piezo hace un sonido.


La Práctica Dirigida 2





El código de la práctica:

#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1; // Constructor de la sentencia servo
LiquidCrystal lcd (8,9,4,5,6,7); // Definimos los pines con los que se va comunicar la LEd con la tarjeta arduino
int puertoservo =3; // Variable para mandar datos al servo 
int trig= 13;
int echo= 12;
int piezo = 2; // Variable del pin del piezo
int grados; // variable para guardar los grados de ángulo del servo ( va guardar el angulo de giro del servo)
int tmp=0; // variable temporal para usar en la condicional
int pulsominimo=650; // variable que define el ángulo menor ó minimo que puede trabajar el servo
int pulsomaximo=2550;// variable que define el angulo mayor del servo
float disCalculada;

void setup() 
{
  lcd.setCursor (4,1); // define que se ubica en la posición 4 de la fila 1 de la pantalla.
  lcd.print ("PRONIE");// muestra el texto PRONIE en la pantalla LCD, en la fila 1, anterior mencionada
  lcd.noBlink (); // que no parpadee la pantalla
  delay(2000); // esperar 2 segundos
 //------------------// 
servo1.attach (puertoservo,pulsominimo, pulsomaximo); // se indica que el servo motor, esta en el pin 3,(puertoservo) y cual es el punto minimo ó maximo que puede trabajar nuestro servo motor.
  pinMode (trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode (piezo, OUTPUT); // Se establece el piezo en modo salida
  //--------------//
  Serial.begin (9600);
}

void loop() {
  disCalculada = calcularDistancia();
  grados=servo1.read();// guardamos en la variable grados el valor del angulo de giro del servo (guarda la lectura del angulo que reporta el servo motor
  Serial.println("--------");
  Serial.print("cm:");
  Serial.println(disCalculada);
  delay(200);
  if (disCalculada <20 )//  Si
  { 
    tmp=100; // a la variable temporal le vamos a asignar un valor de 100, (si la distancia es menor que 20, guarde dentro de la variable temporal, que gire un angulo de 100 °grados, la puerta se abre
    tone (piezo, 600,100); // si se cumple la condición, se activa el piezo
     }

  else
  {
    tmp=0; // si la distacia no es mayor que 20, cambiamos el valor de la variable temporal a 0 ( el servo motor regresa o gira al angulo 0) la puerta se cierra
  }  
  
delay (10); // esperar 10 milisegundos
servo1.write (tmp); // le vamos a decir al servo motor que gire la cantidad de grados que indique la variable temporal, que lea el valor y lo ejecute o aplique ( esto va variar si se cumple o no la distancia menor a 100
lcd.setCursor(1,1); // que el texto aparezca en la primera fila y en la primera columna de la LCD
lcd.print ("Distancia "); // que muestre el texto "Distancia
lcd.println(disCalculada); // Muestra el valor de la variable, imprime el valor de la variable disCalculada, osea la distancia que hay, la muestra en la pantalla
}
int calcularDistancia () // función de calcular distancia 
{
  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;


    }


El reto 2
El reto  consiste en que al abrir la puerta también debe encender una led y sonar una melodía




El código del reto:

#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1; // Constructor de la sentencia servo
LiquidCrystal lcd (8,9,4,5,6,7); // Definimos los pines con los que se va comunicar la LEd con la tarjeta arduino
int puertoservo =3; // Variable para mandar datos al servo 
int trig= 13;
int echo= 12;
//int piezo = 2; // Variable del pin del piezo
int grados; // variable para guardar los grados de ángulo del servo ( va guardar el angulo de giro del servo)
int tmp=0; // variable temporal para usar en la condicional
int pulsominimo=650; // variable que define el ángulo menor ó minimo que puede trabajar el servo
int pulsomaximo=2550;// variable que define el angulo mayor del servo
float disCalculada;
int pinRojo = 11;
const int piezo = 2;//se declara el pin de  salida parlante 
const int tonos[] = {2637, 2637, 2637,2093, 2637,3136, 1568, 3136, 1568, 1319, 1760, 1976};// los tonos que va a reproducir
const int countTonos = 12;// Contar tonos

void setup() 
{
  lcd.setCursor (4,1); // define que se ubica en la posición 4 de la fila 1 de la pantalla.
  lcd.print ("PRONIE");// muestra el texto PRONIE en la pantalla LCD, en la fila 1, anterior mencionada
  lcd.noBlink (); // que no parpadee la pantalla
  delay(2000); // esperar 2 segundos
 //------------------// 
servo1.attach (puertoservo,pulsominimo, pulsomaximo); // se indica que el servo motor, esta en el pin 3,(puertoservo) y cual es el punto minimo ó maximo que puede trabajar nuestro servo motor.
  pinMode (trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode (piezo, OUTPUT); // Se establece el piezo en modo salida
  pinMode (pinRojo, OUTPUT);
  Serial.begin (9600);
}

void loop() {
 disCalculada = calcularDistancia();
  grados=servo1.read();// guardamos en la variable grados el valor del angulo de giro del servo (guarda la lectura del angulo que reporta el servo motor
  Serial.println("--------");
  Serial.print("cm:");
  Serial.println(disCalculada);
  delay(200);
  if (disCalculada < 20 )//  Si
  { 
    tmp=100; // a la variable temporal le vamos a asignar un valor de 100, (si la distancia es menor que 20, guarde dentro de la variable temporal, que gire un angulo de 100 °grados
   digitalWrite(pinRojo, HIGH); 
      
  for (int iTono = 0; iTono < countTonos; iTono++)//Instrucción que permite cambiar de uno a uno los tonos a reproducir
  
 {
 tone(piezo, tonos[iTono]); //Instrucción que reproduce los tonos si la variable "tmp" es igual a 100
 delay(500);
  
    
     }
        }
     
       else

  {
    tmp=0; // si la distacia no es mayor que 20, cambiamos el valor de la variable temporal a 0 ( el servo motor regresa o gira al angulo 0.
  
  digitalWrite(pinRojo, LOW); 

  noTone(piezo); //Instrucción que apaga el parlante si la variable tmp es igual a cero
  }  
  
delay (10); // esperar 10 milisegundos
servo1.write (tmp); // le vamos a decir al servo motor que gire la cantidad de grados que indique la variable temporal, que lea el valor y lo ejecute o aplique ( esto va variar si se cumple o no la distancia menor a 100
lcd.setCursor(1,1); // que el texto aparezca en la primera fila y en la primera columna de la LCD
lcd.print ("Distancia "); // que muestre el texto "Distancia
lcd.println(disCalculada); // Muestra el valor de la variable, imprime el valor de la variable disCalculada, osea la distancia que hay, la muestra en la pantalla
}
int calcularDistancia () // función de calcular distancia 
{
  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;


    }


Problemas técnicos
- La conexión de la pantalla LCD, demasiados cables y en e vídeo no se veía muy claro la instalación
- Cuando ya realice la programación de la melodía, no me tiraba error de programación,  pero el programa se queda pegado dice sólo  compilando  y no se sube.

- Para el reto2, venían 2 ejemplos uno era con la  galería pitches , no explicaba como incluirla, me pareció más sencillo el ejemplo 2 que era sin incluir galería.

No hay comentarios:

Publicar un comentario