martes, 28 de mayo de 2013

Medidor de distancia por ultrasonido HC-SR04 con pinguino

HC-SR04
MEDICIÓN DE DISTANCIA POR ULTRASONIDO CON EL HC-SR04
El HC-SR04 es modulo sensor de distancia por ultrasonido que trae 4 terminales, dos de alimentación y dos para envío y recepción.
Uno de los terminales se llama trigger o disparador, es el encargado de indicarle al dispositivo que envíe la señal ultrasonica este terminal por lo menos debe estar 10 microsegundos en alto para que envíe una señal ultrasonica.
El otro terminal se llama echo o terminal de detección de eco, este terminal se coloca en alto cuando se hace el envío de la señal ultrasonica, y se coloca en bajo cuando hace recepción por medio de eco o rebote de esta sobre un objeto.
Para determinar la distancia recorrida en centímetros, se cuenta el tiempo que trascurre desde que se coloca en alto el terminal de eco y este regresa a bajo, se puede contar cada 58 microsegundos para obtener una relación en centímetros.
Calculo De La Velocidad Del Sonido
En este ejemplo se trabajara con la velocidad a 20 grados centigrados que es V=343 m/s.
Se aplica el siguiente procedimiento para hallar el tiempo en microsegundos equivalente a un centímetro.
  • Pasamos la velocidad a centímetros por segundo, esto da V=34300 cm/s
  • Calculamos el tiempo con la ecuación distancia = velocidad/tiempo, despejamos tiempo y tenemos la ecuación t=d/v, reemplazando por los valores t=1cm/(34300cm/s) luego t = 0,000029155s
  • Como la señal va y vuelve hace el doble de la distancia que se desea medir, por lo tanto tomara el doble de tiempo, así que mediremos el doble de tiempo luego t=0,000058309s, finalmente pasamos este valor a microsegundos t=58,309us que para efecto practico lo aproximaremos a t=58us en el programa.
  • Tener en cuenta que la velocidad del sonido es mayor cuando aumenta la temperatura, aproximadamente 0.6m/s por cada grado centigrado.
Vídeo mostrando la prueba realizada.

ENLACES DE INTERÉS

MONTAJE DE PRUEBA


Montaje básico HC-SR04 en Pinguino
CÓDIGO DE PRUEBA
//Codigo probado en Pinguino 9-05
//Julio Fabio De La Cruz 28-05-2013
#define  Trig  8 //Defino el terminal 8 como trigger o disparador
#define  Echo  9 //Defino el 9 como el de recepcion del eco
int Dato;//Dato sin procesar equivalente a la distancia a medir en centimetros
void setup(){
pinMode(Trig, OUTPUT);//Disparador como salida
pinMode(Echo, INPUT);//Eco como entrada
Dato=0;//Inicio dato en 0
TRISB=0;//Configuro puerto B como salida
}
void loop() {
while (digitalRead(Echo) == LOW) {//Pin del eco en bajo
digitalWrite(Trig, HIGH);//Activa el disparador
delayMicroseconds(50);//Espera 50 microsegundos (minimo 10)
digitalWrite(Trig, LOW);//Desactiva el disparador
}
while (digitalRead(Echo) == HIGH) {//Pin de eco en alto hasta que llegue el eco
Dato++;//El contador se incrementa hasta llegar el eco
delayMicroseconds(58);//Tiempo en recorrer dos centimetros 1 de ida 1 de vuelta
}
PORTB=Dato;//Muestro dato por el puerto B
delay(1000);//Espera un segundo para visualizar el dato
Dato=0;//Reinicio dato a 0 
}
CÓDIGO DE PRUEBA EN GREAT COW BASIC
También dejo el código de prueba en basic empleando great cow basic con el fin de que pueda ser
llevado a otro microcontrolador como por ejemplo el 16F877A

'****************************************************************
' Generated by Prithvi Development Studio 0.0.1 (Build: 560)

' Description : Porgrama basico para el HC-SR04
' Author      : Julio Fabio De La Cruz Gomez
' Date        : 30/05/2013 10:32:05 a.m.

'****************************************************************
#chip 16F877A, 4
#define trig PORTC.6
#define echo PORTC.7
TRISB = 0  'Configuro puerto B como salida
dir trig out 'terminal para menejar el disparardo trigger
dir echo in  'terminal para detectar el eco echo
PORTB = 0  'Limpio el puerto B colocandolo en cero
trig = OFF 'Terminal del disparador trigger en cero
dato = 0   'Variable para guardar dato de la medicion
Inicio:
       do while echo = OFF
          trig = ON   'Activa el disparador
          wait 50 us  'Espera 50 microsegundos
          trig = OFF  'Desactiva el disparador
       loop
       do while echo = ON
          dato = dato+1 'Contador se incrementa hasta llegar el eco
          wait 58 us 'Tiempo en recorres dos centimetros 1 de ida 1 de vuelta
       loop
   PORTB=dato 'Muestro dato por el puerto B
   wait 1 s 'Espera un segundo para visualizar el dato
   dato=0   'Reinicio dato a 0 
goto inicio

2 comentarios:

  1. excelente aplicación y más con la placa Pinguino

    ResponderEliminar
  2. amigo q pena molestar es q lo estoy intentando programar en mplab ide y no se no me sale el código y lo quiero usar para un robot oruga

    ResponderEliminar