

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;
}
No hay comentarios:
Los comentarios nuevos no están permitidos.