elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Informática
| |-+  Electrónica
| | |-+  [TUTORIAL] HC-SR04 Sensor ultrasonico de distancia y arduino
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [TUTORIAL] HC-SR04 Sensor ultrasonico de distancia y arduino  (Leído 16,968 veces)
79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
[TUTORIAL] HC-SR04 Sensor ultrasonico de distancia y arduino
« en: 17 Mayo 2013, 21:11 »

HOLA!!!

El HC-SR04 es un sensor de distancia que funciona por ultrasonido. Básicamente lo que hace es enviar un pulso llamado trigger, inaudible para cualquier ser humano, rebotar en algún objeto y recibirlo (eco). Con este principio es posible medir distancias sabiendo que la velocidad del sonido es de 345m/s.

Podemos calcular la distancia con una sencilla formula:


El módulo adquirido en la página china DealExtreme presenta las siguientes características:

Tensión de trabajo: 5VDC
Corriente de reposo: <2mA
Angulo: <15º
Distancia: 2 a 450cm
Resolución: 0,3cm

Con el sensor HC-SR04 y una placa Arduino  podemos armar un medidor de distancia en menos de 5 minutos. Utilizando la librería Ultrasonic  (disponible para la descarga en forma gratuita) podemos medir distancias con muy poco código. Por defecto solo es posible medir hasta 51cm de distancia, pero con una sencilla modificación en el archivo ultrasonic.ccp podemos llegar hasta los 5m. Buscamos la siguiente línea y modificamos el valor de time_out:

    Time_out=3000; // 30ms para 5 metros // 3ms para 50cm

A continuación el ejemplo que viene con la librería. Funciona muy bien y es sencillo de implementar:

Código:
// Ultrasonic - Library for HR-SC04 Ultrasonic Ranging Module.
// Rev.4 (06/2012)
// J.Rodrigo ( www.jra.so )
// more info at www.ardublog.com
 
#include <Ultrasonic.h>
 
Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN)
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  Serial.print(ultrasonic.Ranging(CM)); // CM or INC
  Serial.println(" cm" );
  delay(100);
}

También se puede resolver el código sin utilizar librerías. Haciendo uso del comando pulseIn que nos brinda el entorno Arduino podemos hacer lo mismo con un poco más de elaboración. El ejemplo a continuación:

Código:
/ HC-SR04 & ARDUINO
 
#define ECHO 8        // Pin para recibir el pulso de eco
#define TRIGGER 9     // Pin para enviar el pulso de disparo
 
unsigned int tiempo, distancia;
 
void setup() {
  Serial.begin(9600);
  pinMode(ECHO, INPUT);
  pinMode(TRIGGER, OUTPUT);
}
 
void loop() {
  digitalWrite(TRIGGER, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER, LOW);
  // Calcula la distancia midiendo el tiempo del estado alto del pin ECHO
  tiempo = pulseIn(ECHO, HIGH);
  // La velocidad del sonido es de 340m/s o 29 microsegundos por centimetro
  distancia= tiempo/58;
  //manda la distancia al monitor serie
  Serial.print(distancia);
  Serial.println(" cm");
  delay(200); 
}

Imagenes del proyecto terminado:



Fuente AutomatismosMDQ

GRACIAS POR LEER!!!


En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Meta


Desconectado Desconectado

Mensajes: 3.203



Ver Perfil WWW
Re: [TUTORIAL] HC-SR04 Sensor ultrasonico de distancia y arduino
« Respuesta #1 en: 16 Febrero 2014, 20:48 »

Hola:

Aquí hay código. He estado trasteando estas cosas y está muy bien.
Código
  1. #include <LiquidCrystal.h>
  2. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  3.  
  4. const int trigger=10;
  5. const int echo=13;
  6.  
  7. float distance;
  8. char nivel_agua[] = "Water level:";
  9.  
  10. void setup()
  11. {
  12.  lcd.begin(16,2);
  13.  lcd.setCursor(0,0);
  14.  lcd.print(nivel_agua);
  15.  
  16.  Serial.begin(115200);  // use fastest serial possible
  17.  pinMode(trigger,OUTPUT);
  18.  pinMode(echo,INPUT);
  19. }
  20.  
  21. void loop()
  22. {
  23.  digitalWrite(trigger,LOW);
  24.  delayMicroseconds(5);
  25.  digitalWrite(trigger,HIGH);
  26.  delayMicroseconds(10);
  27.  digitalWrite(trigger,LOW);
  28.  
  29.  // take average of 10 measurements
  30.  unsigned long time = 0.0;
  31.  for (int i=0; i<10; i++)
  32.  {
  33.    time += pulseIn(echo, HIGH);
  34.    delay(10);
  35.  }
  36.  distance = time * 0.0001657;
  37.  
  38.  // adjust for accuracy
  39.  distance = 1.38/1.52 * distance;  //  correction factor = (wanted/measured)
  40.  
  41.  Serial.println(nivel_agua);
  42.  Serial.print(distance, 2);
  43.  Serial.println(" Meters.");
  44.  
  45.  lcd.setCursor(0, 1);
  46.  lcd.print(distance, 2);
  47.  lcd.print(" Meters. ");
  48. }
  49.  



Código
  1. #include <LiquidCrystal.h>
  2. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  3.  
  4.    const int trigger=10;
  5.    const int echo=13;
  6.  
  7.    float distance;
  8.    const String nivel_agua = "Nivel de agua:";
  9.  
  10.    void setup(){
  11.      lcd.begin(16,2);
  12.      Serial.begin(9600);
  13.      pinMode(trigger,OUTPUT);
  14.      pinMode(echo,INPUT);
  15.    }
  16.  
  17.    void loop(){
  18.    //Inicializamos el sensor
  19.      digitalWrite(trigger,LOW);
  20.      delayMicroseconds(5);
  21.    // Comenzamos las mediciones
  22.    // Enviamos una señal activando la salida trigger durante 10 microsegundos
  23.      digitalWrite(trigger,HIGH);
  24.      delayMicroseconds(10);
  25.      digitalWrite(trigger,LOW);
  26.    // Adquirimos los datos y convertimos la medida a metros
  27.     distance=pulseIn(echo,HIGH); // Medimos el ancho del pulso
  28.                                  // (Cuando la lectura del pin sea HIGH medira
  29.                                  // el tiempo que transcurre hasta que sea LOW
  30.     distance=distance*0.0001657;
  31.    // Enviamos los datos medidos a traves del puerto serie y al display LCD
  32.      Serial.println("Nivel de agua:");
  33.      Serial.print(distance);
  34.      Serial.println(" Metros.");
  35.  
  36.      lcd.setCursor(0,1);
  37.      lcd.print(distance);
  38.      lcd.print(" Metros.");
  39.      lcd.setCursor(0,0);
  40.      lcd.print(nivel_agua);
  41.      delay(1000);
  42.    }

Saludo.

Un cordial saludo.


« Última modificación: 16 Febrero 2014, 20:52 por Meta » En línea

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines