Practica dirigida II

Práctica dirigida II

Video de práctica dirigida


En el presente ejercicio se requiere que una puerta automática se active cuando detecta a una persona en la entrada del local.
Para ello se utilizaron los siguientes componentes:protoboard, arduino uno, sensor ultrasónico que detectar distancia de un objeto, piezo que emite el sonido, servo motor  y pantalla LCD para ver la distancia que reporta el sensor. Además utilizamos cables macho-macho y macho-hembra.
Conectamos de la siguiente manera:

Sensor ultrásonico: un cable se conecta del pin 5v de la tarjeta arduino a una pista del bus positivo de la protoboard, otro cable del pin GND de la tarjeta arduino a una pista del polo negativo de la protobooard.
Se conecta un cable  del sensor del pin Ucc a una pista del polo positivo de la protoboard. El pin GND a una pista del polo negativo de la protoboard. Del pin Trig al pin 13 de la tarjeta arduino y del pin Eco al pin 12 de la tarjeta arduino. 

Piezo: Una terminal se conecta al pin 2 de la tarjeta arduino y  la otra terminal a una pista del bus negativo de la protoboard.

Servo motor: el extremo izquierdo se conecta al pin 3 de la tarjeta arduino, el punto medio a una pista del bus positivo de la protoboard y el otro extremo a una pista del bus negativo.


LCD: Los pines 5 al 10 de  la  parte superior de la LCD se conectan a los pines 4 al 9 de la tarjeta arduino. 
Un cable de una pista del bus negativo de la protoboard al pin 9 de la parte inferior de la LCD  y un cable de una pista del bus positivo de la protoboard al pin 10 de la LDC.














Programa de práctica dirigida II

#include <LiquidCrystal.h> // se incluye la librería de la LCD
#include <Servo.h>   // se incluye la librería del servomotor
Servo servo1;          //construye la sentencia servo
LiquidCrystal lcd (8,9,4,5,6,7); //definición de pines que controlan la LCD
int v=-1;
int puertoservo =3; //variable del servomotor
int trig = 13;     //variable para activar el sensor
int echo = 12; //variable que recibe las ondas
int piezo = 2; //variable para activar el piezo
int grados;  // variable que guarda los grados
int tmp=0;   //variable temporal para condicional
int pulsominimo=650;  //variable que define el angulo menor del servo
int pulsomaximo=2550;  // variable que define el angulo mayor del servo
float disCalculada;  //variable que guarda el valor distancia

void setup() 
{
  lcd.setCursor(4,1); //definimos que se ubique en la posición 4 de la fila uno en la pantalla
  lcd.print("PRONIE"); //mostramos la palabra PRONIE en la pantalla
  lcd.noBlink(); //le indicamos al LCD que no parpadee
  delay(2000); //esperamos 2 segundos 
  servo1.attach (puertoservo,pulsominimo, pulsomaximo);//variables que declaramos al inicio
 pinMode (trig, OUTPUT);//declarado como actuador de salida
 pinMode (echo, INPUT); //declarado como actuador de entrada
 pinMode (piezo, OUTPUT);//declarado como actuador de salida
 Serial.begin (9600); //se muestra la información en el monitor serial
}

void loop() 
{
  disCalculada = calcularDistancia (); 
  grados=servo1.read(); //guardamos el valor del angulo del giro del servo
  Serial.print("grados: "); //mostramos la palabra grados
  Serial.println (grados); //Mostramos el valor del angulo
  delay(200);  //esperamos 2 milisegundos
  Serial.println("-----------"); //mostramos una línea
  Serial.print("cm :"); //mostramos cm
  Serial.println (disCalculada); //mostramos la distancia
  delay(200); //esperamos 2 milisegundos
  if (disCalculada < 100) //si la distancia es mayor que cien suena un tono de lo contrario no suena. Además el servomotor gira de acuerdo a la cantidad que tiene almacenada la variable temporal.  Y se muestra en el monitor serial el giro y la distancia del objeto.
  {
    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;
 duracion = duracion/29;
 return distancia;
}



Reto 2

El reto que se nos pide es modificar la melodía del ejemplo por otra conocida y encender una led. 
Video de reto 2

Para el ejemplo utilizamos además de lo que ya teníamos conectado, dos cables y una led. El terminal más corto de la led se conecta a una pista del bus negativo de la protoboard, y la terminal más larga se conecta al pin 11 de la tarjeta arduino uno.




Programa utilizado

#include <LiquidCrystal.h> // se incluye la librería de la LCD
#include <Servo.h>   // se incluye la librería del servomotor
Servo servo1;          //construye la sentencia servo
LiquidCrystal lcd (8,9,4,5,6,7); //definición de pines que controlan la LCD
int v=-1;
int led = 11; //variable de la led que se agrega en el reto
int puertoservo =3; //variable del servomotor
int trig = 13;     //variable para activar el sensor
int echo = 12; //variable que recibe las ondas
int piezo = 2; //variable para activar el piezo
int grados;  // variable que guarda los grados
int tmp=0;   //variable temporal para condicional
int pulsominimo=650;  //variable que define el angulo menor del servo
int pulsomaximo=2550;  // variable que define el angulo mayor del servo
float disCalculada;  //variable que guarda el valor distancia
const int tonalidad[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494}; // crea las tonalidades para el piezo que se agrega en este ejemplo
const int countTonalidad = 18;
void setup() 
{
  lcd.setCursor(4,1); //definimos que se ubique en la posición 4 de la fila 1 en la pantalla
  lcd.print("PRONIE"); //mostramos la palabra PRONIE en la pantalla
  lcd.noBlink(); //le indicamos al LCD que no parpadee
  delay(2000); //esperamos 2 segundos 
  servo1.attach (puertoservo,pulsominimo, pulsomaximo);//variables que declaramos al inicio
 pinMode (trig, OUTPUT);//declarado como actuador de salida
 pinMode (echo, INPUT); //declarado como actuador de entrada
 pinMode (piezo, OUTPUT);//declarado como actuador de salida
 pinMode (led, OUTPUT);// declarado como actuador de salida
 Serial.begin (9600); //se muestra la información en el monitor serial

}

void loop() 

{
  disCalculada = calcularDistancia (); 
  grados=servo1.read(); //guardamos el valor del angulo del giro del servo
  Serial.print("grados: "); //mostramos la palabra grados
  Serial.println (grados); //Mostramos el valor del angulo
  delay(200);  //esperamos 2 milisegundos
  Serial.println("-----------"); //mostramos una línea
  Serial.print("cm :"); //mostramos cm
  Serial.println (disCalculada); //mostramos la distancia
  delay(200); //esperamos 2 milisegundos
  if (disCalculada < 100) //si la distancia es mayor que doscientos suena un tono de lo contrario no suena. Además el servomotor gira de acuerdo a la cantidad que tiene la variable temporal.  Además se muestra en el monitor serial el giro y la distancia del objeto.

  {
    tmp=100;
    digitalWrite (led, HIGH);// si la distancia es menor a 100 se enciende la led
     for (int iTono = 0; iTono < countTonalidad; iTono++) //crea el tono que sonará que se agrega en el reto
    tone (piezo, tonalidad[iTono]); //da lectura del tono seleccionado
    delay (10);//hace una pausa o espera
 }
  else 
 {

  tmp=0;
  digitalWrite (led, LOW);// si la distancia es mayor a 100 la led se apaga que se agrega al ejemplo

 }
  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;
 duracion = duracion/29;
 return distancia;

}

Errores a mejorar 

1. En la sintáxis, a veces escribo dos puntos en lugar de punto y coma, tambiém Serial en minúscula en lugar de mayúscula, me faltan el punto y coma al final de varias líneas. Hay que revisar constantemente, pero lo importante es que el programa te envía mensaje de error y te señala la línea y esto permite revisar.
2. Conecté de forma incorrecta un cable que iba al bus negativo en el positivo y la tarjeta se detuvo completamente. Tuve que volver a iniciar y fijarme en la conexión.
3. Las conexiones tenían un error en el sensor supersónico y por más que cambié los cables, me aseguré que estuvieran bien conectados y lo volví a conectar en varias posiciones, no pude arreglar el error porque la distancia se mantuvo en 0. 



Comentarios

Entradas populares de este blog

Página Principal