Consiste en un sistema que permite a las puertas automáticas, activarse cuando se detecta una persona en la entrada, en este caso en particular el sistema permite activarse cuando se detecta movimiento frente al sensor ultrasonico, produciendo un sonido en el piezo y activando un servomotor, mostrando a su vez en la pantalla LCD la distancia en la cual el objeto es detectado.
#include <LiquidCrystal.h> //libreria de la pantalla LCD
#include <Servo.h> //Libreria del servo
Servo servo1;
LiquidCrystal lcd(10,9,4,5,6,7); //pines de tarjeta Arduino q controlan LCD
int v=1;
int puertoservo=3; //manda datos al servo
int grados; //guarda los grados del angulo servo
int tmp=0; // para usar en la condicional
int pulsominimo=650; //define el angulo menor del servo
int pulsomaximo=2550; //define el angulo mayor del servo
int trig=13;
int echo=12;
float disCalculada;
int piezo=2; //pin del piezo
void setup() {
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(piezo, OUTPUT);
Serial.begin(9600);
servo1.attach(puertoservo,pulsominimo,pulsomaximo);
lcd.setCursor(4,1); //ubica en posicion 4 de la fila Uno
lcd.print("PRONIE");
lcd.noBlink(); //LCD no parpadee
delay(2000);
}
int calcularDistancia() //funcion retorna un valor
{
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;
}
void loop() {
disCalculada=calcularDistancia();
grados=servo1.read();
Serial.print("grados: ");
Serial.println(grados);
delay(200);
Serial.println("--------");
Serial.print("cm: ");
Serial.print(disCalculada);
delay(200);
if (disCalculada<100) //se activa el piezo
{ tmp=100;
tone(piezo,600,100);
}
else
{ tmp=0;
}
delay(10);
servo1.write(tmp);
lcd.setCursor(1,1); //cursor en fila 1 posicion 1
lcd.print("Distancia: ");
lcd.println(disCalculada); //muestra valor de variable
}
Vídeo de Practica Dirigida 2
Reto 2
Modificar la melodía del ejemplo anterior por otra conocida y encender un led cada vez que se abran las puertas.
Código del Reto
Código del Reto
#include <pitches.h> //libreria para la melodia
#include <LiquidCrystal.h> //libreria para LCD
#include <LiquidCrystal.h>
#include <Servo.h> //libreria para servomotor
Servo servo1;
LiquidCrystal lcd(10,9,4,5,6,7);
int v=1;
int luzled=11;
int puertoservo=3;
int grados; // guarda los grados de angulo del servo
int tmp=0; // temporal para usar en la condicional
int pulsominimo=650; //define el angulo menor del servo
int pulsomaximo=2550; // define angulo mayor del servo
int trig=13; //onda a traves del disparador
int echo=12; // ondas que rebotan el el objeto
float disCalculada; // valor de distancia dada
int piezo=2;
int melodia[] = { //arreglo de notas musicales
NOTE_E7, NOTE_E7, 0, NOTE_E7, 0, NOTE_C7, NOTE_E7, 0, NOTE_G7, 0, 0, 0, NOTE_G6, 0, 0, 0,
NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0,
NOTE_G6, NOTE_E7, NOTE_G7, NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0,
NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0,
NOTE_G6, NOTE_E7, NOTE_G7, NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0
};
int duracion[] = { //arreglo de tiempos entre cada nota musical
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
8, 8, 8, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
8, 8, 8, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
};
void setup() {
pinMode(trig, OUTPUT);
lcd.setCursor(4,1); //define q se ubique en la posicion 4 de la fila uno en la pantalla
lcd.print("PRONIE ");
lcd.noBlink(); // indicamos que no parpadee
delay(1000);
servo1.attach(puertoservo,pulsominimo,pulsomaximo);
pinMode(echo,INPUT);
pinMode(piezo, OUTPUT);
pinMode(luzled, OUTPUT);
Serial.begin(9600);
}
int calcularDistancia(){ //esta funcion calcula la distancia que precibe el sensor
long distancia;
long duracion;
digitalWrite(trig, LOW);
delayMicroseconds(4);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
duracion=pulseIn(echo,HIGH);
distancia=duracion/50;
return distancia;
}
void loop() {
disCalculada=calcularDistancia(); //calcula distancia y almacena en disCalculada
grados=servo1.read();
Serial.print("Grados: ");
Serial.println(grados);
delay(200);
Serial.println("--------");
Serial.print("cm: ");
Serial.println(disCalculada);
delay(200);
if (disCalculada<10) //si el sensor detecta un objeto a menos de 100cm
{
tmp=100;
//tone (piezo, 600, 100);
digitalWrite(luzled,HIGH);
for(int nota=0; nota<70; nota++) //recorre el arreglo
{
int tiempo=1000/duracion[nota];
tone(piezo,melodia[nota],tiempo); //se reproduce la nota del arreglo
int pausa=tiempo*1.30;
delay(pausa);
noTone(piezo); //se silencia el piezo
}
}
else
{tmp=0;
digitalWrite(luzled, LOW);
//tone (piezo, 0, 0);
}
delay(10);
servo1.write(tmp);
lcd.setCursor(1,1); //pone cursor en fila 1 posicion 1
lcd.print("distancia ");
lcd.println(disCalculada); //valor de la variable
}
Video del reto
Problemas Técnicos y soluciones
1. El primer problema técnico fue que no se muestra claro en el vídeo como va la conexión de cables en el servomotor y cuando los coloque no funcionaba, entonces fui a investigar y me di cuenta que el cable marrón va al polo negativo, el cable rojo va al polo positivo y el cable amarillo al pin que se desea conectar.
2. Otro problema técnico es que no encontraba la librería pitches para la melodía, entonces al investigar me di cuenta que había que buscarla de Internet y bajarla para luego agregarla como zip.
No hay comentarios:
Publicar un comentario