Sensor HY SRF05

Buenas,

tengo un problema con el sensor SRF05 y no se si sera problema de hardware o de software, vamos al lio:

No me lee mas de valor 4 si alejo mas el objeto no aumenta mas, en cambio las medidas menores a 4cm si las lee bien. Uso este codigo:

define ECHOPIN 12 // Pin to receive echo pulse

define TRIGPIN 13 // Pin to send trigger pulse

void setup(){ Serial.begin(9600); pinMode(ECHOPIN, INPUT); pinMode(TRIGPIN, OUTPUT); }

void loop(){ digitalWrite(TRIGPIN, LOW); // Set the trigger pin to low for 2uS delayMicroseconds(2); digitalWrite(TRIGPIN, HIGH); // Send a 10uS high to trigger ranging delayMicroseconds(10); digitalWrite(TRIGPIN, LOW); // Send pin low again int distance = pulseIn(ECHOPIN, HIGH); // Read in times pulse distance= distance/58; // Calculate distance from time of pulse Serial.println(distance); delay(50); // Wait 50mS before next ranging }

Gracias,

Un saludo

¿Has probado a modificar el tipo de la variable distance a unsigned int, o unsigned long? Tiene pinta de que podría ser que el valor de la variable excede el rango.

noter: ¿Has probado a modificar el tipo de la variable distance a unsigned int, o unsigned long? Tiene pinta de que podría ser que el valor de la variable excede el rango.

Nada, he probado con eso y y ahora lo unico que cambia es que en vez d 4 el maximo ahora es 3

Hola ,tengo un sensor parecido funcionando bien y la unica diferencia con tu código es que le doy un delay de 1000 en vez de 50 y que la variable que recoge la duracion del pulso y la que recoge el calculo de la distancia son diferentes: tiempo = pulseIn(PIN_ECHO, HIGH); //Se recoge las lecturas del sensor. distancia= tiempo/58; //Calculo de distancia.

No se si sera eso.Tal como dice Noter la referencia de esta funcion dice que la variable que recoge el tiempo del pulso debe ser unsigned long.

jose: Hola ,tengo un sensor parecido funcionando bien y la unica diferencia con tu código es que le doy un delay de 1000 en vez de 50 y que la variable que recoge la duracion del pulso y la que recoge el calculo de la distancia son diferentes: tiempo = pulseIn(PIN_ECHO, HIGH); //Se recoge las lecturas del sensor. distancia= tiempo/58; //Calculo de distancia.

No se si sera eso.Tal como dice Noter la referencia de esta funcion dice que la variable que recoge el tiempo del pulso debe ser unsigned long.

ponme tu codigo por aqui y pruebo con el a ver

const int PIN_TRIG = 12;   
const int PIN_ECHO = 11;
unsigned long tiempo,distancia;   

void setup() {
  Serial.begin(9600); 
  pinMode(PIN_ECHO, INPUT);
  pinMode(PIN_TRIG, OUTPUT);
}
  
void loop(){
  digitalWrite(PIN_TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(PIN_TRIG, HIGH); //Se activa medicion con pulso de 5v de 10 microsegundos en PIN_TRIG
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW); 
  tiempo = pulseIn(PIN_ECHO, HIGH); //Se recoge las lecturas del sensor.
  distancia= tiempo/58; //Calculo de distancia.
  Serial.print(distancia);
  Serial.println(" cm");
  delay(1000); 
}

supongo que la variable distancia seria mas correcto que fuese float o double pero no lo he probado de este modo y no se si podria haber problemas al guardar el resultado por el tema de conversion de tipos de datos.

jose: ``` const int PIN_TRIG = 12;    const int PIN_ECHO = 11; unsigned long tiempo,distancia;   

void setup() {   Serial.begin(9600);   pinMode(PIN_ECHO, INPUT);   pinMode(PIN_TRIG, OUTPUT); }   void loop(){   digitalWrite(PIN_TRIG, LOW);   delayMicroseconds(2);   digitalWrite(PIN_TRIG, HIGH); //Se activa medicion con pulso de 5v de 10 microsegundos en PIN_TRIG   delayMicroseconds(10);   digitalWrite(PIN_TRIG, LOW);   tiempo = pulseIn(PIN_ECHO, HIGH); //Se recoge las lecturas del sensor.   distancia= tiempo/58; //Calculo de distancia.   Serial.print(distancia);   Serial.println(" cm");   delay(1000); }




supongo que la variable distancia seria mas correcto que fuese float o double pero no lo he probado de este modo y no se si podria haber problemas al guardar el resultado por el tema de conversion de tipos de datos.

Nada con tu codigo me marca el maximo en 3cm.

He probado con este y nada en 4 tambien

const int trigPin = 12; // Pin disparador. Se puede usar otro pin digital
const int echoPin = 11; // Pin eco. Se puede usar otro pin digital
void setup() { 
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
pinMode(trigPin, OUTPUT); // Establece pin como salida
pinMode(echoPin, INPUT); // Establece pin como entrada
digitalWrite(trigPin, LOW); // Pone el pin a un estado logico bajo
}
void loop() {
long duration, inches, cm; // Declara variables
  
// Pulso de 10us para inicial el modulo
digitalWrite(trigPin, HIGH); 
delayMicroseconds(10); 
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); //Devuelve la longitud del pulso del pin Echo en us
// Convierte el tiempo de recepción del eco en distancia:
inches = microsecondsToInches(duration); 
cm = microsecondsToCentimeters(duration);
// Imprime valores por el puerto serie:
Serial.print(inches); 
Serial.print("in, "); 
Serial.print(cm); 
Serial.print("cm, ");
Serial.print(duration); 
Serial.print("eco ");
Serial.println();
delay(50); // Espera 50ms para la siguiente medición (Tiempo mínimo recomendado!!)
}
// Calcula la distancia en pulgadas
long microsecondsToInches(long microseconds) { 
return microseconds /148; 
}
// Calcula la distancia en cm
long microsecondsToCentimeters(long microseconds) { 
return microseconds /58; 
}