Reto 2

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