TODOPIC

Mecatrónica => Robótica => Mensaje iniciado por: RedPic en 09 de Marzo de 2006, 15:54:00

Título: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 09 de Marzo de 2006, 15:54:00
   Después de participar en algun hilo de este Foro tratando sobre la medida de
distancias
me he dado cuenta de que tengo unos razonables conocimientos
técnicos sobre el asunto pero pueden ponerme un cero patatero en el plano
práctico. Amigos como Radón do Dogflou son verdaderos galácticos en esto
de los sensores y la adquisición de datos ... asi que ...

   He estado bicheando (o brujuleando o navegando, como queráis llamarle) por
la página de Superrobotica.com mirando cachirulos (o aparatos o cacharros)
y tengo pensado acercarme por allí este sábado con la sana intención de
adquirir un SRF04 para experimentar (cuesta 26,65 € y entra dentro de mi
presupuesto mensual para tonterias).

   El motivo de este post es consultaros si tenéis experiencia con este módulo en
concreto o alguno similar y si véis alguna problemática que se me escape. Además
deseo ir posteando los distintos experimentos que haga con él y las experiencias
que resulten.

Abajo os pego algunas de las características de este módulo:

Tensión 5V
Consumo 30 mA Tip. 50mA Max.
Frecuencia: 40 Khz.
Distancia Mínima: 3 cm.
Distancia Máxima: 300 cm.
Sensibilidad: Detecta un palo de escoba a 3 m.
Pulso de Disparo 10 uS min. TTL
Pulso de Eco: 100 uS - 18 mS
Retardo entre pulsos: 10 mS Mínimo
Pulso de Eco: 100 uS - 18 mS
Tamaño: 43 x 20 x 17 mm
Peso: 10 gr.

SFR04 :



Rango de Uso :



Cronograma :



Viendo el cronograma de arriba no encuentro especiales dificultades en manejar
el sensor con dos pines del pic, incluso con uno solo dándole el pulso de disparo
y posteriormente cambiando a entrada dicho pin y leyendo el eco. Solo habría
que aislar ambos pines en el sensor para que no se interfieran entre ellos con
un par de diodos.

Además tengo la intención de montarlo sobre un par de servos que tengo por
aquí, colocando uno sobre el eje del otro perpendicularmente y poder de este
modo moverlo a cualquier posición de una semiesfera frontal. Desearía poder
realizar un análisis tridimensional de lo que hay dentro de esa semiesfera de
3 metros de radio. Uff, ya empiezo a complicarlo y todavía no se como funciona
pero es que mi perro y yo somos así ...

En fin, espero vuestras impresiones.

(P.D. Nocturno, creo que tú sabías o habías ido alguna vez por esta tienda y me
gustaría que me indicases cual es la mejor forma de llegar
)







Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 10 de Marzo de 2006, 10:13:00
Nunca he trasteado con ultrasonidos, sera "que mi presupuesto mensual para tonterias" no me ha llegado Sonrisa GiganteSonrisa GiganteSonrisa Gigante Pero si que me regalaron un par de capsulas que aun siguen en el cajon esperando que les saque probecho. Por lo que escuchado la unica dificultad que entraña es los problemas con los ecos y demas, pero ya te digo estoy "pezcaito en blanco" con esto Avergonzado

Aver si acabo de una vez (a falta de un par de semanas) el curso!!! Y me pongo a trastear de nuevo y ahora que tengo algunas pelas alo mejor me pillo tb un modulito de estos y me pongo contigo Vacilando

Lo que si creo haber visto es la rutina de este ... pero en asambler Llorando
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: LordLafebre en 10 de Marzo de 2006, 10:48:00
Hola:

En la pagina de Bruce Rainolds, trata un poco sobre navegacion de robotitos por IR, RF y ultrasonido, si les sirve pueden mirar aqui:

http://www.rentron.com/Micro-Bot/index.htm

en la parte de:  Infrared & Sonar Navigation

muestra un codigo en Basic para el SRF04, de pronto te puede servir como inicio.

Suerte...!!! Sonrisa Gigante
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 10 de Marzo de 2006, 11:19:00
Mi gozo en un pozo (temporal).

Acabo de llamar a Superrobotica para saber si tenía existencias ...
y me han dicho que sí, pero que mañana Sábado no abren y que hoy
Viernes cierran a las 18.30  (son las 18:15 en el momento de llamar)
así que tendría que hacer 12 Km en una de las autopistas mas colapsadas
del mundo mundial para llegar .....

Va ser que nó. Que habrá que esperar al Lunes .... desquiciado desquiciado desquiciado

Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 17 de Marzo de 2006, 13:32:00
¡Tararí, tararí, que te ví!

Ya tengo en mi poder un magnifico sensor de distancias por ultrasonido SFR04
acabado de adquirir en la sevillana tienda de Superrobotica esta misma tarde.

Ahora a ponerme a implementar los timmings necesarios para una perfecta
comunicación entre él y mi 16F628 ... el de la RRBOARD1 que hasta hace muy
poco estábais visitando desde Internet ... el mismo que viste y calza y que
ahora se va a poner a generar la información necesaria para realizar el Mapa
Tridimensional de mi Habitación ....

Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 17 de Marzo de 2006, 16:36:00
Tienen tienda fisica entonces? dirección? yo quiero uno Muchas risas
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 18 de Marzo de 2006, 01:04:00
SuperInventos / Superrobotica

C/ Ciaurriz 142, 1ºB

41927 Mairena del Aljarafe, SEVILLA

(Urbanización Simón Verde, Junto al Hotel Sevilla Suites)

Horario: de 9 a 14 y de 16 a 18.30 horas de Lunes a Viernes

Los sábados no abren.

Teléfono: (34) 902 303 180



La mejor manera de llegar desde Sevilla es subiendo a la cornisa del Aljarafe
desde la autovia de Coria, antes de llegar a Gelves, justo después de pasar la
rotonda de Arrocerías Hervas, a la derecha y hacia arriba. Entras por ahí
directamente en la calle Ciaurriz, una vez coronada la cuesta hay unos 3 Km
hasta la tienda.

Ésta se encuentra en un edifico adyacente al Hotel Sevilla Suites. En el frente
que dá a la calle Ciaurriz hay un Kiosko de prensa y una Cafetería. Entre ambos
encuentras la entrada a un patio interior desde el que se accede a la primera
planta por la escalera que hay a la izquierda, según se entra. En el pasillo superior
casi al borde mismo del edifico tienes la entrada, en el extremo opuesto por el
que has subido. Sobre dicha entrada un gran cartel luminoso LCD de color rojo
te informa que el tugurio se llama: Superinventos.

Coordenadas geográficas para GoogleEarh o GPS :  37°20"13.25"N   6° 2"15.81"W


Si quieres te llevo de la manita ... Muchas risas Muchas risas Muchas risas jua, jua, jua Muchas risas Muchas risas Muchas risas



Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 18 de Marzo de 2006, 08:40:00
Escrito originalmente por RedPic

Si quieres te llevo de la manita ... Muchas risas Muchas risas Muchas risas jua, jua, jua Muchas risas Muchas risas Muchas risas



Gracias jejej Muchas risas creo que me fiare del GPS Flash
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 18 de Marzo de 2006, 15:00:00
Avance sobre el estado del experimento:

Ya he realizado las conexiones eléctricas pertinentes y comienzo a desarrollar
el programa para completar el experimento. Voy a utilizar de base el RROS de la
RRBOARD1
que ya conocéis de otros trabajos míos, y bajo petición desde el PC
vía RS232 pretendo que el SRF04 realice una única medida y me trasmita el
resultado por el mismo canal. Como véis en la imagen de abajo he montado el
SRF04 de forma que tengo un regla entre él y el obstaculo que tiene delante,
el osciloscopio, con lo que intentaré relacionar los datos que me envíe con la
distancia real a la que se encuentra de éste:




Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 18 de Marzo de 2006, 16:53:00
Bueno, esto ha sido más rápido de lo que yo esperaba. Rebotado Rebotado Rebotado

He aplicado exactamente los criterios expuestos mas arriba, en la hoja técnica
del SRF04 que proporciona el fabricante, y todo ha funcionado a la primera.  Divertido

Os copio el fuente marcando en rojo lo estrictamente necesario para el manejo
del SRF04. El programa queda tal como sigue:

Codigo:


/////////////////////////////////////////////////////////////////////////////////////////
//
// RROS para RRBOARD1 : SRF04 Test
//
// © 18.03.2006 By RedRaven
//
// Hardware: PIC16F628
//
//           RA0      SRF04 Input Echo
//           RA1      SRF04 Trigger

//           RA2,RA3  Leds
//           RB1      USART RX
//           RB2      USART TX
//           RB5      Buzzer Driver
//           RB6,RB7  ICSP
//
//           Xtal Ext. 4.00 Mhz
//
// Idioma: CCS PICC v.3.242
//
//
/////////////////////////////////////////////////////////////////////////////////////////

#include <16f628a.h>
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)

#include <stdlib.h>

// Constantes y definiciones ////////////////////////////////////////////////////////////

#define SRF04_PORT_TRIGGER PIN_A1                // Pin usado para el pulso de Disparo
#define SRF04_PORT_ECHO    PIN_A0                // Pin usado para recibir el eco ultrasónico

#define TIME_TRIGGER_uS  10                      // Longitud del pulso de disparo 10 uS (microsegundos)
#define TIME_NEXT_TRIGGER_mS 10                  // Espacio entre echo y siguiente disparo 10 mS (milisegundos)
#define MAX_ECHO_RESPONSE_Ticks 35000            // Maximo tiempo de espera del eco en Ticks de Timer1 (35 ms)
#define CALC_DISTANCE(t) (t / 58)                // Convierte de Ticks a distancia
#define DISTANCE_INFINITE (0xffff)               // Distancia infinita, no hay obstaculo en el rango de medida


// De RROS

int const MAXLENBUFF=24;                         // Maxima longitud de los bufferes
int const MAXLENCOMMAND=12;                      // Maxima longitud de un comando (sin argumentos)
int const NUMPAGSEEPROM=7;                       // Numero de paginas (de 16 bytes) de la EEPROM interna

// Variables Globales ///////////////////////////////////////////////////////////////////

long echo_delay;
long distance = DISTANCE_INFINITE;


// De RROS

char buffrec[MAXLENBUFF];                        // Buffer de Recepcion
int  xbuffrec=0x00;                              // índice del Buffer de Recepcion
int1 new_command=0;                              // Flag para indicar comando disponible
int1 pdte_send_prompt=0;                         // Flags para enviar echo fuera de la int_rda
int1 pdte_send_tmp_prompt=0;
char xcommand[MAXLENCOMMAND];                    // Comprobador de comando recibido

// Declaracion de Funciones /////////////////////////////////////////////////////////////

void On_reset(void);                             // Tras RESET del Micro
void Send_listen(void);                          // Monitoriza RS232 : Comienzo
void Send_opts(void);                            // Monitoriza RS232 : Presenta opciones
void Send_prompt(void);                          // Monitoriza RS232 : Presenta el Cursor
void Send_tmp_prompt(void);                      // Monitoriza RS232 : Presenta el Cursor y el comando actual
void Ini_buffrec(void);                          // Borra el buffer de recepción
void Add_buffrec(char c);                        // Añade un caracter al buffer de recepción
void Procesa_comando(void);                      // Procesado de comandos

void realiza_medida(void);                       // Realiza una medida completa

// INTERRUPCIONES ///////////////////////////////////////////////////////////////////////

// INTERRUPCION RDA - Recepción USART -

#int_rda
void serial_isr() {
   if(kbhit()){                                  // Si hay algo pendiente de recibir ...
      Add_buffrec(getc());                       // lo recibo y lo añado al Buffer de Recepcion
   }
}

// Control del Buffer de recepcion ---------------------------------------

void Ini_buff_rec(void){                         // Inicia a "" el Buffer de Recepcion

   int i;
   for(i=0;i<MAXLENBUFF;i++){                    // Bucle que pone a 0 todos los
      buffrec[ i ]=0x00;                           // caracteres en el Buffer de Recepcion
   }
   xbuffrec=0x00;                                // Inicializo el indice de siguiente caracter recibido
}

void Add_buffrec(char c){                         // Añade caracter al Buffer de Recepcion

      switch(c){
         case 0x0D:                              // [Enter] -> Habilita Flag para procesar comando en Main
            new_command=1;
            break;
         case 0x08:                              // [Del]   -> Borra último caracter del Buffer
            if(xbuffrec>0){                      //            Si hay algo en el buffer
               buffrec[--xbuffrec]=0x00;         //            decremento el índice, escribo un cero y ...
               pdte_send_tmp_prompt=1;           //            habilito flag para refrescar el prompt
            }
            break;
         case 0x01B:                             // [Esc]   -> Borra el Buffer completamente y ...
            Ini_buff_rec();                      //            habilito flag para refrescar el prompt
            pdte_send_prompt=1;
            break;
         case 0x009:                             // [Tab]   -> Refresca el prompt y el comando tal como esté
            pdte_send_tmp_prompt=1;
            break;
         default:
            buffrec[xbuffrec++]=c;               // Añade caracter recibido al Buffer
            putc(c);                             // y lo monitorizo
      }
}

// Rutinas y Funciones de RROS ///////////////////////////////////////////

void On_reset(void){                             // Inicializacion del Micro tras RESET

   disable_interrupts(GLOBAL);                   // todas las interrupciones desactivadas

   delay_ms(100);

  output_low(SRF04_PORT_TRIGGER);               // A bajo el pin del disparador
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);     // Timer1 con preescaler 1:1


   Ini_buff_rec();                               // Inicializo Buffer de recepcion
   new_command=0;                                // Desactivo flag de comando pendiente.
   pdte_send_prompt=0;                           // Desactivo Flags para enviar echo fuera de la int_rda
   pdte_send_tmp_prompt=0;

   enable_interrupts(int_rda);                   // interrupcion RDA habilitada
   enable_interrupts(global);                      // todas las interrupciones activadas

   Send_opts();                                  // Presenta Comienzo
   Send_prompt();                                // Presenta el Cursor

}

void Send_listen(void){                          // Presenta Comienzo

   printf("SRF04 Ultrasonic Ranger Test

" );
}

void Send_opts(void){                            // Relación de comandos válidos

   printf("

" );
   Send_listen();
   printf("
" );
   printf("[?] comandos válidos
" );
   printf("[r] realiza una medición

" );
}

void Send_prompt(void){                          // Presenta el cursor

   printf("
>" );
}

void Send_tmp_prompt(void){                      // Presenta el cursor con el comando actual

   printf(">%s",buffrec);
}

// MAIN Programa Principal ///////////////////////////////////////////////

void main(void)
{
   On_reset();

   do {

      // Deteccion de la necesidad de procesar comandos pendientes ///////
      if(new_command==1){                        // Si hay un nuevo comando ...
         new_command=0;                          // deshabilito el aviso y ...
         Procesa_comando();                      // Procesado de comandos
         Ini_buff_rec();                         // inicializo todo para nuevo comando y ...
         pdte_send_prompt=1;                     // mando prompt.
      }

      // Deteccion de la necesidad de enviar echos ///////////////////////
      if(pdte_send_prompt==1){
         pdte_send_prompt=0;
         Send_prompt();
      }
      if(pdte_send_tmp_prompt==1){
         pdte_send_tmp_prompt=0;
         Send_tmp_prompt();
      }

     } while(TRUE);
}

// Funciones de Comando //////////////////////////////////////////////////

void realiza_medida(void){

  delay_ms(TIME_NEXT_TRIGGER_mS);                // Espero para asegurarme que hay espacio entre eco y disparo
  output_high(SRF04_PORT_TRIGGER);               // Envío el pulso de disparo
  delay_us(TIME_TRIGGER_uS);                     // espero el ancho de pulso requerido
  output_low(SRF04_PORT_TRIGGER);                // termino el pulso
  for ( ; !input(SRF04_PORT_ECHO); );            // Espero el inicio del pulso del eco (flanco de subida)
  set_timer1(0);                                 // Cuando llegue pon a cero el Timer1
  for ( ; input(SRF04_PORT_ECHO); );              // Espero al final del pulso del eco (flanco de bajada)
  echo_delay = get_timer1();
  if (echo_delay >= MAX_ECHO_RESPONSE_Ticks){
    distance = DISTANCE_INFINITE;
  }
  else {
    distance = CALC_DISTANCE(echo_delay);
  }
}


// Procesa_comando: Hace cosas o manda hacerlas ... //////////////////////

void Procesa_comando(void){

   int1 procesado_ok=0;
   int waddress, wbyte;

   // COMANDO = "" intro en blanco ---------------------------------------
   strcpy(xcommand,"" );
   if(!strcmp(buffrec,xcommand)){
      procesado_ok=1;
      goto fin_procesa;
   }
   // COMANDO = "?" ------------------------------------------------------
   strcpy(xcommand,"?" );
   if(!strncmp(buffrec,xcommand,strlen(xcommand))){
      Send_opts();
      procesado_ok=1;
      goto fin_procesa;
   }
   // COMANDO = "r" ------------------------------------------------------
   strcpy(xcommand,"r" );
   if(!strncmp(buffrec,xcommand,strlen(xcommand))){
     realiza_medida();
      printf(" -> %lu cm (%lu)
",distance,echo_delay);

      procesado_ok=1;
      goto fin_procesa;
   }

fin_procesa:

   // COMANDO ERRÓNEO - ¿ezo qué é lo que é ?-----------------------------
   if(procesado_ok==0){
      printf("
?%s",buffrec);
   }

}






Si queréis descargar el fuente lo tenéis aqui



En cuanto a los resultados me he dedicado a acercarlo y alejarlo del obstaculo
que le puse delante, comparando lo que me enviaba con lo medido con la regla
y es bastante exacto, +-1cm, entre 3 cm y entre 3 y 4 metros.







Ahora creo que debo probar la resolución lateral del SRF04, o sea la directividad
de la medida, haciendo mas o menos ancho el objeto a detectar, para saber qué
tipo de medida es la que estoy realizando.

 Sonrisa Gigante Sonrisa Gigante Sonrisa Gigante Sonrisa Gigante Sonrisa Gigante Sonrisa Gigante








Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 18 de Marzo de 2006, 17:52:00
Como te lo curras redpic!!! Voi a tener que pegarme un viajecito a mairena ya!!

Por cierto, ya estas tardando en montarlo en un servo y montarte un radar Sonrisa GiganteSonrisa Gigante
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: dogflu66 en 18 de Marzo de 2006, 18:27:00
Todo a supervelocidad, se ve muy bien el proyecto…Sonrisa
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 19 de Marzo de 2006, 13:02:00
Gracias al trabajo realizado en este foro, acabo de concluir la publicación en mi Web
el artículo dedicado al Circuito auxiliar de medición de distancias por ultrasonidos SRF04

En éste he comenzado con una breve descripción de los fundamentos de la medición
y desearía hacer el viaje de vuelta y publicar aquí dicha introducción. Así este hilo
quedaría mas completo y redondo: Peinado y con su colonia puesta. Muchas risas Muchas risas Muchas risas


Cita:

   El objetivo de este circuito auxiliar es el de medir distancias, utilizando para ello dos transceptores de ultrasonidos, uno emisor y otro receptor, basándonos en el tiempo que tarda la señal en ir desde el emisor hasta el objeto obstáculo y volver rebotada desde éste hasta el receptor. Midiendo dicho tiempo podemos calcular con suficiente precisión y exactitud la distancia entre el objeto y nuestros transceptores.

   Primero unos pocos datos e ideas de teoría física básica y la descripción de los cálculos que necesitamos hacer para implementarlos en nuestro programa:

Los ultrasonidos son antes que nada sonido, exactamente igual que los que oímos normalmente, salvo que tienen una frecuencia mayor que la máxima audible por el oído humano. Ésta comienza desde unos 16 Hz y tiene un límite superior de aproximadamente 20 KHz, mientras que nosotros vamos a utilizar sonido con una frecuencia de 40 KHz. A este tipo de sonidos es a lo que llamamos Ultrasonidos.

(1) El sonido se desplaza en el aire a una velocidad de 340 m/s a una temperatura de 20º C, con una variación térmica de 0.6 m/s por cada grado centígrado. Así, por ejemplo, a 30º C de temperatura del aire, la velocidad del sonido es de 340 m/s + (0.6 m/s/º C * 10º C) = 346 m/s (Intervienen otros parámetros pero que vamos a dejar de lado en este trabajo por complicarnos excesivamente sin aportarnos mayor resolución)

(2) La distancia d recorrida por un móvil es directamente proporcional a la velocidad v de éste y al tiempo t empleado en ello. Podemos escribirlo como una fórmula en la sencilla forma:

d = v * t

dónde d es la distancia recorrida en metros, v la velocidad en metros por segundo y t el tiempo en segundos.

esta misma relación la podemos escribir de otra forma que nos relacione el tiempo con las otras dos variables, estableciendo que el tiempo t que tarda un móvil en recorrer una distancia d es inversamente proporcional a la velocidad v del mismo y directamente proporcional a la distancia d a recorrer:

t = d / v

dónde t el tiempo en segundos, d es la distancia en metros y v la velocidad en metros por segundo.

Si deseamos medir una distancia usando los ultrasonidos tenemos que emitir un pulso ultrasónico breve, esperar que llegue hasta el obstáculo a sensar, se refleje en éste y vuelva hasta nuestro dispositivo sensor, midiendo entonces el tiempo t que ha tardado en hacer todo el trayecto de ida y vuelta mediante nuestro microcontrolador PIC. Conociendo la velocidad v a que se ha desplazado nuestra onda tal como hemos visto en (1), podemos fácilmente calcular según lo xpresado en (2) la distancia d entre el sensor y el objeto.

Por ejemplo:

Un objeto situado a 15 cm. de nuestro sensor, con una temperatura del aire de 20º C, debe emitir un eco tras nuestro pulso que debe tardar en llegar  t = (0.15 m / 340 m/s) * 2 = 0.000882 segundos (o escrito de otra forma 882 uS, microsegundos)

Date cuenta del detalle de que multiplicamos por 2 el tiempo empleado debido a que el sonido debe ir y volver reflejado desde el objeto, por lo que recorre dos veces la distancia que separa al sensor del objeto.






Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 19 de Marzo de 2006, 15:14:00
Buen trabajo RedPic, muy agradecido por compartirlo Giño
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 19 de Marzo de 2006, 15:46:00
De nada, amigo Radón, a mandar que para eso estamos ... Rebotado Rebotado Rebotado

Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: dogflu66 en 19 de Marzo de 2006, 16:14:00
Magnifico trabajo diego, cuando publiques un libro con todos tus experimentos reservame uno firmado… Muchas risas
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: I3iT en 20 de Marzo de 2006, 05:57:00
Impresionante!!!

LLevaba tiempo sin darme una vuelta por aqui, pero creo que tu aportación se merece una FELICITACION como poco.

>Salu2<
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 20 de Marzo de 2006, 14:14:00
Mas información sobre mis pruebas con el SRF04.


Como le decía en privado al amigo Radón, cojo una calculadora y me vuelvo loco. Demonio

Hay una línea en el programa que imaginaba iba a desatar todos los demonios de
preguntas sobre su exacto significado:

Codigo:

#define CALC_DISTANCE(t) (t / 58)                // Convierte de Ticks a distancia




Y sin embargo nadie me ha aturrullado a preguntas con ella ...
pero no os váis a a librar tan facilmente de que hable de ella ... Muchas risas Muchas risas Muchas risas

¿De donde sale ese número 58? ¿por qué 58 y no 85 por ejemplo?
Pues si tomamos la calculadora y hacemos unas pequeñas operaciones con ella
podemos ver como llegamanos a ese número.

Nuestro PIC decíamos que tiene un cuarzo de 4 Mhz y como el TIMER1 lo hemos
configurado para un Preescaler de 1:1 tenemos que cada incremento, Tick, del
mismo dura 1 uS (un microsegundo).

Con él medimos el ancho de pulso del eco del ultrasónico aparato, así que dicho
ancho de pulso nos viene dado en microsegundos (1/1000000 de segundo).

Como la velocidad del sonido decíamos que era de unos 347 metros/segundo y
como un metro tiene 100 centimetros y un segundo tiene 1000000 (un millón) de
microsegundos podemos multiplicar 347 por 100 y dividirlo por 1000000 para
pasarlo a cm/uS con lo que nos queda 0,0347

Y como decíamos que el sonido tenía que ir y volver y solo nos interesa uno de los
sentidos de su viaje, tenemos que dividir esto por 2 por lo que tenemos 0,01735.

Y por fín solo nos queda ver que este desplazamiento es la inversa del tiempo
empleado luego 1/0.01735 = 57,63688 que es el número que buscamos.

Como estamos ajustado a un entero (centimetros) lo redondeamos a 58 y aquí
paz y allí gloria.

Conclusión: Cojemos los Ticks de Timer1, que hemos contado entre los flancos de
subida y bajada del eco, y lo dividimos por 58 para tener los centimetros a que se
encuentra el obstáculo. Divertido

Corolario: ¿Y por qué un entero? Si cambiamos el cálculo y le dejamos los
decimales, y si cambiamos el tipo de la variable donde recogemos la distancia
de entero de 16 bits a float de 32 bits, y si cambiamos el printf para mostrar un
float con un decimal nos aparece:





¡¡¡ Y funciona con la presición de 1 milimetro !!!

¡¡¡ Comprobado con una regla graduada (doble decímetro para los ingenieros) !!!

Rebotado  Muchas risas  Rebotado  Muchas risas  Rebotado  Muchas risas  Rebotado

(Nota: yo he puesto exactamente 58.823 para ajustarlo exactamente a la temperatura
ambiente de mi habitación)



Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: angelmoi123 en 20 de Marzo de 2006, 20:35:00
Saludos

Diego, otro de tus proyectos exitoso.
Te felicito hermano, con tu dedicación y  explicaciones has logrado mucha motivación entre todos los miembros de este foro.
Estoy seguro que muchos de nosotros te estarán agradecidos y aprecian el gran esfuerzo y la manera incondicional que la has puesto al querer compartir los proyectos con todos.

Yo por mi parte te comento que el pavor que le tenía al C, ya se ha disipado.

Muchas gracias hermano.

angelmoi123
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: Nocturno en 22 de Marzo de 2006, 10:08:00
Joe, macho, me despisto un momento y la que has armado.

Empecé leyendo que querías comprarlo y que te ayudase a llegar a la tienda, y cuando me disponía darle a Responder, veo que ya has llamado a la tienda, has ido, lo has comprado, lo has probado, has hecho la aplicación, la has publicado en tu web, nos has dado una clase magistral...

Monstruo, danos un respiro, joder, que vas mucho más rápido de lo que podemos leer Muchas risas
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 22 de Marzo de 2006, 12:00:00
ja, ja, ja Muchas risas Muchas risas Muchas risas Es que estoy desencadenao ....

me lo paso tan bien haciendo estas tonterías que es como si tuviese fiebre ...
empiezo con un tema y no se donde parar ... ni cuando ....  invasor

¡¡¡ Hay tantas cosas por hacer !!!! Y tan poco tiempo .... Ardiendo



Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 28 de Marzo de 2006, 12:51:00
Ya tengo mi modulito jejeje !! y tb me pille la base para el servo Sonrisa Gigante

(en la foto con mi nuevo GPS BT + Nokia N70 + Tomtom Mobile 5.2 que me llebo a mairena y me trajo en un santiamen!! jeje, como me gusta farardear :P )


Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 29 de Marzo de 2006, 00:44:00
Ja, ja, ja Muchas risas Muchas risas Muchas risas Bienvenido al Club de los Ultrasónicos, amigo Radon

Ahora estaba haciendo una alarma por cercanía para montarla en el coche
(auto, carro) ... por debajo de 1 metro un pitido espaciado, por debajo de 0.5 m
dos pitidos mas cercanos, por debajo de 15 cm cinco pitidos separados un segundo,
y a los 5 cm un pitido continuo ....

Mas cerca ... ya oiré el porrazo en el paragolpes ja ja ja Muchas risas Muchas risas Muchas risas


Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 29 de Marzo de 2006, 03:05:00
Escrito originalmente por RedPic

Mas cerca ... ya oiré el porrazo en el paragolpes ja ja ja Muchas risas Muchas risas Muchas risas



Eso es lo que se conoce aquí como aparcar de "oído" Muchas risasMuchas risas Creo que iré tb por un par de servos (los que tengo por aquí estan trucados Enfurruñado) e intentaré hacer la libreria usando alguna interrupción o el móculo CCP en captura.

Edito:

esto tiene buen aspecto Sonrisa

Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 31 de Marzo de 2006, 00:01:00
Radón:

O hacemos este proyecto o nos borramos de la lista de Picmaníacos ...

Tenemos el hardware necesario, los conocimientos ¿y las ganas? ....

Yo sí. Y voy a hacerlo.

Proyecto : Ultrasonic Radar

Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: LordLafebre en 31 de Marzo de 2006, 10:18:00
Hola:

Interesante el link y el proyecto, yo los seguire muy silencioso Giño Sonrisa Gigante
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 31 de Marzo de 2006, 11:41:00
Síguelo, amigo Lordlafebre, pero no en silencio. Que tu docta opinión es siempre
bien recibida y valorada. Giño

Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: LordLafebre en 31 de Marzo de 2006, 11:50:00
Hola:

El problema es que quisiera hacerlo yo tambien pero no consigo nada de eso por aqui Llorica...
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: vszener en 31 de Marzo de 2006, 12:50:00
Jeje haber si vais a tener problemas con los radares rusos y yankis!!!!jeje fantastico proyecto, ya me habeis animado para conseguir un modulito de esos!!!


Suerte!!!Giño
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 31 de Marzo de 2006, 14:16:00
Escrito originalmente por RedPic
Radón:

O hacemos este proyecto o nos borramos de la lista de Picmaníacos ...

Tenemos el hardware necesario, los conocimientos ¿y las ganas? ....

Yo sí. Y voy a hacerlo.

Proyecto : Ultrasonic Radar




Hace tiempo que vi algo similar, sobre un motor paso a paso ... va estar entretenido esto Sonrisa Gigante

Me voi a ausentar una semanita por cuestiones de trabajo, estoy arbitrando elV Abierto Internacional de Ajedrez Dos Hermanas. Pero intentaré seguir el proyecto.
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 31 de Marzo de 2006, 14:20:00
Ja, ja, ja ... Muchas risas Muchas risas Muchas risas

A los radares no sé ... pero a los perros y gatos del vecindario los voy a poner a caldo

¿No dicen que son sensibles a los ultrasonidos? Pues se van a enterar cuando saque
el RRSONAR por el patio de mi casa ...

Ja ja ja Muchas risas Muchas risas Muchas risas

La idea original, que creo que la postee por algun sitio de este bendito foro, era
montarlo sobre dos servos montados uno sobre otro y con los ejes perpendiculares
para tener movimiento 3D y poder "radarear" en los tres ejes ... Así podría saber
si mi RRBOT puede pasar por debajo de una silla, por ejemplo, o si puede subir
o bajar por un escalón no demasiado alto ... en fin, de ilusión tambien se vive.

Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 31 de Marzo de 2006, 14:21:00
Escrito originalmente por LordLafebre
Hola:

El problema es que quisiera hacerlo yo tambien pero no consigo nada de eso por aqui Llorica...


Pues en el enlace que ha dado Diego tienes el esquematico par el SFR04, puedes animarte a montartelo, no es excesivamente complejo y las capsulas ultrasonicas son muy comunes en las tiendas de electrónica, eso sí.... suelen ser algo caras.
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: Nocturno en 02 de Abril de 2006, 23:48:00
¿Comunes en las tiendas de electrónica?, ¿en las tiendas de Sevilla?, pues ya me dirás donde porque pregunté por ellas en M. León y RCO y no sabían ni de qué hablaba...
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 03 de Abril de 2006, 00:07:00
En Sevilla (capital y provincia) puedes encontrar todo un surtido variado y completísimo
de peinetas, panderetas y castañuelas; de todo color y forma conocidos y conocidas.

Pero en cuanto pidas algo tecnologicamente cercano a lo desarrollado un poco mas
allá de mitad del siglo pasado (XX) te ponen cara rara y te remiten a Madrid, Barcelona
o ... a la mierda (que es lo mas probable) Ardiendo

Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: Nocturno en 03 de Abril de 2006, 00:37:00
Vamos a tener que montar una tienda en condiciones, paisano, para que los locos como nosotros puedan encontrar los componentes que no encuentra nadie.
Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 03 de Abril de 2006, 01:36:00
Mi religión me prohibe montar una tienda de electrónica ... ni un bar, ni un prostíbulo.

(Me quedaría con todas las existencias pra mi solo ... Muchas risas Muchas risas Muchas risas )


Título: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 03 de Abril de 2006, 06:49:00
Escrito originalmente por nocturno66
¿Comunes en las tiendas de electrónica?, ¿en las tiendas de Sevilla?, pues ya me dirás donde porque pregunté por ellas en M. León y RCO y no sabían ni de qué hablaba...


A la tienda que mas le suelo comprar es a Sonytel, se que no tienen tanto surtido como M. León, pero lo que hay es barato, y si las encontre aquí lo normal es que las tenga hasta el tato  Avergonzado pero no te digo el precio que te puede dar algo Sonrisa Gigante

Edito: yo me apunto al proyecto de la tienda de electrónica RebotadoRebotadoRebotadoRebotado vamos a desbancar a todas las tienduchas de por aquí que se hacen llamar "de electrónica" Sonrisa Gigante

Edito 2: (esto comienza a paracer el Estatut de Cataluña jeje) tengo un par de cápsulas que me regalo un colega (teo), que ahora que tengo el SRF04 no creo que uses, si te animas gio a montarlo no me importa enviartelas Sonrisa
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: doppel en 07 de Abril de 2006, 01:24:32
Hola Amigos!

muy interesante lo que están haciendo!!
les dejo un trabajo que encontré por ahi que puede llegar a servirles.-

http://www.depeca.uah.es/docencia/ITT-SE/lsed2/sonar/index.htm (http://www.depeca.uah.es/docencia/ITT-SE/lsed2/sonar/index.htm)

si "vuelven" en la direccion!! encontrarán mas proyectos interesantes!!

saludos!!
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: migsantiago en 07 de Abril de 2006, 12:42:51
SI llegan a abrir su tienda electrónica por favor no se olviden de poner tienda online también  :)

Por acá si pidiera un sensor ultrasónico me dirían que estoy loco.

Así podría comprarles cositas desde acá  :D
Título: Re: RE: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: todopic en 07 de Abril de 2006, 23:28:36
Mi religión me prohibe montar una tienda de electrónica ... ni un bar, ni un prostíbulo.

(Me quedaría con todas las existencias pra mi solo ... <img   src="http://pics.miarroba.com/caretos/lol.gif" alt="Muchas risas" title="Muchas risas" /> <img   src="http://pics.miarroba.com/caretos/lol.gif" alt="Muchas risas" title="Muchas risas" /> <img   src="http://pics.miarroba.com/caretos/lol.gif" alt="Muchas risas" title="Muchas risas" /> )





Jua Jua Jua... realmente con esto del cambio, me he perdido de leer post... asi que las felicitaciones, y me diverti mucho con tus palablas Diego...


Norberto
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: CARONTE en 20 de Abril de 2006, 23:35:23
lo necesito para un proyecto de fisica aceleracion digamen podra servir.
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 21 de Abril de 2006, 02:04:05
Caronte:

Sin mas datos es dificil contestarte, pero lo voy a intentar ....

Midiendo distancias con el SFR04 entre un punto movil y otro fijo, esté montado el SFR04 independientemente en uno o en el otro, tienes las dos bases necesarias para ver como evoluciona ésta, la distancia, con respecto al tiempo, ten encuenta que tu programa controla perfectamente cada cuanto tiempo realizas el test de distancia. Con ellos es fácil calcular aceleraciones. sin embargo ...

No creo que sea muy eficaz en móviles rápidos o con movimientos cortos, para este tipo de movimientos los tiempos involucrados creo que pueden llegar a ser del orden de presición del SFR04 por lo que no tendrías exactitud en las medidas .

Un saludo.
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 21 de Abril de 2006, 07:19:10
Creo que algo de por aquí te vendrá bien... dependiendo del nº de g que quieras medir:

http://www.freescale.com/webapp/sps/site/homepage.jsp?nodeId=011269
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: Kid_Bengala en 22 de Abril de 2006, 11:12:22
Hola:

Antes de nada felicitarte RedPic, estas hecho un monstruo de los PIC.yo te queria preguntar una cosa o a los demas si pueden responderme ¿Sabeis si se pueden adquirir otros sensores que esten las capsulas sueltas? es que yo quiero hacerme una alarma para el interior (volumetrico) y claro los sensores estarian mas separados.

Por cierto, esto tambien igual rebajaria su coste ¿no?. Ya se que esto lo hacemos porque nos gustan los pic y queremos hacer nuestras propias cosas pero por coste es mas caro sino mirar esto http://cgi.ebay.es/ws/eBayISAPI.dll?ViewItem&item=8056283317.

Otra cosa mas ¿alguien sabe como funciona una alarma volumetrica y darme unas nociones? gracias.

saludos,
Antonio
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RaDoN en 22 de Abril de 2006, 14:18:12
Creo que para la alarma volumétrica puedes usar el sfr04 perfectamente, la idea es estar midiendo distancias constantementes segun la posición marcada por ejemplo con motores paso a paso o servos, los primeros datos los almacenas, digamos que seria como una inicialización de la alarma, depues si en una posición la distancia varia es que algo se movió...
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: xjulenx en 09 de Agosto de 2006, 12:45:42
muy buenas,  no sé si este hilo seguirá funcionando, pero de cualkier manera he estado ojeando un poco y lo encuentro muy interesante. yo tambien estoy trabajando con un SRF04 programado en ensamblador para el 16f874, pero sin embargo no estoy consiguiendo la precision ke me gustaria, o la ke veo ke teneis por ahí.. (más o menos me mide bien de cm en centímetro, pero incluso en distancias cortas, la medida varia un poco, no se mantiene estable.)

funciona aparentemente bien hasta los 80 cm, aunke si aplico la conversion de 58 me mide siempre 5 cm de más y segun kreo tengo el preescaler bien configurado.. (hasta ahí tampoco representa un problema ya ke siempre puedes aplica la conversion ke te de la gana.. )
el tema eske a partir de 80 cm le cuesta bastante más detectar objetos, no los pilla muy bien, a veces falla y está continuamente oscilando entre valores bastante diferentes...

utilizamos el módulo ccp1 para medir la duracion del pulso en la puerta RC2..

pues nada, si alguien tiene algún comentario/sugerencia o compartir sus experiencias de campo con el SFR04 estaré muy agradecido!

saludos!
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: aitopes en 13 de Agosto de 2006, 16:14:42
Hola!
Yo tengo el emisor y receptor identicos a los del SFR04, pero sin la logica de control....sera muy complicado conseguir el esquema del modulo para hacerlo en casa? :mrgreen:


Saludos!
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: RedPic en 13 de Agosto de 2006, 16:29:02
Ahí tienes  ...  :mrgreen:

(http://picmania.garcia-cuervo.com/images/BOT_SRF04_Schema.gif)
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: LordLafebre en 13 de Agosto de 2006, 18:34:39
Hola:

aitopes, he visto que usas Basic, aqui te adjunto un documento para hacer lo que quieres y un ejemplo utilizando Proton, un porsiacaso el documento no es mio, no recuerdo de donde lo descargue aun no lo pruebo no llegan todavia los sensores, pero si lo puedes probar, me gustaria saber como te fue.  :mrgreen:

http://rapidshare.de/files/29290871/Ultrasonidos_y_proton.rar.html
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: aitopes en 13 de Agosto de 2006, 18:37:58
Hola Redpic! Gracias por el esquema, no pense que iba a ser tan rapido... :)

Hola Lord! (puedo usar el diminutivo? :D) . Gracias por el programa, pero no lo veo adjuntado....puede ser que no lo hayas puesto o no lo estoy buscando donde deberia?

Muchas gracias a los dos!
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: LordLafebre en 13 de Agosto de 2006, 18:44:10
Hola Lord! (puedo usar el diminutivo? :D) . Gracias por el programa, pero no lo veo adjuntado....puede ser que no lo hayas puesto o no lo estoy buscando donde deberia?

No hay problema hermano, mi nick, mi nombre, mi apellido como gustes, en verdad que no pude adjuntar el archivo en el post anterior pero lo subi a rapidshare, ya te puse el link en el post anterior.

Saludos.
Título: Medidor de distancias mediante Ultrasonidos SFR08 usanso pic16f877 en asembler
Publicado por: guaro en 08 de Marzo de 2007, 18:54:35
Hola Diego, tengo un problema con el sfr08 (ULTRASONIDO) y no lo e podido poner a funcioanar y tu eres el unico en el foro que has trbajado con el pero C, yo nesecito de tu ayuda pero en asembler si me puedes ayudar con la rutinas de i2c para controlar el sfr08.
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: BrunoF en 03 de Marzo de 2008, 10:40:58
Hola muchachos.

Bueno, resulta que no se si estoy malinterpretando o bien no estoy dando con las respuesta, pero alguien podría decirme cuál es la precisión en la medición del SFR04,SFR05 y/o SFR08?

El SFR08, por lo que vi, tiene bastantes diferencias con los dos anteriores(04 y 05) como el I2C, pero lo que me intriga es la precisión:
Si no me fallan las neuronas, juraría que posee 16bits de resolución. ¿Esto implicaría que mi mínima variación(delta x) sería de RangoSeleccionado/1024?

Es decir, si quiero medir hasta 1 metro, ¿sería tan simple como hacer 100cm/1024 = 0,097..cm?

Saludos!
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: akorb en 27 de Mayo de 2008, 17:41:38
Hola!

Soy una estudiante de electrónica en Brasil, tengo un que hacer un trabajo con el SRF04 y con PIC 16F628.
Yo uso una rutina casi igual a la que escribió el RedPic.
Tengo una duda sobre la frecuencia de oscilación ....
debo utilizar un cuartzo de 20Mhz, y tengo dudo con el preescaler.... ¿como debo poner el preescaler Timer 1??

si uso el cuartzo= 20 MHz / 4Mhz (interior) = 1.250.000

entonces mi preescaler Timer 1 → preescaler 1:2
para tener que cada incremento (Tick) del mismo dura 1 us

¿mi cálculo es correcto...? ¿...preescaler 1:2?

Gracias por ayudar
lo siento por mi español .... no hablo muy bien ... :)


Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: dogflu66 en 28 de Mayo de 2008, 08:46:17
Si no recuerdo mal, la formulita para hacer que el timer1 desborde a un tiempo determinado es la siguiente:

Vreg. = 65536 - (Tseg. / (1 / (F. cristal/4)) * Prescaler)

Vreg. = Valor a cargar en el registro del timer, por desborde del timer1

65536 = Contador 16Bit

Tseg. =  Tiempo a temporizar por desborde del timer

1 / (F. cristal / 4) = periodo que tarda en incrementarse el timer

F. cristal = Frecuencia del Clock

F. cristal / 4 = Frecuencia que tarda en incrementarse el timer o ejecutar una instrucción maquina.

Prescaler = divisor
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: dogflu66 en 28 de Mayo de 2008, 09:10:46
Y en modo contador:

Prescaler = Tseg. / (1 / (F. cristal /4))

Tseg. = Incremento del Timer1 (Tick)

Por supuesto el Prescaler tendrá que ser el más próximo permitido.
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: akorb en 28 de Mayo de 2008, 14:32:53

gracias por su atención...

Voy a calcular de nuevo mi rutina!    :mrgreen:
Título: Re: Medidor de distancias mediante Ultrasonidos SFR04
Publicado por: elcp474 en 07 de Septiembre de 2011, 13:47:23
Que tal a todos, espero no ensuciarlos al desempolvar este tema  :mrgreen:

Bueno, solo tengo una pequeña consulta... necesito sensar un predio de parqueos que está bajo techo, y necesito saber cuando un auto se ha estacionado y para ello quiero poner uno de estos bichitos en cada espacio de auto... pero a lo que voy es que necesito saber que tan confiable son este tipo de sensores al esstar bajo condiciones de polvo, humo, algo de humedad, etc...

Gracias!