jueves, 8 de marzo de 2018








Plantilla de proyecto final: Implementación
  

Proyecto final


Dispositivo de Alarma automática sensor ultrasonico que se activa con la aproximación de un objeto o persona.









Programación




#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7);
int puertoservo =3;
int trig = 13;
int echo = 12;
int piezo = 2;
int grados;
int tmp=0;
int pulsominimo=650;
int pulsomaximo=2550;
float disCalculada;
void setup()
{
  lcd.setCursor(4,1);
  lcd.print("PRONIE");
  lcd.noBlink();
  delay(2000);
  servo1.attach (puertoservo,pulsominimo,pulsomaximo);
pinMode (trig, OUTPUT);
 pinMode (echo, INPUT);
 pinMode (piezo, OUTPUT);
Serial.begin (9600);
}
void loop()
{

disCalculada = calcularDistancia ();
grados=servo1.read();
Serial.println("----------");
Serial.print("cm  :");
Serial.println (disCalculada);
delay (200);
if (disCalculada < 100) 
{
tmp=100;
tone (piezo, 600, 100);
}
 else
 {
  tmp=0;
 }
  delay (10);
  servo1.write(tmp);
 lcd.setCursor(1,1);
 lcd.print("Distancia");
  lcd.println(disCalculada);
  }
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;
 }



lunes, 5 de marzo de 2018

"Puerta automática"


Programación "Puerta Automática"



#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7);
int puertoservo =3;
int trig = 13;
int echo = 12;
int piezo = 2;
int grados;
int tmp=0;
int pulsominimo=650;
int pulsomaximo=2550;
float disCalculada;

void setup()
{
  lcd.setCursor(4,1);
  lcd.print("PRONIE");
  lcd.noBlink();
  delay(2000);
  servo1.attach (puertoservo,pulsominimo,pulsomaximo);
pinMode (trig, OUTPUT);
 pinMode (echo, INPUT);
 pinMode (piezo, OUTPUT);
Serial.begin (9600);
}

void loop()
{
 
disCalculada = calcularDistancia ();
grados=servo1.read();
Serial.println("----------");
Serial.print("cm  :");
Serial.println (disCalculada);
delay (200);
if (disCalculada < 100)  
{
tmp=100;
tone (piezo, 600, 100);
}
 else
 {
  tmp=0;
 }
  delay (10);
  servo1.write(tmp);
 lcd.setCursor(1,1);
 lcd.print("Distancia");
  lcd.println(disCalculada);
 
  }
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;

   }




Nota:
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.

En el Void Setup.
Se activan los eventos para el sensor .
Aquí se pone el pin 13 salida (tring)
Aquí se pone el pin 12 Entrada  (echo).

Void Loop.

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.

Void Setup.
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.

Puerta automática LCD

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.