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.
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
Publicar un comentario