Práctica Dirigida 2
Practica Dirigida 2
En esta práctica utilizaremos:
Puerta automática - sensor ultrasónico
Comenzamos
con la conexión de cables en el Arduino Uno y la Protoboard.
Positivo
de Protoboard se conecta a 5V de Arduino Uno.
Negativo
de Protoboard se conecta a GND.
Se conecta el sensor ultrasónico a Arduino y a la
Protoboard:
Gnd se conecta a negativo de
Protoboard.
Echo se conecta al pin 12 de Arduino
Uno.
Trig se conecta al pin 13 de
Arduino Uno.
Ucc se conecta a positivo de
Protoboard.
Programación
Se abre el Programa ID Arduino y se configuran la
Tarjeta y el Puerto en Herramientas en Arduino Uno, se definen las variables y
puertos luego le indicamos a los puertos su funcionalidad, una envía (Trig) una
onda ultrasónica y el otro la recibe (Echo). Se crea una variable (float) que
guarde el valor de la distancia entre el objeto y el sensor.
En el setup definimos el pin que va ser el de
entrada y salida.
En
el loop ejecutamos el procedimiento para que nos lo muestre en el monitor
serial
int echo = 12;
float disCalculada;
void setup()
{
pinMode (trig, OUTPUT);
pinMode (echo, INPUT);
Serial.begin (9600);
}
void loop()
{
disCalculada =calcularDistancia();
Serial.println("----");
Serial.println("Cm: ");
Serial.println(disCalculada);
delay(200);
}
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 sensor ultrasónico
Puerta automática – piezo
Puerta automática – piezo
Vamos a agregar el piezo para que nos pueda detectar si algo
está cerca o lejos.
Colocaremos unas terminales al bus en la parte negativa y la
parte positiva, que va direccionada al pin número 2 de la tarjeta
arduino.
Programación
Utilizamos la programación de la práctica anterior.
Agregaremos lo siguiente:
En la sección de variables crearemos una llamada piezo y le
asignaremos el numero 2 lo cual la direccionará al pin del arduino.
En el setup
Se establece piezo como una
salida.
Se usa la lógica computacional, tipo si para comparar si la
distancia es mayor a 100 cm. Y en base a
esto accionara un tono del piezo, sino cumple no ejecutara la acción. Se espera
diez milisegundos.
int trig = 13;
int echo = 12;
int piezo = 2;
float disCalculada;
void setup(){
pinMode (echo, INPUT);
pinMode (piezo, OUTPUT);
Serial.begin (9600);}
void loop(){
disCalculada = calcularDistancia();
Serial.println("----");
Serial.println("Cm: ");
Serial.println(disCalculada);
delay(200);
if (disCalculada < 100)
{ tone (piezo, 600,100);}
else {}
delay (10);}
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;
}
Puerta automática – servomotor
Conectar los polos positivo y negativo en el bus de la
protoboard y un cable conectado al Pin 3
Para activarlo se realiza la siguiente programación.
Agregar a librería que va manipular el servomotor se
programa agregar librería y se selecciona la librería del servomotor.
Crear las variables para su uso creamos la sentencia servo1
con la instrucción (puerto servo).
Se crean las siguientes variables:
grados la que va a guardar el ángulo giro servo, tipo
temporal para trabajar en la condicional, pulso mínimo lo que define el ángulo
mínimo que trabaja el servo, pulso máximo lo que define el ángulo máximo que
trabaja el servo.
En el setup se define cual
es el puerto con el punto máximo y minino que puede trabajar el
servomotor.
En el Loop se le dice a la variable grados que va a guardar
la lectura del ángulo que le reporta el servomotor.
Cuando se entra a la condicional de distancia calculada vamos
a decirle que se distancia es menor que 100 y que guarda en la variable
temporal si el número es 100 de lo
contrario que guarde en la variable temporal 0, lo que quiere decir que el
servomotor regrese a 0 de gire se esperan 10 milisegundo.
Luego se dice al servomotor que gire la cantidad de grados
que tiene la variable temporal la cual varia si se cumple o no la condicional.
Puerta automática – LCD
Pantalla
LCD
Se creara un nuevo circuito
_La pantalla LCD tiene 2 partes y utiliza muchas
conexiones, la primera es la alimentación eléctrica la cual se conecta al bus
de la protoboard la segunda parte la comunicación con la pantalla LCD
requerimos 6 conectores con terminal
los que van al pin 4 hasta el 9 en la tarjeta arduino1 en la pantalla LCD los
pines corresponde del 5 al 10.
Programación
Agregamos una librería
LiquidCrystal.
Variables pines se conecta Arduino1 4,5,6,7,8,9
En el Setup se usa la nueva instrucción LCD.SetCursor la
cual se define la posición de la línea en la pantalla utilizamos posición 4
fila1 también se utilizara LCDprint con una palabra (“Pronie”) lo que muestra
el en la pantalla el texto LCD, luego que no parpade la pantalla se utiliza
LCD.noblinke, se da una espera de 2 segundos con la sentencia delay 2000 para
poder dar distancia que reporta el sensor electrónico en la parte final del
loop.
#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1;
LiquidCrystal lcd(8,9,4,5,6,7);
int puertoservo=3;
int grados;
int tmp=0;
int pulsominimo=650;
int pulsomaximo=2550;
int trig=13;
int echo=12;
float disCalculada;
int piezo=2;
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.print("Grados: ");
Serial.println(grados);
delay (200);
Serial.println("------");
Serial.print("cm: ");
Serial.println(disCalculada);
delay(200);
if (disCalculada<100)
{
tmp=90+10;
tone (piezo, 600, 100);
}
else
{
tmp=0-10;
}
delay(10);
servo1.write(tmp);
//lcd.clear();
lcd.setCursor(1,1);
lcd.print("Distancia");
//lcd.setCursor(4,1);
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;
}
Reto:
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.
En este reto se utiliza el sensor ultrasónico que detecta un
objeto a determinada distancia, al hacerlo se abre la puerta (servo motor), se
enciende una led en este caso roja, y a la vez se escucha una melodía (piezo).
#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 grados;
int tmp=0;
int pulsominimo=650;
int pulsomaximo=2550;
float disCalculada;
int pinRojo = 11;
const int piezo = 2;
const int tonos[] = {2637, 2637, 2637,2093, 2637,3136, 1568, 3136, 1568, 1319, 1760, 1976};
const int countTonos = 5;
void setup()
{
lcd.setCursor (4,1);
lcd.print ("Com-fis-Yadi");
lcd.noBlink ();
delay(2000);
servo1.attach (puertoservo,pulsominimo, pulsomaximo);
pinMode (trig, OUTPUT);
pinMode(echo, INPUT);
pinMode (piezo, OUTPUT);
pinMode (pinRojo, OUTPUT);
Serial.begin (9600);
}
void loop() {
disCalculada = calcularDistancia();
grados=servo1.read();
Serial.println("--------");
Serial.print("cm:");
Serial.println(disCalculada);
delay(200);
if (disCalculada < 40 )
{
tmp=100;
digitalWrite(pinRojo, HIGH);
for (int iTono = 0; iTono < countTonos; iTono++)
{
tone(piezo, tonos[iTono]);
delay(500);
}
}
else
{
tmp=0;
digitalWrite(pinRojo, LOW);
noTone(piezo);
}
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;
}
Problemas Técnicos
Algunas de las situaciones técnicas que se me dificultaron fue la conexión de cables (pines), para resolverlo fue necesario utilizar la lupa que venía en las herramientas.
En la manipulación de la protoboard y tarjeta de arduino, se me desprendió un pin quedando dentro de ésta, por lo que tuve que utilizar unas pinzas que igual se encuentran en las herramientas para sacarlo.
Se me dificulto lograr que funcionara el servomortor, revisé la conexión y lo logré.
En la programación no funcionaba, entonces me devolvía a revisar el orden lógico y sintaxis hasta lograrlo.

Comentarios
Publicar un comentario