Friday 8 February 2013

Minitutorial, sensor de distancia

Como ya comenté en un post anterior, este año estoy dando clases de IT a alumnos de diferentes niveles. Por lo que me he decidido a escribir pequeñas entradas con  opciones que nos brinda arduino con su conexionado y su sketch correspondiente, así me servirá también como un repositorio a la hora de mostrarles ejemplos que pueden utilizar para aprender a programar y montar proyectos con arduino.

En esta ocasión le toca el turno a los sensores de distancia, el que voy a utilizar es el HC-SR04, comprado en dealextreme por poco más de 3$.

El sensor funciona por ultrasonidos y el mecanismo consiste en una señal de ultrasonido que envía uno de esos cilindros y que el otro recibe, en función del tiempo que tarde en volver el ultrasonido se determina la distancia hasta el objeto que tiene en frente.

Tiene un rango de 2 a 450 cm por lo que tiene muchas utilidades como detección de intrusos, contador de personas, detección de obstáculos para pequeños proyectos de coches autodirigidos y cualquier otra cosa que se nos ocurra.

Cuenta con 4 pines que por suerte vienen etiquetados en la misma placa, así tenemos vcc para el voltaje, Trig que es el que envía la señal y va conectado a una salida digital, echo que es el que recibe la señal y se conecta a una entrada analógica y por último Gnd para la toma a tierra. Esto nos facilita mucho las cosas a la hora de hacer el conexionado en una placa de montaje por ejemplo. Aquí tenéis como ejemplo el esquema he estado usando yo para pruebas.





Y aunque muy simple, os dejo un esquema del conexionado:






Una vez que tenemos el hardware listo vamos a pasar al software, para poder utilizar este sensor necesitaremos enviar una señal durante dos microsegundos, después silenciar esa señal y leer el valor que nos devuelve el pin de ECHO. De esta forma aplicando una pequeña fórmula nos devuelve el valor en CM. He aquí el sketch:




 // Definimos para que vamos a usar cada pin
#define ECHO 6       
#define TRIGGER 7 

//Primera bateria de instrucciones que se ejecutara
//Solo cuando inicie arduino
void setup()
{
  //Declaramos la velocidad con la que operaremos el puerto serie
  Serial.begin(9600);
  //Definimos que el pin de echo (6) es de entrada
  pinMode(ECHO, INPUT);
  //Y que el TRIGGER
  pinMode(TRIGGER, OUTPUT);
  //Mostrampos un mensaje por pantalla diciendo que estamos conectados
  Serial.println("El dispositivo se ha conectado.");
}

/*
 * Funcion de loop que se ejecutara de forma reiterativa
 * 
 */
void loop()
{
  // Ponemos el TRIGGER a 0
  digitalWrite(TRIGGER, LOW);
  // Esperamos 2 microsegundos
  delayMicroseconds(2);
  // Ponemos el TRIGGER a 1
  digitalWrite(TRIGGER, HIGH);
  // Y volvemos a esperar, ahora 10 microsegundos
  delayMicroseconds(10);
  // Por ultimo volvemos a poner el TRIGGER a 0
  digitalWrite(TRIGGER, LOW);
  // Ahora recogemos el valor recibido en el pin de ECHO
  // El cual determinara la distancia
  float distancia = pulseIn(ECHO, HIGH);
  // Para pasar el valor a CM tendremos que dividir el valor 
  // obtenido por 58 y esto nos dara como resultado los cm
  distancia= distancia/58;
  // Imprimimos por el puerto serie la distancia recien calculada
  Serial.print(distancia);
  Serial.println(" CM");
  // Ponemos otra pausa de 200 milisegundos
  // a tener en cuenta que son milisegundos, lo de antes
  // eran microsegundos, un valor aun mas pequeño
  delay(200);
}

Por último un pequeño vídeo de como funciona el sensor:


1 comment: