Archive for the ‘Ultrasonico SRF05 y Arduino’ Category

Como utilizar Sensor Ultrasónico SRF05 con Arduino

Este sensor ultrasónico, mostrado en la figura tiene 2 maneras para funcionar [7]:
• Modo 1 – Señal de activación y de eco en diferentes pines
En este modo se utilizan terminales independientes para la señal de activación y para la señal de retorno del eco. Para activar este modo se debe dejar la terminal de modo sin conexión .

Figura 2. 8: Modo de conexión 1

Figura 2. 8: Modo de conexión 1

El primer modo es el más fácil de utilizar viéndolo desde la óptica de la programación ya que se cuenta con terminales independientes para la entrada y para la salida, sin embargo si se ve desde el punto de vista de conexiones, implica que salgan dos cables y no uno solo desde el Arduino hacia el sensor SRF05.
Tiempos modo 1

• Modo 2 – Señal de activación y eco diferente

En este modo se utiliza un solo pin para las señales de activación y eco lo que nos permite reducir el número de terminales que deben utilizarse en el microcontrolador. Para utilizar este modo es necesario conectar la terminal de modo a la tierra del Arduino.
Modo de conexión 2

En este modo la señal de operación y la señal del eco se envían por la misma terminal, por lo tanto es necesario configurar el pin como emisor y receptor teniendo en cuenta el tiempo que se toma para enviar y recibir el pulso. Este pin en un principio debe ser declarado como emisor y solo puede ser cambiado a receptor hasta 700µS después de haber finalizado la señal de activación.

Para poder medir la distancia en el Arduino se utiliza una función llamada “Pulse In” la cual lee un pulso en estado HIGH o LOW sobre la terminal apropiada, y según la programación, espera a que el pin se ponga en estado lógico ‘1’ o ‘0’ es decir detecta un cambio de flanco positivo o negativo y cuando éste llega se inicia una cuenta que se parará en cuanto se detecte otro cambio, entonces la función entregará como resultado un valor en microsegundos. Esta instrucción funciona correctamente entre valores de 10µs a 3 minutos [8].

El funcionamiento básico de la instrucción “Pulse in” es el siguiente:
int pin = 7;
unsigned long duration;

void setup()
{
pinMode(pin, INPUT);
}

void loop()
{
duration = pulseIn(pin, HIGH);
}

A partir de esta función se puede calcular la distancia, para esto es necesario tener en cuenta que el eco que se recibe es un pulso por lo tanto su ancho es proporcional a la distancia con respecto al objeto, este sensor si no detecta nada en 30µs su nivel cambia a estado bajo. Para calcular la distancia en cm se debe tener en cuenta que la velocidad del sonido es 340 m/s o 29 microsegundos por centímetro.
El sonido llega hasta el objeto, rebota y regresa como eco por lo que se toma el tiempo en milisegundos y se divide entre 29 para obtener la distancia y después dividimos entre dos porque solo queremos la distancia que a el pulso le tomo regresar o en llegar, no las 2 [9].

Para calcular la distancia en pulgadas es necesario seguir un proceso similar, pero es necesario revisar las hojas de datos, estas nos proporcionan dos datos importantes: el sonido viaja a 1130 pies por segundo y se recorren 73.746 microsegundos por pulgada, por lo tanto para obtener una distancia en pulgadas es necesario dividir la señal que nos da entre 74 para obtener la distancia total y finalmente dividir entre 2 para obtener la distancia del sensor al objeto .

En el código del programa solo es necesario aplicar las siguientes fórmulas para obtener las distancias en centímetros y en pulgadas.

long msPulgadas(long microsegundos)
{
return microsegundos / 74 / 2;
}

long msCentimetros(long microsegundos)
{

return microsegundos / 29 / 2;
}

El resultado de estas mediciones se nos da por medio del puerto serial por lo que solo es necesario activar la función de monitoreo serial en la interfaz del programa del Arduino.






Código completo utilizado para el control del sensor ultrasónico SRF05

int ultrasonico = 7;

void setup()
{
Serial.begin(19200);
}

void loop()
{
long duracion, pulgadas, cm; // se utilizan datos long debido a la respuesta del ultrasonido

//Se manda un pulso bajo de 5 microsegundos para asegurar que siempre se inicie en bajo
//después se manda un pulso alto de 15 microsegundos que sirve para iniciar las mediciones

pinMode(ultrasonico, OUTPUT);
digitalWrite(ultrasonico, LOW);
delayMicroseconds(5);
digitalWrite(ultrasonico, HIGH);
delayMicroseconds(15);
digitalWrite(ultrasonico, LOW);

//Se utiliza el mismo pin para recibir el eco así que lo cambiamos de salida a entrada
//y utilizamos la variable duracion para recibir el valor que nos da el ultrasonico

pinMode(ultrasonico, INPUT);
duracion = pulseIn(ultrasonico, HIGH);

// convertimos el tiempo que nos da el pulse in en distancia

pulgadas = msPulgadas(duracion);
cm = msCentimetros(duracion);

Serial.print(pulgadas);
Serial.print(“in, “);
Serial.print(cm);
Serial.print(“cm”);
Serial.println();

delay(100);
}

long msPulgadas(long microsegundos)
{
//De acuerdo a las hojas de datos se recorren 73.746 microsegundos por pulgada
//El sonido viaja a 1130 pies por segundo, así que para obtener una distancia en
//pulgadas solo es necesario dividir la señal que nos da entre 74 para obtener la
//distancia total y finalmente dividir entre 2 para obtener la distancia del sensor
//al objeto
return microsegundos / 74 / 2;
}

long msCentimetros(long microsegundos)
{
//la velocidad del sonido es 340 m/s o 29 microsegundos por centímetro.
//El sonido llega hasta el objeto, rebota y regresa como eco por lo que
//solo es necesario tomar la distancia así que primero dividimos entre 29
//y posteriormente entre 2

return microsegundos / 29 / 2;
}





Bibliografía
[7] Súper Robótica, INTPLUS. http://www.superrobotica.com/S320111.htm.
[8] Arduino. http://www.arduino.cc/en/Reference/PulseIn.
[9] Arduino. http://arduino.cc/en/Tutorial/Ping?from=Tutorial.UltrasoundSensor.

Anuncios