La Práctica Dirigida 2
El código de la práctica:
#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1; // Constructor de la sentencia servo
LiquidCrystal lcd (8,9,4,5,6,7); // Definimos los pines con los que se va comunicar la LEd con la tarjeta arduino
int puertoservo =3; // Variable para mandar datos al servo
int trig= 13;
int echo= 12;
int piezo = 2; // Variable del pin del piezo
int grados; // variable para guardar los grados de ángulo del servo ( va guardar el angulo de giro del servo)
int tmp=0; // variable temporal para usar en la condicional
int pulsominimo=650; // variable que define el ángulo menor ó minimo que puede trabajar el servo
int pulsomaximo=2550;// variable que define el angulo mayor del servo
float disCalculada;
void setup()
{
lcd.setCursor (4,1); // define que se ubica en la posición 4 de la fila 1 de la pantalla.
lcd.print ("PRONIE");// muestra el texto PRONIE en la pantalla LCD, en la fila 1, anterior mencionada
lcd.noBlink (); // que no parpadee la pantalla
delay(2000); // esperar 2 segundos
//------------------//
servo1.attach (puertoservo,pulsominimo, pulsomaximo); // se indica que el servo motor, esta en el pin 3,(puertoservo) y cual es el punto minimo ó maximo que puede trabajar nuestro servo motor.
pinMode (trig, OUTPUT);
pinMode(echo, INPUT);
pinMode (piezo, OUTPUT); // Se establece el piezo en modo salida
//--------------//
Serial.begin (9600);
}
void loop() {
disCalculada = calcularDistancia();
grados=servo1.read();// guardamos en la variable grados el valor del angulo de giro del servo (guarda la lectura del angulo que reporta el servo motor
Serial.println("--------");
Serial.print("cm:");
Serial.println(disCalculada);
delay(200);
if (disCalculada <20 )// Si
{
tmp=100; // a la variable temporal le vamos a asignar un valor de 100, (si la distancia es menor que 20, guarde dentro de la variable temporal, que gire un angulo de 100 °grados, la puerta se abre
tone (piezo, 600,100); // si se cumple la condición, se activa el piezo
}
else
{
tmp=0; // si la distacia no es mayor que 20, cambiamos el valor de la variable temporal a 0 ( el servo motor regresa o gira al angulo 0) la puerta se cierra
}
delay (10); // esperar 10 milisegundos
servo1.write (tmp); // le vamos a decir al servo motor que gire la cantidad de grados que indique la variable temporal, que lea el valor y lo ejecute o aplique ( esto va variar si se cumple o no la distancia menor a 100
lcd.setCursor(1,1); // que el texto aparezca en la primera fila y en la primera columna de la LCD
lcd.print ("Distancia "); // que muestre el texto "Distancia
lcd.println(disCalculada); // Muestra el valor de la variable, imprime el valor de la variable disCalculada, osea la distancia que hay, la muestra en la pantalla
}
int calcularDistancia () // función de calcular distancia
{
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;
}
El reto 2
El reto consiste en que al abrir la puerta también debe encender una led y sonar una melodía
El código del reto:
#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo1; // Constructor de la sentencia servo
LiquidCrystal lcd (8,9,4,5,6,7); // Definimos los pines con los que se va comunicar la LEd con la tarjeta arduino
int puertoservo =3; // Variable para mandar datos al servo
int trig= 13;
int echo= 12;
//int piezo = 2; // Variable del pin del piezo
int grados; // variable para guardar los grados de ángulo del servo ( va guardar el angulo de giro del servo)
int tmp=0; // variable temporal para usar en la condicional
int pulsominimo=650; // variable que define el ángulo menor ó minimo que puede trabajar el servo
int pulsomaximo=2550;// variable que define el angulo mayor del servo
float disCalculada;
int pinRojo = 11;
const int piezo = 2;//se declara el pin de salida parlante
const int tonos[] = {2637, 2637, 2637,2093, 2637,3136, 1568, 3136, 1568, 1319, 1760, 1976};// los tonos que va a reproducir
const int countTonos = 12;// Contar tonos
void setup()
{
lcd.setCursor (4,1); // define que se ubica en la posición 4 de la fila 1 de la pantalla.
lcd.print ("PRONIE");// muestra el texto PRONIE en la pantalla LCD, en la fila 1, anterior mencionada
lcd.noBlink (); // que no parpadee la pantalla
delay(2000); // esperar 2 segundos
//------------------//
servo1.attach (puertoservo,pulsominimo, pulsomaximo); // se indica que el servo motor, esta en el pin 3,(puertoservo) y cual es el punto minimo ó maximo que puede trabajar nuestro servo motor.
pinMode (trig, OUTPUT);
pinMode(echo, INPUT);
pinMode (piezo, OUTPUT); // Se establece el piezo en modo salida
pinMode (pinRojo, OUTPUT);
Serial.begin (9600);
}
void loop() {
disCalculada = calcularDistancia();
grados=servo1.read();// guardamos en la variable grados el valor del angulo de giro del servo (guarda la lectura del angulo que reporta el servo motor
Serial.println("--------");
Serial.print("cm:");
Serial.println(disCalculada);
delay(200);
if (disCalculada < 20 )// Si
{
tmp=100; // a la variable temporal le vamos a asignar un valor de 100, (si la distancia es menor que 20, guarde dentro de la variable temporal, que gire un angulo de 100 °grados
digitalWrite(pinRojo, HIGH);
for (int iTono = 0; iTono < countTonos; iTono++)//Instrucción que permite cambiar de uno a uno los tonos a reproducir
{
tone(piezo, tonos[iTono]); //Instrucción que reproduce los tonos si la variable "tmp" es igual a 100
delay(500);
}
}
else
{
tmp=0; // si la distacia no es mayor que 20, cambiamos el valor de la variable temporal a 0 ( el servo motor regresa o gira al angulo 0.
digitalWrite(pinRojo, LOW);
noTone(piezo); //Instrucción que apaga el parlante si la variable tmp es igual a cero
}
delay (10); // esperar 10 milisegundos
servo1.write (tmp); // le vamos a decir al servo motor que gire la cantidad de grados que indique la variable temporal, que lea el valor y lo ejecute o aplique ( esto va variar si se cumple o no la distancia menor a 100
lcd.setCursor(1,1); // que el texto aparezca en la primera fila y en la primera columna de la LCD
lcd.print ("Distancia "); // que muestre el texto "Distancia
lcd.println(disCalculada); // Muestra el valor de la variable, imprime el valor de la variable disCalculada, osea la distancia que hay, la muestra en la pantalla
}
int calcularDistancia () // función de calcular distancia
{
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
- La conexión de la pantalla LCD, demasiados cables y en e vídeo no se veía muy claro la instalación
- Cuando ya realice la programación de la melodía, no me tiraba error de programación, pero el programa se queda pegado dice sólo compilando y no se sube.
- Para el reto2, venían 2 ejemplos uno era con la galería pitches , no explicaba como incluirla, me pareció más sencillo el ejemplo 2 que era sin incluir galería.
No hay comentarios:
Publicar un comentario