Reto
28-02-18
Aquí les presento el RETO , de la Práctica Dirigida 2 que consiste en Sistema de puertas automáticas que se abren cuando detectan una persona, pero se le debe de incluir una melodía y un led que se enciende cuando esto sucede.
Código del programa del RETO
//sensor ultrasonico
//Parlante
//Servomotor
#include <LiquidCrystal.h>
#include <Servo.h>
/*************************************************
* Public Constants
*************************************************/
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
#define pau 2500
Servo servo1; //contructor de la sentencia servo
LiquidCrystal lcd(8,9,4,5,6,7); // Definimos los pines en la tarjeta Arduino que controlan la LCD
int v=-1;
int puertoservo = 3; // Variable para mandar datos al servo
int trig = 13; // TRIGGER en el pin 13
int echo = 12; // ECHO en el pin 12
//int piezo = 2; // Parlante del pin 2
int grados; //Variable para guardar los grados del ángulo del servo
int tmp=0; //Variable temporal para usar en la condicional
int pulsominimo=650; //Variable que define el ángulo menor del servo
int pulsomaximo=2550; // Variable que define el ángulo mayor del servo
int pinRojo = 10; /*Variable para el LED rojo*/
//---------------------------------
const int pinBuzzer = 2;
const int tonos[] = {262,262,294,262,392,349,262,262,294,262,392,349,262,262,262,440,349,349,330,494,494,440,349,392,349};
int noteDurations[] = {3,3,3,3,3,1,3,3,3,3,3,1,3,3,3,3,3,3,3,2,2,3,3,3,1};
const int countTonos = 25;
float disCalculada; // Variable que guarda el valor de dicha distancia
void setup() {
lcd.setCursor(4,1); //Definimos que se ubique 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 indicacmos al LCD que no parpadee
delay(2000); //esperamos 2 segundos
//Indicamos al servo motor, cual pin nos va a comunicar y cual es el angulo menor y mayor
servo1.attach (puertoservo,pulsominimo,pulsomaximo);
//----------------//
pinMode(trig,OUTPUT); //Inicializamos el TRIGGER como pin de salida
pinMode(echo,INPUT); //Inicializamos el ECHO como pin de ENTRADA
pinMode(pinBuzzer,OUTPUT); //Inicializamos el piezo modo de salida
pinMode(pinRojo, OUTPUT);
//----------------//
Serial.begin(9600);
}
void loop()
{
disCalculada = calcularDistancia();
grados=servo1.read(); //Guardamos en la variable grados el valor del angulo de giro del servo
Serial.println("-----------"); //cambio de línea
Serial.print("cm:");
Serial.println(disCalculada);
delay(400);
if (disCalculada < 100) //condicional SI
{
tmp=100;//a la variable temporal le asignamos un valor de 50
//------------------
for (int iTono = 0; iTono < countTonos; iTono++)
{
digitalWrite(pinRojo, HIGH);
int noteDuration = 1000 / noteDurations[iTono];
//tone(piezo, 600,199); // se activa el parlante si se cumple la condicion
tone(pinBuzzer, tonos[iTono], noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
//delay(200);
}
noTone(pinBuzzer);
delay (1000);
}
else
{
tmp=0; // si la condicion no se cumple, cambiamos el valor de la variable temporal a 0
digitalWrite(pinRojo, LOW); // turn the LED off by making the voltage LOW´0
}
delay (10); //esperamos 10 milisegundos
servo1.write (tmp); //ahora vamos a girar los grados que esten guardados en la variable temporal
lcd.setCursor(1,1); //Posicionamos el curso en la fila 1, posición 1
lcd.print("Distancia: "); //Mostramos la palabra distancia
lcd.println(disCalculada); //Mostranos el valor de la variable
}
int calcularDistancia()
{
long distancia; //Calculo de la distancia basado en el principio que indica
long duracion; // que el sonido recorre 343 mts x segundo luego de esto
digitalWrite (trig, LOW); // se convierte a un 1 centímetro por microsegundos, luego
delayMicroseconds (4); // se aplica la regla de tres entre distancia y duración y se
digitalWrite (trig, HIGH); // obtinen que para la distancia necesitamos dividir duración
delayMicroseconds (10); // entre 29
digitalWrite (trig, LOW);
duracion=pulseIn (echo, HIGH);
duracion=duracion/2;
distancia=duracion/29;
return distancia;
}
VIDEO







0 comentarios:
Publicar un comentario