Go Down

Topic: Problemas con ultrasonidos (Read 1 time) previous topic - next topic

Diegolito

Hola a todos! Me he hecho de este sensor de ultrasonidos: http://www.robotshop.com/content/PDF/datasheet-sen136b5b.pdf, el caso es que en una web donde lo venden trae este codigo de ejemplo (copia casi integral del oficial de arduino):
Code: [Select]
/* Ping))) Sensor
 
   This sketch reads a PING))) ultrasonic rangefinder and returns the
   distance to the closest object in range. To do this, it sends a pulse
   to the sensor to initiate a reading, then listens for a pulse
   to return.  The length of the returning pulse is proportional to
   the distance of the object from the sensor.
     
   The circuit:
* +V connection of the PING))) attached to +5V
* GND connection of the PING))) attached to ground
* SIG connection of the PING))) attached to digital pin 7

   http://www.arduino.cc/en/Tutorial/Ping
   
   created 3 Nov 2008
   by David A. Mellis
   modified 30 Jun 2009
   by Tom Igoe

   This example code is in the public domain.

*/

// this constant won't change.  It's the pin number
// of the sensor's output:
const int pingPin = 7;

void setup() {
  // initialize serial communication:
  Serial.begin(9600);
}

void loop()
{
  // establish variables for duration of the ping,
  // and the distance result in inches and centimeters:
  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(15);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(20);
  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);
 
  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();
 
  delay(100);
}

long microsecondsToInches(long microseconds)
{
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}


Pero cuando abro el serial monitor, solo lee: 0 in 0 cm, y no tengo ni idea de que puede pasar... Lo alimento directamente desde la placa arduino, a 5v y la señal (pin 2 del sensor, visto de frente) va al pin digital 7 de arduino... ¿El fallo puede ser que ese no es un pin PWM?

Diegolito

He hecho un programa de codigo muy similar, en el que quiero que me devuelva el tiempo en microsegundos que tarda, y me sigue devolviendo 0... Por lo que deduzco que o bien no se ha mandado el pulso o bien el componente es defectuoso... ¿Alguien ha trasteado alguna vez con estos sensores y le ha pasado algo parecido?

ionhs

Tengo el sensor de ultrasonidos pero no lo he probado nunca, ahora estoy de vacaciones asi que no puedo empezar a probarlo. Pero se me ocurre que si en vez del sensor pones vcc>>resistencia>>interruptor>>masa y conectas el pin 7 a la unión resistencia interruptor. Podría comprobar si el programa captura el tiempo. Es una idea, el programa no lo he mirado muy a fondo así que no se si apartir de cierto tiempo lo discrimina. Salu2

Diegolito

Pues lo hago, y siempre devuelve 0, independientemente del estado del interruptor...
La lectura es la siguiente:
Code: [Select]

// Normal, independientemente del interruptor.
0in, 0cm
0in, 0cm
0in, 0cm
0in, 0cm
0in, 0cm
//Desconecto el cable que va al pin 7 de la protoboard
68in, 175cm
51in, 131cm
51in, 131cm
51in, 131cm
51in, 130cm
51in, 131cm
51in, 131cm
51in, 130cm
50in, 130cm
51in, 130cm
51in, 130cm
51in, 130cm


¿Por tanto lo que falla es el codigo? No lo comprendo, esta calcado del ejemplo que te dan precisamente para ese sensor...


ionhs

No puedo probarlos, pero mirando tus resultados, es raro que estando desconectado el pin 7 del arduino consiga hacer lectura, tiene que ser que esta leyendo ruido parasito. Te paso un trocito del un libro que habla sobre el tema, está muy bien explicado y encima en español.

http://www.megaupload.com/?d=0X6PTS77

Diegolito

Gracias por la info, esta bastante curiosa :D. Por cierto.. Ya he resuelto el problema! El caso es que estaba siguiendo la wiki del componente, creada por su empresa (si no me equivoco) y... el pineado esta mal puesto en la imagen. Ponen, visto de frente: VCC SIG GND, y tras observar detenidamente el sensor, he visto que las patillas tenian nombre: SIG VCC GND. Cambiado los cables de sitio funciona todo perfectamente... sorry por los problemas, al final ha sido una tonteria! -.-"

Go Up