jueves, 1 de marzo de 2018

PRACTICA DIRIGIDA 2


Práctica dirigida 2 "Puerta automática" 

Prototipo para activar puertas automáticas

Con la práctica dirigida #2  aprendí a programar otros  sensores y actuadores incluidos en Arduino.
Se programan sensores como el ultrasónico, con su entrada y salida de datos para captar el sonido como lo hacen los murciélagos, una pantalla  que envía información que recibe según la distancia del sensor ultrasónico, proyectándola en la LCD y el piezo que emite sonidos de acuerdo al tono programado y cuando detecta la presencia de algo a menos de 100 cm.

Programa de la práctica dirigida2

#include <LiquidCrystal.h> //Se incluyen las librerias para la lcd y el motor
#include <Servo.h>
Servo servo1; 
LiquidCrystal lcd(8,9,4,5,6,7);

//Se crean Las variables para los sensores y actuadores
int v=-1;
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;
//Se inicia el programa
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("Grados :");
  Serial.println(grados);
  delay (200);
  Serial.println("-----------");
  Serial.print ("cm :");
  Serial.println(disCalculada);
  delay (200);
  if (disCalculada < 100)
  {
    tmp=100;
    tone (piezo, 200, 200);
  }
    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;
}

VIDEO DE LA PRÁCTICA DIRIGIDA 2



Reto Puerta automática con música al abrir

Con este reto, se cambia el tono generado por el piezo y se incluyen otros tonos para poder escuchar música o melodías mientras la puerta automática se abre, además se enciende un led, mientras la música suena.

Programa para el reto

#include <LiquidCrystal.h> //Se incluyen las librerías para la lcd y el motor
#include <Servo.h>
Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7);

//Se declaran las variables
int pinRojo = 11;
int v=-1;
int puertoservo =3;
int trig = 13;
int echo = 12;
int piezo = 2;
int grados;
int pulsominimo=650;
int pulsomaximo=2550;
float disCalculada;

//Se realizan las variables para las notas musicales
int c[5]={131,262,523,1046,2093};       // frecuencias 4 octavas de Do
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("PUERTA-UPSGB");
  lcd.noBlink();
  delay(2000);
  
  servo1.attach (puertoservo,pulsominimo,pulsomaximo);
  
  pinMode(pinRojo, OUTPUT);
  pinMode (trig, OUTPUT);
  pinMode (echo, INPUT);
  pinMode (piezo, OUTPUT);
  Serial.begin (9600);
}

void nota(int frec, int t) //se crea metodo para la nota
{
    digitalWrite(pinRojo, HIGH); // Se enciende el led rojo
    tone(piezo,frec);      // suena la nota frec recibida
    delay(t);                // para despues de un tiempo t
}

void silencio(int t)     //se crea metodo para el tiempo
{
  digitalWrite(pinRojo, LOW); //se apaga el led
  noTone(piezo);
  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 90 grados y suena la melodía
  if (disCalculada < 100)
  {    
    servo1.write (90);
    
//Se colocan las notas musicales para la melodía: entre dos aguas.
   
    nota(a[1],400);silencio(400);
    nota(e[1],400);silencio(400);
    nota(a[1],400);silencio(200);
    nota(e[1],200);silencio(200);
    nota(a[1],200);silencio(200);
    nota(as[1],100);silencio(100);
    nota(b[1],400);silencio(400);
    nota(fs[1],400);silencio(400);
    nota(b[1],400);silencio(200);
    nota(fs[1],200);silencio(200);
    nota(b[1],200);silencio(200);
    nota(as[1],100);silencio(100);
    nota(a[1],400);silencio(400);
    nota(e[1],400);silencio(400);
    nota(a[1],400);silencio(400); 
    
    // Sino el led rojo queda apagado y el motor regresa a 0 grados
  }
    else
    {
         digitalWrite (pinRojo, LOW);
         servo1.write (0);   
  }
  delay (1000); ////*****con 500 no se detiene 
}

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;
}


VIDEO DEL reto


Problemas técnicos durante el desarrollo de la práctica 
dirigida o el reto, y las soluciones.


Cuando estaba realizando la práctica dirigida 2, paso a paso, no me funcionaba el segundo programa, pero era porque lo metí dentro del setup, al separarlo, ya funcionó correctamente.

En el reto no encontré la libraría para poder descargar las notas, lo que hice fue buscar otros ejemplos en internet y así pude lograr el reto sin la librería.






robotica

  El niño robot  le dijo a la abuela que le diera cuerda para ir a la escuela.   La abuela le dijo que estuviera quieto, la cu...