Sensor Ultrasonico - mediciones erróneas


amigos resulta ser que tengo un problema con un sensor hc-sr04, lo tengo programado para cuando un objeto este menos de 20 cm se encienda un led o de lo contrario se apague...

mi inconveniente es que el sensor arroja por unos instantes el valor "0" (cero centímetros) sin que tenga ningún tipo de obstáculo presente y hace encender mi led por un instante cosa que no quiero que pase :



o en el peor de los casos se queda congelada en "0" todo el tiempo sin importar lo que haga, hasta apretar de nuevo el botón de reset del arduino...



este es el cÓdigo que estoy usando

code: [select]
     #define trigpin 9
     #define echopin 8
     #define led 12

     void setup()
        {   serial.begin (9600);
            pinmode(trigpin, output);
            pinmode(echopin, input);
            pinmode(led, output);
        }

     void loop()
     
        {   
               
            long duracion, distancia ;
           
            digitalwrite(trigpin, low);       
            delaymicroseconds(2);             
            digitalwrite(trigpin, high);     
            delaymicroseconds(10);             
            digitalwrite(trigpin, low); 
           
            duracion = pulsein(echopin, high) ;
            distancia = duracion / 2 / 29.1  ;
           
            serial.println(string(distancia) + " cm.") ;
                       
            if ( distancia < 20 )
                 digitalwrite ( led , high) ;
            else
                 digitalwrite( led , low) ;
                 
            delay (500) ;   
        }



como puedo evitar que pase esto? gracias desde ya :)

hola yo utilizo este código te lo dejo para ver si te sirve es similar al que usas solo que yo puse en el rango de distancia mínima 10 cm. también podrías usar la librería newping que esta muy bien optimizada para este tipo de sensores. saludos

código:

code: [select]
#define pecho 6
#define ptrig 7
long duracion, distancia;   
 
void setup() {               
  serial.begin (9600);       // inicializa el puerto seria 9600 baudios
  pinmode(pecho, input);     // define el pin 6 como entrada (echo)
  pinmode(ptrig, output);    // define el pin 7 como salida  (triger)
  pinmode(13, 1);            // define el pin 13 como salida
  }
 
void loop() {
 
  digitalwrite(ptrig, low);
  delaymicroseconds(2);
  digitalwrite(ptrig, high);   // genera el pulso de triger por 10ms
  delaymicroseconds(10);
  digitalwrite(ptrig, low);
 
  duracion = pulsein(pecho, high);
  distancia = (duracion/2) / 29;            // calcula la distancia en centimetros
 
  if (distancia >= 500 || distancia <= 0){  // si la distancia es mayor 500cm o menor 0cm
    serial.println("---");                  // no mide nada
  }
  else {
    serial.print(distancia);           // envia el valor de la distancia por el puerto serial
    serial.println("cm");              // le coloca la distancia los centimetros "cm"
    digitalwrite(13, 0);               // en bajo el pin 13
  }
 
   if (distancia <= 10 && distancia >= 1){
    digitalwrite(13, 1);                     // en alto el pin 13 si la distancia es menor 10cm
    serial.println("alarma.......");         // envia la palabra alarma por el puerto serial
  }
  delay(400);                                // espera 400ms para que se logre ver la distancia en la consola
}


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Sensor Ultrasonico - mediciones erróneas


arduino

Comments