Prototipos 2: Práctica Dirigida 2

Práctica Dirigida 2

Prototipos Interactivos 2

Práctica #2



Código en el IDE de Arduino



#include <LiquidCrystal.h>
#include <Servo.h>


Servo servo1; //declaramos la variable para controlar el servo motor
LiquidCrystal lcd(8,9,4,5,6,7); //definimos los pines de arduino que controlan la LCD, no se porque el orden de los pines es así, si los ordeno distinto da error en la lcd
int puertoservo =3; //Se asigna el pin 3 a esta variable
int trig =13; //Se asigna el pin 13 a esta variable
int echo =12; //Se asigna el pin 12 a esta variable
int piezo =2; //Se asigna el pin 2 a esta variable
int grados; //variable para guardar los grados de ang del servo
int temporal =0; //variable a usar en el if
int anguloMin =650; //variable en la que se asigna el ang menor
int anguloMax =2550; //variable en la que se asigna el ang mayor
float disCalculada;

void setup()
{
  servo1.attach (puertoservo,anguloMin,anguloMax); //inicializamos el servo indicando por cual puerto nos comunicamos y los ángulos Max y Min
  //------------------//
  pinMode(trig, OUTPUT); // Envía datos
  pinMode (echo, INPUT); // Recibe datos
  pinMode (piezo, OUTPUT);
  Serial.begin(9600);
  //-------------------//
  lcd.setCursor (4,1); //definimos la columna 4 de la fila 1
  lcd.print("PRONIE"); //Mostramos la palabra
  lcd.noBlink(); //La lcd no parpadea
  delay(2000);
}

void loop()
{
  disCalculada = calcularDistancia(); 
  grados=servo1.read(); //guardamos el valor de giro del servo
  Serial.println("-------------");
  Serial.print("cm  :");
  Serial.println(disCalculada);
  delay (200);
  if (disCalculada < 30)
 {
  temporal=180; // se asigna a la variable un 100
  tone (piezo, 600, 100); // ejecuta una frecuencia en el piezo (pin, frecuencia y duración)
  }

  else
  {
    temporal=0; // se asigna a la variable un 0
  }
  delay(10);
  servo1.write(temporal); //giramos los grados guardados en la variable temporal de acuerdo al resultado del if
  lcd.setCursor (1,1);
  lcd.print("Distancia ");
  lcd.println(disCalculada);
  }
  
int calcularDistancia()
{
  long distancia; //creamos la variable de tipo larga
  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; 
}

Vídeo del Reto 


Código en el IDE de Arduino


#include <pitches.h> // librería para la melodia
#include <LiquidCrystal.h>
#include <Servo.h>
//---------------------

 int melodia[] = 
 {
 NOTE_C4, NOTE_C4, NOTE_C4, NOTE_F4, NOTE_A4, 0, 
 NOTE_C4, NOTE_C4, NOTE_C4, NOTE_F4, NOTE_A4, 0, 
 NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4, 0, 
 NOTE_C4, NOTE_C4, NOTE_C4, NOTE_E4, NOTE_G4, 0, 
 NOTE_C4, NOTE_C4, NOTE_C4, NOTE_E4, NOTE_G4 ,0, 
 NOTE_C4, NOTE_D4, NOTE_C4, NOTE_B4, NOTE_A4, NOTE_G4, NOTE_F4,0
 };


 int noteDurations[] = 
 {
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6
 };

//--------------------


Servo servo1; //declaramos la variable para controlar el servo motor
LiquidCrystal lcd(8,9,4,5,6,7); //definimos los pines de arduino que controlan la LCD, no se porque el orden de los pines es así, si los ordeno distinto da error en la lcd
int puertoservo =3; //Se asigna el pin 3 a esta variable
int trig =13; //Se asigna el pin 13 a esta variable
int echo =12; //Se asigna el pin 12 a esta variable
int piezo =2; //Se asigna el pin 2 a esta variable
int grados; //variable para guardar los grados de ang del servo
int temporal =0; //variable a usar en el if
int anguloMin =650; //variable en la que se asigna el ang menor
int anguloMax =2550; //variable en la que se asigna el ang mayor
float disCalculada;

void setup()
{
  servo1.attach (puertoservo,anguloMin,anguloMax); //inicializamos el servo indicando por cual puerto nos comunicamos y los ángulos Max y Min
  //------------------//
  pinMode(trig, OUTPUT); // Envía datos
  pinMode (echo, INPUT); // Recibe datos
  pinMode (piezo, OUTPUT);
  Serial.begin(9600);
  //-------------------//
  lcd.setCursor (4,1); //definimos la columna 4 de la fila 1
  lcd.print("PRONIE"); //Mostramos la palabra
  lcd.noBlink(); //La lcd no parpadea
  delay(2000);
}

void loop()
{
 disCalculada = calcularDistancia(); 
 grados=servo1.read(); //guardamos el valor de giro del servo
 Serial.println("-------------");
 Serial.print("cm  :");
 Serial.println(disCalculada);
 delay (200);
 if (disCalculada < 30)
 {
  temporal=170; // se asigna a la variable un 170
  servo1.write(temporal); //giramos los grados guardados en la variable temporal
    for (int estaNota = 0; estaNota < 40; estaNota++) {
    int noteDuration = 1000 / noteDurations[estaNota];
    tone(2, melodia[estaNota], noteDuration);

  int pausaEntreNotas = noteDuration * 1.30;
  delay(pausaEntreNotas);
  noTone(8);
  }

  }
  else
  {
    temporal=0; // se asigna a la variable un 0
    servo1.write(temporal); 
  }
  delay(10);
  
  lcd.setCursor (1,1);
  lcd.print("Distancia ");
  lcd.println(disCalculada);
  }

int calcularDistancia()
{
  long distancia; //creamos la variable de tipo larga
  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; 

}

ENTRE LOS DESAFÍOS DE ESTA UNIDAD ESTA:

  1. Trabajar las notas, al no ser músico me fue un poco difícil pero luego fui comprendiendo cómo se trabajan y la diferencia entre las escala Americana y Latina
  2. El trabajo con la LCD es más complicado cuando no se tiene el módulo I2C, se requiere de más cuidado.
  3. LiquidCrystal lcd(8,9,4,5,6,7) este código debo de analizarlo para entender porque el orden de los numero y porque si se cambian da error en la LCD
URL consultadas:

No hay comentarios:

Publicar un comentario

Página Principal

Álbum de Aprendizaje Computación física:  Prototipos Interactivos (1 y 2) Estimado lector... Este Blog llevará un registro de apren...