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.

domingo, 18 de febrero de 2018

Prototipos de alarma




Programación:  Sistema de alarmas

Programación del sistema de luces de la alarma.

practica

int pinRojo = 3;
int pinAzul = 5;
int piezo = 6;
int boton = 2;
int estado = 0;

void setup()
{
  pinMode(pinRojo, OUTPUT);
  pinMode(pinAzul, OUTPUT);
  pinMode(piezo, OUTPUT); 
  pinMode(boton, INPUT);
  Serial.begin (9600);
}

void loop()
{
   while (digitalRead(boton)==0)
  {
analogWrite(pinRojo,HIGH); 
analogWrite(pinAzul,LOW);
delay (100);
analogWrite(pinRojo,LOW); 
analogWrite(pinAzul,HIGH);
delay (100);
tone (piezo, 300, 100);
Serial.println(digitalRead(boton));
delay(100);
 }

 while (digitalRead(boton)==1)

 {
analogWrite(pinRojo,LOW); 
analogWrite(pinAzul,LOW);
Serial.println(digitalRead(boton));
 }
}


Nota
No puedo hacer la explicación en el vídeo porque me queda muy pesado y no me deja subirlo. Lo intente varias veces y lo comprimí pero aún así no se pude.

Explicación de la programación de prototipos de alarmas

Si presiono el botón el piezo queda en silencio y los LEDS dejan de encender.

En esta práctica dirigida programamos los LEDS con las variables  rojo y azul, piezo, botón y estado.

También definimos los puertos de salida de arduino (OUTPUT);  a las variables pinRojo, pinAzul, piezo,botón y estado.

Y por ultimo  el procedimiento base para  encender y apagar los LEDS 

Si apretó el botón el piezo deja de sonar y los  LEDS se apagan.



 Reto 1
Controlar que la alarma suene solo  cuando detecte movimiento.


//set pin numbers

const int ledPin =13;
const int buzzerPin =12;
const int ldrPin = A0;

void setup() {
  Serial.begin (9600);

  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(ldrPin, INPUT);

 }

void loop() {

int ldrStatus = analogRead(ldrPin); // read the state of the LDR value

if (ldrStatus >= 400) { 

       tone (buzzerPin,100);
       digitalWrite(ledPin,HIGH);
       delay(100);

       noTone (buzzerPin);
       digitalWrite(ledPin,LOW);
       delay(100);

       Serial.println("-----------ALARM ACTIVATED----------");

       }

else {
  noTone (buzzerPin);
  digitalWrite(ledPin,LOW);

  Serial.println("ALARM DEACTIVATED");
   }
 
 }
  

Explicación de la programación  del reto 1

Controlar que la alarma suene solo cuando detecte movimiento.

Al tocar la fotocelda ella detecta movimiento haciendo que el leds se active y emita un sonido por medio del piezo  al soltar   o alejarme de la fotocelda el led se desactiva porque ya no detecta movimiento. 

Iniciamos con las variables que nos interesan 
Variables constantes declaradas en pin 12 y pin 13 y asigna  const int ldrPin = A0;    un valor inicial igual a 0.

El la programación definimos los puertos de salida y entrada de datos.
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(ldrPin, INPUT);


Y la parte de procedimientos donde la alarma se activa cuando detecta movimiento y desactiva cuando no hay ningún tipo de movimiento.


    digitalWrite(ledPin,HIGH);// Asigna el valor de alto del pin.
 delay(100); // espera 1 segundo


 digitalWrite(ledPin,LOW);//Asigna el valor bajo del pin.
       delay(100); espera 1 segundo




martes, 13 de febrero de 2018

Prototipos interactivos 2





En este álbum, estaremos registrando nuestros aprendizajes, logros, productos  y dificultades, incluyendo las evidencias de cada uno de los ejercicios propuestos en las unidades del curso.