9-3-2018
Programaciรณn Alarma para lavado de manos
Elieth ESCUELA: SAN RAFAEL
#include <LiquidCrystal.h> //Se ponen las librerĂas para la lcd y el motor #include <Servo.h> Servo servo1; LiquidCrystal lcd(8,9,4,5,6,7); int pinVerde = 11; int pinRojo = 10;//VARIABLES int v=-1; int puertoservo =3; int trig = 13; int echo = 12; int Zumbador = 2; int grados; int pulsominimo=650; int pulsomaximo=2550; float disCalculada; //Se hacen las variables para las notas musicales int c[5]={131,262,523,1046,2093}; octavas de Do
// frecuencias 4
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("MANOS"); lcd.noBlink(); delay(2000); servo1.attach (puertoservo,pulsominimo,pulsomaximo); pinMode(pinRojo, OUTPUT); pinMode(pinVerde, OUTPUT); pinMode (trig, OUTPUT); pinMode (echo, INPUT); pinMode (Zumbador, OUTPUT); Serial.begin (9600); } void nota(int frec, int t) //se crea método para la nota { digitalWrite(pinRojo, HIGH); digitalWrite(pinVerde, HIGH); // Se encienden los led tone(Zumbador,frec); delay(t);
// da las nota frecuencia tocada
// logo de un tiempo t
} void silencio(int t)
// metodo para el tiempo
{ digitalWrite(pinRojo, LOW); digitalWrite(pinVerde, LOW); //se apaga los led noTone(Zumbador); 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 100 grados y suena la melodía if (disCalculada < 150) { servo1.write (2000); //Se colocan las notas musicales para la melodía nota(b[1],150);noTone(Zumbador);delay(50); nota(d[2],900);noTone(Zumbador);delay(100); nota(a[1],1200);noTone(Zumbador);delay(2000); nota(a[1],150);noTone(Zumbador);delay(50); nota(g[2],900);noTone(Zumbador);delay(150); nota(d[2],900);noTone(Zumbador);delay(100); nota(c[2],150);noTone(Zumbador);delay(15); nota(b[1],150);noTone(Zumbador);delay(150); nota(d[2],900);noTone(Zumbador);delay(90); nota(c[2],150);noTone(Zumbador);delay(50); nota(b[1],150);noTone(Zumbador);delay(50); nota(c[2],150);noTone(Zumbador);delay(50); nota(a[1],1200);noTone(Zumbador);delay(2000); nota(b[1],150);noTone(Zumbador);delay(50); nota(c[2],150);noTone(Zumbador);delay(50);
// }
else { digitalWrite (pinRojo, LOW); digitalWrite (pinVerde, LOW); servo1.write (0); } delay (1500); } 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; }