Autor Tema: Sensor ultrasonico  (Leído 422 veces)

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

Desconectado lunago13

  • PIC10
  • *
  • Mensajes: 14
Sensor ultrasonico
« en: 18 de Diciembre de 2018, 00:13:58 »
Hola, quisiera hacer un programa con un pic16f887 y un sensor ultrasonico HC-SR04. Lo que quiero es que me muestre en un display constantemente la distancia desde el sensor. Ya programe varias veces y busque por internet pero no me funciono nada, es más me tira valores aleatorios, yo digo que son aleatorios porque no se de donde salen seguro. El programa lo estoy tratando de hacer utilizando el timer1 del pic que es de 16 bits, o sea puede contar hasta 65536 pulsos lo cual me alcanza y sobra. Si alguien puede ayudarme de cualquier manera seria buenisimo por favor. Muchisimas gracias de antemano.
Estoy usando un cristal de 4mhz y la parte de programacion del display ya la tengo resuelta, solo me falta que obtener el valor del sensor.

Desconectado Neutrino

  • PIC10
  • *
  • Mensajes: 22
Re:Sensor ultrasonico
« Respuesta #1 en: 18 de Diciembre de 2018, 04:00:56 »
Sería genial poder ver el código que tienes para poderte ayudar mejor.

¿El sensor que estás usando es genérico u original? Lo pregunto porque en mi último proyecto tuvimos un problema muy parecido al que comentas y luego de hacer unas pruebas nos dimos cuenta que el sensor (los genéricos que teníamos) sólo median bien hasta 50-60cm a partir de ahí el sensor parecía un generador de números aleatorios. Todo se solucionó cambiando el sensor por uno original.

Saludos.

Desconectado lunago13

  • PIC10
  • *
  • Mensajes: 14
Re:Sensor ultrasonico
« Respuesta #2 en: 18 de Diciembre de 2018, 12:56:11 »
Hola, te envio los dos codigos que use y en cuanto a si es original o no, me imagino que si y ademas directamente no mide la distancia en ningun rango. O sea tira valores aleatorios que no se de donde salen.

Código: [Seleccionar]
#include <16F887.h>
#use delay(clock=4000000)
#fuses XT,NOWDT

#BYTE TRISA = 0x85
#BYTE PORTA = 0x05
#BYTE TRISB = 0x86
#BYTE PORTB = 0x06
#BYTE TRISC = 0x87
#BYTE PORTC = 0x07
#BYTE TRISD = 0x88
#BYTE PORTD = 0x08
#BYTE TRISE = 0x89
#BYTE PORTE = 0x09

#include <LCD_LIB.c>

int main (void)
 {
   SET_TRIS_A(0);
   SET_TRIS_B(0);
   SET_TRIS_C(0);
   SET_TRIS_D(0x04);
   SET_TRIS_E(0);
   PORTA=0;
   PORTB=0;
   PORTC=0;
   PORTD=0;
   PORTE=0;
   lcd_init();
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   float tiempo;
   
   for(;;){
   output_high(pin_D3);                   
   delay_us(10);                       
   output_low(pin_D3);
   while(!input(pin_D2))                     
   {}
   set_timer1(0);
   while(input(pin_D2))                     
   {}
   tiempo=get_timer1();
   float temp = (tiempo*0.000001*343.2)/2;
   lcd_gotoxy(1,1);
   printf(lcd_putc, "\fDistancia :%Lu",temp);
   delay_ms(500);
   }
 }
Código: [Seleccionar]
#include <16F887.h>
#use delay(clock=4000000)
#fuses XT,NOWDT

#BYTE TRISA = 0x85
#BYTE PORTA = 0x05
#BYTE TRISB = 0x86
#BYTE PORTB = 0x06
#BYTE TRISC = 0x87
#BYTE PORTC = 0x07
#BYTE TRISD = 0x88
#BYTE PORTD = 0x08
#BYTE TRISE = 0x89
#BYTE PORTE = 0x09

#include <LCD_LIB.c>

int main (void)
 {
   SET_TRIS_A(0);
   SET_TRIS_B(0);
   SET_TRIS_C(0);
   SET_TRIS_D(0x04);
   SET_TRIS_E(0);
   PORTA=0;
   PORTB=0;
   PORTC=0;
   PORTD=0;
   PORTE=0;
   lcd_init();
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   int start = 1;
   
   for(;;){
   if(start==1){
   output_high(pin_D3);
   output_low(pin_D3);
   set_timer1(0);
   start = 0;
   }
   if(input(pin_D2)==1){
   int tiempo = get_timer1();
   if(tiempo<11655){
   float temp = tiempo*0.000001;
   float final = temp*343.2;
   lcd_putc("\f");
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%f metros",final);
   start = 1;
   }
   else
   {
   lcd_putc("\f");
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Más de 4 metros");
   start = 1;
   }
   }
   }
 }

Desconectado Robert76

  • PIC16
  • ***
  • Mensajes: 141
Re:Sensor ultrasonico
« Respuesta #3 en: 18 de Diciembre de 2018, 15:04:06 »
Hola, viendo el 1er. código, el TIMER debería asignarse a cero, desde el momento que apagas la señal del emisor, antes del while.

Desconectado lunago13

  • PIC10
  • *
  • Mensajes: 14
Re:Sensor ultrasonico
« Respuesta #4 en: 18 de Diciembre de 2018, 19:12:50 »
Hola, ya cambie eso, pero igual sigue haciendo lo mismo

Desconectado Robert76

  • PIC16
  • ***
  • Mensajes: 141
Re:Sensor ultrasonico
« Respuesta #5 en: 18 de Diciembre de 2018, 22:35:08 »
Sería útil, ver el retraso de la señal emitida respecto de la recibida, con un oscilocopio.
Ya que dará una idea del origen del problema.
Elimina sólo para hacer pruebas, la línea dónde se realiza la conversión de tiempo a distancia.
Trabaja sólo con la variable que arroja el TIMER, y visualiza en pantalla.