Práctica Dirigida 2

 


La Práctica Dirigida 2, trata de obtener la distancia de un Sensor Ultrasónico, la cual se utilizará para activar el giro de Servomotor, un sonido por medio de un Piezo y se mostrará dicha información en una pantalla LCD  y en el Monitor Serial de Arduino.
En este reto se simula la apertura de una puerta automatizada, que al detectar la presencia de alguien se abre y posteriormente se cierra.


Para ello se utilizó la siguiente programación:

Código Utilizado:


#include <LiquidCrystal.h>
#include <Servo.h>

Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7);

int puertoservo = 3;
int trig = 13;
int echo = 12;
int piezo = 2;
int grados;
int tmp=0;
int pulsominimo=650;
int pulsomaximo=2550;.
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);
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=100;
  tone (piezo, 600, 100);
}
else
{
  tmp=0;
}
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;
}

Vídeo Práctica 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.

Código:

#include <LiquidCrystal.h>
#include <Servo.h>

Servo servo1; //Constructor de la setencia del servo.
LiquidCrystal lcd(8,9,4,5,6,7);

int puertoservo = 3; //variable para madar datos al servo
int trig = 13;
int echo = 12;
int piezo = 2;
int grados; //Variable para guardar los grados de ángulo del servo
int tmp=0; //Variable temporar para usar en la condicional.
int pulsominimo=650; //Variable que define el ángulo menor del servo
int pulsomaximo=2550; //Varible que define el ángulo mayor del servo.
int pinAzul=11;
float disCalculada;


void setup() {
  lcd.setCursor(4,1); //Definimos que se ubica en la posición 4 de la fila uno en la pantalla
  lcd.print ("PRONIE"); //Mostramos la palabra PRONIE en la posición anterior
  lcd.noBlink(); //Le indicamos al LCD que no parpadee
  delay(2000);
servo1.attach (puertoservo,pulsominimo,pulsomaximo);
pinMode (trig, OUTPUT);
pinMode (echo, INPUT);
pinMode (piezo,OUTPUT);
pinMode (pinAzul,OUTPUT);
Serial.begin (9600);
}

void loop() {
disCalculada = calcularDistancia();
grados=servo1.read();//Guardamos en la variable grados el valor del ángulo de giro del servo
Serial.print ("Grados :");
Serial.println (grados);
delay (200);
Serial.println ("--------");
Serial.print ("cm: ");
Serial.println (disCalculada);
delay (200);


if (disCalculada < 100)
{
  tmp=100; //Asigna a variable temporal un valor de 100
  tone (piezo, 2000, 100);
  digitalWrite (pinAzul, HIGH);
  delay (100);
}
else
{
  tmp=0; //Si la condición no se cumple,asignamos valor de 0
}
delay (10);
servo1.write (tmp); //Girar grados almacenados en variable temporal
lcd.setCursor (1,1); //Posicionamos el cursor en la fila 1, posición 1
lcd.print ("Distancia "); //Muestra leyenda Distancia.
lcd.println (disCalculada); //Mostramos el valor de la variable
digitalWrite (pinAzul, LOW);
delay (100);
}
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;
}


Vídeo Solución a Reto 2:


No hay comentarios: