Vídeo práctica dirigida 2
Indicaciones
Desarrollar la Práctica
dirigida 2: "Puerta automática" para ello es necesario:
· Ejecutar la primera parte de la práctica, mediante el vídeo Puerta automática - sensor
ultrasónico
· Programar el sonido de la puerta, tomando en cuenta lo expuesto en el
vídeo Puerta automática - piezo
· Agregar el motor a la puerta automática, mediante el contenido mostrado
en el vídeo Puerta automática - servomotor
· Construir el prototipo con el Arduino UNO, siguiendo la ayuda del
Vídeo Puerta automática - LCD
Síntesis de la Programación
Práctica dirigida 2
#include <LiquidCrystal.h> // librería de
la pantalla LCD
#include <Servo.h> // librería
del servo motor
Servo servo1; // es la
variable para mandar datos al servo
LiquidCrystal lcd(8,9,4,5,6,7); //conexión de
los pines de la LCD a la tarjeta Arduino
int v=-1;
int puertoservo =3; // conexión
del servo motor
int trig = 13; // variables de envía y recibe
ondas
int echo = 12; // recibe las
ondas que revotan en el objeto.
int piezo = 2; // variable
del pin piezo
int pulsominimo =650; // define el
ángulo mínimo para que trabaje el servomotor
int pulsomaximo=2550; // define el
ángulo máximo para que trabaje el servomotor
int tmp=0; // variable
temporal que almacena los ángulos del servo motor.
int grados; // guarda los
grados de giro de ángulo del servomotor
float disCalculada; // variable disCalculada guarda el
valor de dicha distancia, se usa para decimales.
void setup()
{
lcd.setCursor(4,1); // definimos
que se ubique en la posición 4 de la fila 1 de la pantalla
lcd.print("PRONIE");
lcd.noBlink();
// para que el LCD no parpadee
delay(2000);
//-------------------//
servo1.attach (puertoservo, pulsominimo, pulsomaximo);
//-------------------//
pinMode (trig,
OUTPUT);
pinMode (echo, INPUT);
pinMode (piezo, OUTPUT); //Establecemos el piezo en modo
salida.
//-------------------//
Serial.begin (9600);
}
void loop()
{
disCalculada = calcularDistancia ();
grados =servo1.read();
Serial.print ("Grados :");
Serial.println (grados);
delay (200);
Serial.println ("--------");
// línea que divide la lectura.
Serial.print ("cm :"); // salto
al siguiente renglón las palabras aparecen en la misma línea.
Serial.println (disCalculada);
delay (200);
if (disCalculada) < 100) // Condicional si disCalculada es
menor que 100.
{
tmp=100; //
tone (piezo, 600,100); // se activa el piezo si se cumple
la condición.
}
else
{
tmp=0;
}
delay (10); // esperaremos
10 milisegundos
servo1.write(tmp);
lcd.setCursor(1,1); // direccionamos
el cursor en la fila1, posición1.
lcd.print("Distancia");
// indica la distancia calculada en la LCD
lcd.println(disCalculada); // imprime en la pantalla el valor
de la variable.
}
int calcularDistancia ()
{
long distancia; //calcula la
distancia basada en el principio que el sonido recorre 343 metros por segundos.
long duración;
digitalWrite (trig, LOW);
delayMicroseconds (4); // La espera se
convierte a un 1 centímetro por microsegundos.
digitalWrite (trig, HIGH);
delayMicroseconds (10);
digitalWrite (trig, LOW);
duracion = pulseIn (echo, HIGH);
duracion = duracion/2;
distancia = distancia/29; //Para obtener la distancia
necesitamos dividirla entre 29.
return distancia; //valor de retorno de la función.
}
Vídeo Reto 2
Puertas
automáticas el cual consiste en agregar una nueva melodía y un led que se
encienda al detectar el movimiento y apague.
Síntesis de la Programación
Reto 2
#include "pitches.h" // librería de tonos o melodías
#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7);
int v=-1;
int puertoservo = 3;
int grados;
int tmp =0;
int pulsominimo=650;
int pulsomaximo=2550;
int trig = 13;
int echo = 12;
float disCalculada;
int piezo = 2;
int melody[] = { // Variable melodía con las notas a utilizar.
NOTE_C4, NOTE_F2, NOTE_G3, NOTE_A3, NOTE_E2, 0, NOTE_B3, NOTE_C4 };
int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 }; // variable duración de las notas o tiempo.
int pinAzul = 11;
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(pinAzul, 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;
digitalWrite(pinAzul, HIGH);
// tone (piezo, 2600, 300);
for (int thisNote = 0; thisNote < 8; thisNote++) { //Variable para esta nota
int noteDuration = 1000 / noteDurations[thisNote]; //Tiempo de las notas
tone(piezo, melody[thisNote], noteDuration);
int pauseBetweenNotes = noteDuration * 1.30; //Pausas de las notas
delay(pauseBetweenNotes);
noTone(8);
}
}
else
{
tmp=0;
digitalWrite(pinAzul, LOW);
}
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;
}
No hay comentarios:
Publicar un comentario