Programación "Puerta Automática"
#include
<LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);
servo1.attach
(puertoservo,pulsominimo,pulsomaximo);
disCalculada = calcularDistancia ();
Serial.println("----------");
Serial.println (disCalculada);
lcd.println(disCalculada);
digitalWrite (trig, LOW);
digitalWrite (trig, HIGH);
digitalWrite (trig, LOW);
duracion = pulseIn (echo, HIGH);
Puerta automática sensor ultrasónico.
Creamos la variable a utilizar.
Requiere de 4 conexiones, 2 para la alimentación eléctrica y 2 para
administrar el sensor. Una envía una onda electrónica a través del disparador
en este caso el “TRIG”. La otra recibe las ondas que recibe en el objetivo y se
llama echo y una variable que guarde el valor de dicha distancia la cual puede contemplar
decimales (float) disCalculada.
Se activan los eventos para el sensor .
Aquí se pone el pin 13 salida (tring)
Aquí se pone el pin 12 Entrada (echo).
Aquí invocamos un procedimiento que capture y procese los datos para luego
mostrarlos en el serial.
Puerta automática
o piezo.
Se crea una variable
con el nombre de piezo y le asignamos el número 2.
Establecemos el piezo
como elemento de salida.
Usamos la lógica computacional
para determinar si se cumple una condición o otra para eso se usa la condicional tipo SI
la cual compara si el valor de la distancia es menor a 100 cm; en base a esto
entonara un tono del piezo.
SINO cumple no
ejecutara ninguna instrucción por ultimo esperaremos 10 mini segundos
Puerta automática
servomotor.
Primero agregamos la librería
Servo.
Creamos la variable
Servo1.
Variable para mandar
puertoservo=( Int puertoservo=3;)
Variable para mandar
los grados de angulo del servo( Int grados;)
Variable tipo temporal
(Int tmp= 0);
Variable pulsominimo
=650; define el Angulo menor del servo y pulsomaximo= 2550 hace lo contrario
define el angulo mayor.
Aquí definimos cual es
el puerto, cual es el punto minimo y máximo de los angulos que puede trabajar
el servomotor.
Introducción
de la pantalla LCD.
Aquí se muestra la
distancia que reporta el servomotor.
Ella tiene 2 partes la primera es
la alimentación eléctrica la cual se le conecta a la protobor, luego viene la comunicación
con la pantalla LCD y requerimos de 6 conexiones o terminales las cuales van del pin 4 al 9 en la tarjeta arduino1
y en la pantalla LCD esos pines corresponden del pin 5 al 10.
1.
Agregamos la librería LiquidCristal.
2.
Definimos los pines en la tarjeta
arduino que controla la LCD. 4-5-6-7-8-9.
3.
Definimos que se ubique en la posición 4
de la fila 1 de la pantalla LCD . SetCursor (4,1).
4.
La palabra “PRONIE” Muestra el texto en
la pantalla LCD.
5.
LCD noBlink(); Le indica al LCD que no
parpadee.
Para poder ver la distancia que reporta el sensor ultrasónico en la
parte final del look LCD. Setcursor(1,1) la cual hace que el texto aparezca en
la primera fila y la primera columna, luego LCD print muestra la distancia, LCD Println
(discalculada); muestra el valor de la variable lo cual hace que se imprima en
la pantalla el valor de la variable.
El reto es el siguiente: Modificar la melodía del ejemplo por otra conocida y encender un led cada vez que se abren las puertas.
Reto 2
#define NO_SOUND 0 //
Hacer los descansos en la música.
#include
<pitches.h>//libreria para la melodía
#include
<LiquidCrystal.h> //librería para
LCD
#include
<LiquidCrystal.h>
#include
<Servo.h> //librería 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 través del disparador
int echo=12; // ondas que rebotan el objeto
float
disCalculada; // valor de distancia dada
int piezo=2;
int melodia[] = { //arreglo de notas musicales
Jaens Boon
/*NOTE_G4,NOTE_G4,NO_SOUND,NOTE_G4,NOTE_G4,NO_SOUND,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,
NOTE_B3,NOTE_G3,NOTE_C4,NOTE_G3,NOTE_CS4,NOTE_G3,NOTE_C4,NOTE_G3,NOTE_B3,NOTE_G3,NOTE_C4,NOTE_G3,NOTE_CS4,NOTE_G3,NOTE_C4,NOTE_G3,
NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_E4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_E4,NOTE_E4,NOTE_E4,*/
NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_E4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_E4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_DS5,NOTE_D5,NOTE_B4,NOTE_A4,NOTE_B4,
NOTE_E4,NOTE_G4,NOTE_DS5,NOTE_D5,NOTE_G4,NOTE_B4,
NOTE_B4,NOTE_FS5,NOTE_F5,NOTE_B4,NOTE_D5,NOTE_AS5,
NOTE_A5,NOTE_F5,NOTE_A5,NOTE_DS6,NOTE_D6,NO_SOUND
};
Duración de la nota:
1 = nota completa, 2 = nota media, 4 = nota negra, 8 = nota octava, etc.
int noteDurations [] = {/*8,8,2,8,8,2,16,8,16,8,8,
2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,
8,16,16,8,4,8,8,8,
8,16,16,8,4,8,8,8,*/
8,16,16,8,4,8,8,8,
8,16,16,8,4,8,8,8,
8,16,16,8,4,8,8,8,
8,16,16,8,4,8,8,8,
8,2,8,8,1,
8,4,8,4,8,8,
8,8,4,8,4,8,
4,8,4,8,3
};
void setup() {
pinMode(trig, OUTPUT);
lcd.setCursor(4,1); //define q se ubique en la posición 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/noteDurations[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
}
Nota:
El reto consiste en modificar la melodía del ejemplo por otra conocida y encender un led cada vez que se abre las puertas .
El arreglo musical es Jeans Boon el cual incorporamos a nuestro montaje en la placa del prototipo.
Utilizamos un buzzer o zumbador el cual recibe las instrucciones necesarias para convertirlos en melodías.