Autor Tema: Sensor HC-SR04  (Leído 812 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Sensor HC-SR04
« en: 09 de Diciembre de 2015, 20:58:07 »
Hola, estoy intentando detectar un objeto en movimiento con dicho sensor y me gustaría saber si es posible acortar la distancia de detección.
Este es el código que tengo para probar el sensor:
Código: C
  1. /*
  2.  * File:   main.c
  3.  * Author: miquel
  4.  *
  5.  * Created on 9 de diciembre de 2015, 19:46
  6.  */
  7.  
  8. #define _XTAL_FREQ 20000000
  9. #include <xc.h>
  10. #include <pic18f2550.h>
  11. #include "config.h"
  12.  
  13. void main(void)
  14. {  
  15.     TRISBbits.RB0 = 1;  //Seteamos RB0 como entrada
  16.     TRISBbits.RB1 = 0;  //Seteamos RB1 como salida
  17.     TRISBbits.RB2 = 0;  //Seteamos RB2 como salida
  18.    
  19.     LATB1 = 0;  //Empezamos con pin TRIG apagado
  20.     LATB2 = 0;  //Led indicador de obstaculo empieza apagado
  21.    
  22.     while(1)
  23.     {
  24.         LATB1 = 1;  //Empezamos el disparo
  25.         __delay_us(10); //Tiempo que dura el disparo
  26.         LATB1 = 0;  //Finaliza disparo
  27.        
  28.         if(PORTBbits.RB0 == 1)  //Leemos el pin ECHO
  29.         {
  30.             LATB2 = 0;  //No se ha detectado ningun obstaculo
  31.         }
  32.         else
  33.         {
  34.             LATB2 = 1;  //Obstaculo detectado
  35.         }
  36.         Delay10KTCYx(25);   //Demora de 50ms antes de otro disparo
  37.     }        
  38. }
  39.  
La idea es que no detecte mas allá de 80cm.

Gracias.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
Re:Sensor HC-SR04
« Respuesta #1 en: 09 de Diciembre de 2015, 22:15:52 »
hola señor. la verdad es que si quieres medir con precision la distancia de deteccion, tienes que emplear los timers del pic. lo que debes hacer es lo siguiente:

1. Mandar el disparo
2. Encender el timer para que comience a contar
3. Al momento de detectar el obstaculo, leer el valor que tiene el timer y convertirlo a segundos.
4. como ya tenemos la cantidad de segundos que se demoro la onda de sonido en ir y volver, solo tienes que aplicar la formula para convertirlo a distancia
5. poner un if para ver si la distancia es menor de 80 centimetros, si es asi, entonces dentro del if pones lo que quieras ejecutar.

saludos

Desconectado AG1

  • PIC12
  • **
  • Mensajes: 96
Re:Sensor HC-SR04
« Respuesta #2 en: 09 de Diciembre de 2015, 22:25:42 »
Velocidad del sonido 340 m/s => 29 microsegundos por centímetro.
Como enviamos una señal y tiene que volver => 58 microsegundos por centímetro

Entonces si queremos detectar objetos a una distancia <=80cm:
58*80=4640 microsegundos

Después de enviar la señal debemos recibir el eco antes de 4641 microsegundos, en caso de recibirla mas tarde el objeto esta a más de 80cm( y si no recibimos eco es que no hay obstáculos detectables).

Salu2.


Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:Sensor HC-SR04
« Respuesta #3 en: 10 de Diciembre de 2015, 05:04:22 »
Gracias a los dos, la manera de saber la distancia que esta el objeto se como hacerlo, me refería a si habría manera de acortar la distancia en el rango de medición, si este sensor puede medir entre 2cm y 400cm que a partir de ahora solo pueda medir entre 2cm y 80cm.
Aunque siempre habría la manera que comentáis de medir el tiempo y mas allá de los 4640us dejar de tomar mediciones y volver a repetir el ciclo.     

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7854
Re:Sensor HC-SR04
« Respuesta #4 en: 10 de Diciembre de 2015, 12:15:55 »
Gracias a los dos, la manera de saber la distancia que esta el objeto se como hacerlo, me refería a si habría manera de acortar la distancia en el rango de medición, si este sensor puede medir entre 2cm y 400cm que a partir de ahora solo pueda medir entre 2cm y 80cm.
Aunque siempre habría la manera que comentáis de medir el tiempo y mas allá de los 4640us dejar de tomar mediciones y volver a repetir el ciclo.     

Saludos!

No a no ser que se modifique internamente el circuito del sensor, ademas por que harias eso ?
Como escribieron solo ver que no supere los 4641 us para saber el valor correcto.

Yo de hacerlo seria:

- Int del CCP para tomar el valor del timer, ascendete para poner a 0 el Timer, y descendete para tomar el valor del dato
- Int del timer por si hay overflow e invalidar la lectura de ser necesario o se puede dar mayor precision.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:Sensor HC-SR04
« Respuesta #5 en: 10 de Diciembre de 2015, 13:24:10 »
   
No a no ser que se modifique internamente el circuito del sensor, ademas por que harias eso ?
Mi hijo tiene un amigo el cual me ha propuesto echarle una mano con un minisumo y la idea es que como el tatami no mide mas de 77cm de diámetro, pues afinar lo máximo el sensor y no mida mas allá de los 80cm para asi evitar errores al detectar algún objeto fuera del tatami.

Saludos!
« Última modificación: 10 de Diciembre de 2015, 13:32:53 por Miquel_S »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7854
Re:Sensor HC-SR04
« Respuesta #6 en: 10 de Diciembre de 2015, 14:49:24 »
Me explique mal xD.

Mi idea de la pregunta no era sobre la aplicacion que se le iba a dar. Ya que obviamente podes tener el sensor que mide 400cm por ejemplo y solo darle importancia a las medidas de 80cm.
Lo que quise decir con mi pregunta, es por que intentarias "desmejorar" las propiedades del sensor. O al menos eso entendi que buscabas, ya que por software podrias discriminarlo sin "modificar" el sensor para nada. Para dar un ejemplo de lo que me parece y para que se entienda mejor, seria como tener un oscilador externo con regulacion de la temperatura y que lo mantiene constante, y como no te importa la variacion que puede suponer el cambio de temperatura se lo quitas. ( directamente dejaselo :P )

Espero que con el ejemplo se entienda lo que quise decir jeje.