sábado, 26 de septiembre de 2015

[Arduino 10] Sensor ultrasónico HR-SR04 con pantalla LCD 2x16

Para continuar con mas ejemplos y aplicaciones de la pantalla LCD, ahora quiero mostrar como utilizar un sensor (Sensor ultrasónico) junto a la pantalla LCD 2x16.

Si aun no sabes como programar el sensor ultrasónico puedes verlo haciendo click aquí y si tampoco sabes como programar la pantalla LCD puedes aprender haciendo click en los siguientes enlaces; Parte 1 y Parte 2.

Objetivos
  1. Aprender a utilizar la pantalla LCD junto a un sensor ultrasónico
  2. Aprender a programar la pantalla LCD mientras se utiliza un sensor ultrasónico
  3. Practicar en la programación de un LCD 2x16
Materiales
  • Arduino Uno, Arduino picaro o similares
  • Conector USB para arduino
  • Sensor HC-SR04 (Sensor ultrasónico)
  • Pantalla LCD
  • Potenciómetro
  • Protoboard
  • Cables conectores
Fotos del proyecto



Circuito Arduino (Fritzing)
Se puede apreciar el esquemático para armar el circuito, no olviden que en tutoriales anteriores vimos como armar el circuito por si tienen dudas. Ademas se puede mencionar que el circuito para arduino uno es similar.


Advertencia: el pin 11, 10, 9, 8, 7 y 6 están corridos en un espacio con respecto a la programación, arreglare la imagen y la subiré nuevamente, si lo olvido, ruego me deje un comentario y lo arreglo.

Sketch de arduino
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);

#define echoPin 5 // Pin eco
#define trigPin 6 // Pin Trigger
int maximumRange = 200; // Rango maximo
int minimumRange = 0; // Rango minimo
float duration, distance; // Duracion usada para medir la duracion

void setup() {
 lcd.begin(16, 2);
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
}

void loop() {
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 
 digitalWrite(trigPin, LOW);

 //Medimos el tiempo que tarda en llegar el eco
 duration = pulseIn(echoPin, HIGH);
 //Calculamos la distancia
 distance = float (duration*0.017);
 
 //iniciamos el ciclo de la pantalla lcd
 PantallaLCD();
 }

 void PantallaLCD(){
            lcd.clear();
            lcd.write("Distancia");
            lcd.setCursor(0,1);
            lcd.write("d=");
            lcd.print(distance);
            lcd.write("cm");
            delay(400);
            return;      
}


Conclusión
Es importante tomar en cuenta el ciclo de la pantalla lcd para el buen funcionamiento, ya que de no limpiar la pantalla (clear();) se acumularían los caracteres y se repetirían algunas letras.

No olvides visitar la pestaña tutoriales arduino, donde podrás encontrar la lista de tutoriales que he hecho hasta el momento. Como siempre muchas gracias por visitar mi blog y si tienen alguna consulta o consejo puede comentarlo por medio de este mismo blog.

28 comentarios:

  1. porfavor, p0odrias poner la imagenm nueva plis

    ResponderBorrar
  2. me puedes decir porque utilizas 0.017 para calcula la distancia?

    ResponderBorrar
  3. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  4. Porque no me sale nada en la pantalla lo conecte igual?

    ResponderBorrar
  5. porque nomas la pantalla rende y no apara rece nada

    ResponderBorrar
  6. si la pantalla les parpadea cambien el pin 5 y 6 osea el 5 pongalo en el 6 y el 6 en el 5. :V

    ResponderBorrar
  7. Soy principiante y me encanta programar, hice una modificación para usar en mi arduino nano, es un medidor de dioptrias de compensación para hacer retinoscopia. Mide distancia y con una formula me calcula las dioptrias (para optometria) y e funciono muy bien.

    #include
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);modifique esto

    #define echoPin 6 // Pin eco
    #define trigPin 7 // Pin Trigger
    int maximumRange = 200; // Rango maximo
    int minimumRange = 0; // Rango minimo
    float duration, distance; // Duracion usada para medir la duracion
    float rx; //agregue esto
    float diop; //agregue esto


    void setup() {
    lcd.begin(16, 2);
    Serial.begin (9600);
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);

    }

    void loop() {
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    //Medimos el tiempo que tarda en llegar el eco
    duration = pulseIn(echoPin, HIGH);
    //Calculamos la distancia
    distance = float (duration*0.017);
    rx = float (1/distance)*100; // agregue esta formula
    diop = rx;

    //iniciamos el ciclo de la pantalla lcd
    PantallaLCD();
    }

    void PantallaLCD(){
    lcd.clear();
    lcd.write("Dist Ret. Diopt. "); //modifique
    lcd.setCursor(0,1);
    lcd.write("d=");
    lcd.print(distance);
    lcd.write("cm ");
    lcd.print(diop); // agregue


    delay(1500);
    return;

    }

    ResponderBorrar
    Respuestas
    1. no funciona vete a la dick
      tu mama es hombre

      Borrar
    2. concuerdo con el men de arriba ves y chinga tu madre chamaco pendejo

      Borrar
    3. CONCUERDO CON ESOS 2 MENS VETE ALA DICK Y VE ENANOS ALBINOS CON SINDROME DE DOWN

      Borrar
  8. anonimo 3 verdad que esta bien pendejo el men, parece mujer que se regrese a la cocina y los enanos albinos con sindrome son lo maximo
    los que usan mayusculas son putos:v

    ResponderBorrar
  9. Oye deja de insultar al buen hombre, tu mama es hombre y tu papa se baña con agua tibia. there´s your mom in four, my dick to myour mom is fuck

    ResponderBorrar
    Respuestas
    1. que te valga dick si quiero insultar al chamaco pendejo que se cree la verga por su codigo pedorro y ya deja de chingar o te reviento el recto a vergasos
      si tanto lo defiendes chupasela y cortese elpelo gay

      Borrar
  10. Callate hijo de tu madre (por cierto es hombre y ademas la tiene chica)

    ResponderBorrar
    Respuestas
    1. La mejor materia es tecnologia y es mi materia favorita (paseme profe)

      Borrar
  11. your mom is man and like the pinis

    ResponderBorrar
    Respuestas
    1. eso no me dijo tu gfa anoche

      Borrar
    2. my mom does not know this but something that shows is that you're gay and sucks first

      Borrar
    3. Te voy a buscar para meterte la verga por pendejo y de paso a tu mama

      Borrar
    4. your mom is a whore whore if you want to find me alive in mobs mobs so come and here I give birth to the mother

      Borrar
  12. SI CONECTASTE Y EN LA PANTALLA NO APARECE NADA , ES PORQUE ESTAS HASTA EL EXTREMO OPUESTO DEL POT .. PUEDES GIRARLO O PUEDES CONECTAR LA TIERRA DONDE ESTA 5V Y EL DE LOS 5V CONECTARLO A TIERRA PARA QUE CAMBIE DE INMEDIATO(HAS EL CAMBIO CON EL ARDUINO APAGADO) .. SALUDOS

    ResponderBorrar
    Respuestas
    1. K TE VALGA BERGHA COMO LO CONECTE HDTPM, TU NO ME DICES COMO VIVIR MI VIDA, NADIE ME ENTIENDE, POR ESO JODETE ALV, SABES QUE TU MAMA ES HOMBRE Y TU PAPA COGIO CON SU GFE. TE AMO.

      Borrar
  13. No funciona, solo me muestra la distancia una sola vez, a la segunda vuelta me esta mostrando 0 cm

    ResponderBorrar
    Respuestas
    1. #include // Debe descargar la Libreria que controla el I2C
      #include

      LiquidCrystal_I2C lcd(0x3F, 16, 2);

      long distancia;
      long tiempo;
      double dist1;
      double dist2;
      double vel;
      int triger = 7;
      int echo   = 6;


      void setup(){
          lcd.backlight();
          lcd.init();
          lcd.begin(16, 2);
          Serial.begin(9600);
          pinMode(triger,OUTPUT);
          pinMode(echo, INPUT);
      }

      void loop(){
         
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("RADAR DE");
          lcd.setCursor(0,1);
          lcd.print("VELOCIDAD");
          dist1 = 0;
          dist2 = 0;
          vel   = 0;
         
      distancia = ultrasonico();
      Serial.print("Distancia "); Serial.print(distancia);  Serial.println(" cm");  //Sacamos el resultado por el monitor serial
      delay(1000);     //Pequeña pausa antes de reiniciar el ciclo
         
          while (distancia > 60) { //esperar hasta que la distancia sea menor a 60 cm
                 // no hace falta poner nada, seguirá asi mientras distancia :60
                 // cuando sea menor que 60 sale del while
                 distancia = ultrasonico();
                 Serial.print("Distancia "); Serial.print(distancia);  Serial.println(" cm");  //Sacamos el resultado por el monitor serial
          }
          dist1 = ultrasonico();
      micros(100);
      dist2 = ultrasonico();
          vel   = ((dist1) - (dist2)) / (0.1);
          micros(500);
          muestroDatos();
      }

      int ultrasonico() {
          digitalWrite(triger,LOW);       // Apagamos el pulso ultrasónico
      delayMicroseconds(5);      // Pequeña pausa de estabilización
      digitalWrite(triger, HIGH);     // Envío del pulso ultrasónico
      delayMicroseconds(10);     // Pequeña pausa de estabilización
      tiempo = pulseIn(echo, HIGH);   // Función para medir el tiempo que transcurrido entre el envío del pulso ultrasónico y cuando el sensor recibe el rebote
      return int(0.017*tiempo);  // Fórmula para calcular la distancia usando la velocidad del sonido como constante
      }

      void muestroDatos() {
      lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("SU VELOCIDAD ES DE");
          lcd.setCursor(0,1);
          lcd.print( vel );
          lcd.setCursor(4,1);
          lcd.print("cm/s");
          delay(50);
      }

      Borrar