Práctica dirigida 2 "Puerta automática"
Prototipo para activar puertas automáticas
Con la práctica dirigida #2 aprendí a programar otros sensores y actuadores incluidos en Arduino.
Se programan sensores como el ultrasónico, con su entrada y salida de datos para captar el sonido como lo hacen los murciélagos, una pantalla que envía información que recibe según la distancia del sensor ultrasónico, proyectándola en la LCD y el piezo que emite sonidos de acuerdo al tono programado y cuando detecta la presencia de algo a menos de 100 cm.
Programa de la práctica dirigida2
#include <LiquidCrystal.h> //Se incluyen las librerias para la lcd y el motor
#include <Servo.h>
Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7);
//Se crean Las variables para los sensores y actuadores
int v=-1;
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;
//Se inicia el programa
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.println("Grados :");
Serial.println(grados);
delay (200);
Serial.println("-----------");
Serial.print ("cm :");
Serial.println(disCalculada);
delay (200);
if (disCalculada < 100)
{
tmp=100;
tone (piezo, 200, 200);
}
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;
}
VIDEO DE LA PRÁCTICA DIRIGIDA 2
Reto Puerta automática con música al abrir
Con este reto, se cambia el tono generado por el piezo y se incluyen otros tonos para poder escuchar música o melodías mientras la puerta automática se abre, además se enciende un led, mientras la música suena.
Programa para el reto
#include <LiquidCrystal.h> //Se incluyen las librerías para la lcd y el motor
#include <Servo.h>
Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7);
//Se declaran las variables
int pinRojo = 11;
int v=-1;
int puertoservo =3;
int trig = 13;
int echo = 12;
int piezo = 2;
int grados;
int pulsominimo=650;
int pulsomaximo=2550;
float disCalculada;
//Se realizan las variables para las notas musicales
int c[5]={131,262,523,1046,2093}; // frecuencias 4 octavas de Do
int cs[5]={139,277,554,1108,2217}; // Do#
int d[5]={147,294,587,1175,2349}; // Re
int ds[5]={156,311,622,1244,2489}; // Re#
int e[5]={165,330,659,1319,2637}; // Mi
int f[5]={175,349,698,1397,2794}; // Fa
int fs[5]={185,370,740,1480,2960}; // Fa#
int g[5]={196,392,784,1568,3136}; // Sol
int gs[5]={208,415,831,1661,3322}; // Sol#
int a[5]={220,440,880,1760,3520}; // La
int as[5]={233,466,932,1866,3729}; // La#
int b[5]={247,494,988,1976,3951}; // Si
void nota(int a, int b); // Se declara una función auxiliar para recibir números enteros
void setup()
{
lcd.setCursor(4,1);
lcd.print("PUERTA-UPSGB");
lcd.noBlink();
delay(2000);
servo1.attach (puertoservo,pulsominimo,pulsomaximo);
pinMode(pinRojo, OUTPUT);
pinMode (trig, OUTPUT);
pinMode (echo, INPUT);
pinMode (piezo, OUTPUT);
Serial.begin (9600);
}
void nota(int frec, int t) //se crea metodo para la nota
{
digitalWrite(pinRojo, HIGH); // Se enciende el led rojo
tone(piezo,frec); // suena la nota frec recibida
delay(t); // para despues de un tiempo t
}
void silencio(int t) //se crea metodo para el tiempo
{
digitalWrite(pinRojo, LOW); //se apaga el led
noTone(piezo);
delay(t);
}
void loop()
{
disCalculada = calcularDistancia();
grados=servo1.read();
Serial.println("Grados :");
Serial.println(grados);
Serial.println("-----------");
Serial.print ("cm :");
Serial.println(disCalculada);
lcd.setCursor(1,1);
lcd.print("Distancia");
lcd.println(disCalculada);
//Si el sensor ultrasónico capta distancia menor a 100 el motor gira 90 grados y suena la melodía
if (disCalculada < 100)
{
servo1.write (90);
//Se colocan las notas musicales para la melodía: entre dos aguas.
nota(a[1],400);silencio(400);
nota(e[1],400);silencio(400);
nota(a[1],400);silencio(200);
nota(e[1],200);silencio(200);
nota(a[1],200);silencio(200);
nota(as[1],100);silencio(100);
nota(b[1],400);silencio(400);
nota(fs[1],400);silencio(400);
nota(b[1],400);silencio(200);
nota(fs[1],200);silencio(200);
nota(b[1],200);silencio(200);
nota(as[1],100);silencio(100);
nota(a[1],400);silencio(400);
nota(e[1],400);silencio(400);
nota(a[1],400);silencio(400);
// Sino el led rojo queda apagado y el motor regresa a 0 grados
}
else
{
digitalWrite (pinRojo, LOW);
servo1.write (0);
}
delay (1000); ////*****con 500 no se detiene
}
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;
}
VIDEO DEL reto
Problemas técnicos durante el desarrollo de la práctica
dirigida o el reto, y las soluciones.
Cuando estaba realizando la práctica dirigida 2, paso a paso, no me funcionaba el segundo programa, pero era porque lo metí dentro del setup, al separarlo, ya funcionó correctamente.
En el reto no encontré la libraría para poder descargar las notas, lo que hice fue buscar otros ejemplos en internet y así pude lograr el reto sin la librería.