Wiring Forum
http://wiring.org.co/cgi-bin/yabb/YaBB.pl
Other questions >> Other Wiring questions >> Problema con Sensor SRF02
http://wiring.org.co/cgi-bin/yabb/YaBB.pl?num=1237307786

Message started by anita_maria2 on 03/17/09 at 16:36:26

Title: Problema con Sensor SRF02
Post by anita_maria2 on 03/17/09 at 16:36:26
Buenos dias,

Estamos trabajando en un proyecto y requerimos leer los datos de un sensor
SRF02, hemos usado el código del ejemplo para SFR08-10, pero al
mostrar los valores se observa un cambio drástico en lo datos, incluso en
mediciones que no deberian cambiar.
La salida es mas o menos la siguiente:
28

27

27

35

48

50

53

224

64

65

64

62

60

57

356

55

46

47

30

43

63
215

215

25

626

625

628

629

276

Hemos usado 2 ejemplos diferentes y con ambas se han obtenido resultados muy similares al hacer las pruebas.
No sabemos si es problema de hardware o software y nos gustarìa que por favor verificaran si el còdigo que estamos usando es el correcto.

Anexo ambos códigos.

Muchas gracias.

Atte.
Ana María Orozco I.
Universidad Icesi - Cali
Ing. Telemática

Codigo 1 (Tomado de Wiring/Learning)

 http://wiring.org.co/learning/examples/SFRRanger_reader.html

Codigo 2 (Tomado de Ejemplo Arduino)

/*
SRF02 sensor reader
language:Wiring/Arduino
*/

#include <TwoWire.h>
#define sensorAddress 0x70
#define readInches 0x50
// use this for cm or microsecods
#define readCentimeters 0x51
#define readMicroseconds 0x52
// this is the memory register in the sensor that contains the result:
#define resultRegister 0x02

void setup()
{
//start the I2C bus
Wire.begin();
//open serial port:
Serial.begin(9600);
}

void sendCommand (int address, int command) {
 //start I2C transmission:
 Wire.beginTransmission(address);
 //send command:
 Wire.send(0x00);
 Wire.send(command);
 //end I2C transmission:
 Wire.endTransmission();

}

void setRegister(int address, int thisRegister) {
 //start IC2 transmission:
 Wire.beginTransmission(address);
 //send address to read from:
 Wire.send(thisRegister);
 //end I2C transmission();
    Wire.endTransmission();
}

/*
readData() returns a result from the SRF sensor
*/

int readData(int address, int numBytes) {
 int result = 0; // the result is two bytes long
 //send i2c request for data:
 Wire.requestFrom(address, numBytes);
 //wait for two bytes to return:
//  while (Wire.available() < 2 );{
 //wait for result

//}

// read thew two bytes, and combine them into one int:
result = Wire.receive() * 256;
result = result + Wire.receive();

//return the result:
return result;
}

void loop()
{
//send the command to read the result in CM:
sendCommand(sensorAddress, readCentimeters);
//wait at least 70ms for a result:
delay(500);
//set the reigster that you want to read the result from:
setRegister(sensorAddress, resultRegister);
//read the result:
int sensorReading = readData(sensorAddress, 2);
//print it

if(sensorReading > 10){
Serial.println(sensorReading);
}



// wait before next reading:

delay(20);
delay(20);
delay(20);

  if (sensorReading < 30) //because sensor is innefective below 20cm, closer than 30cm sends 0 to the servo
{
 sensorReading = 0;
}
}

Title: Re: Problema con Sensor SRF02
Post by barragan on 03/21/09 at 04:46:42
tienen un diagrama de conexion?

Title: Re: Problema con Sensor SRF02
Post by anita_maria2 on 03/21/09 at 20:23:47
Link: http://wiring.org.co/learning/examples/SFRRanger_reader.html
sfrranger.jpg (24 KB | 464 )

Title: Re: Problema con Sensor SRF02
Post by barragan on 03/21/09 at 20:46:07
aparentemente todo está en orden, a veces la parte crítica es en los 75ms de espera antes de la lectura, es posible que el sensor esté dañado, tienen otro para probar?
En lugar de los tres delay de 20 podrían usar uno de 100 para estar seguros.
La variable que usan para leer dentro de loop podría declararse arriba, para no estarla declarando dentro del loop cada vez que se hace.

Wiring Forum » Powered by YaBB 2.5 AE!
YaBB Forum Software © 2000-2010. All Rights Reserved.