RobotyPic son proyectos básicos de electrónica con microcontroladores PIC, de aplicación en el mundo de la robótica didáctica, con archivos fuente creados mediante el compilador CCS PIC C COMPILER en lenguajeC.

Sensor SRF08 con PIC

El SRF08 es una versión evolucionada del sensor por ultrasonidos SRF04. Entre esas mejoras destaca, sin lugar a dudas, que el cálculo de la distancia al objeto la realiza el propio sensor, con lo cual se evita la necesidad de  implementar dicho código en el PIC de control. Además la comunicación con éste se realiza por el bus I2C con lo que permitiría la conexión de varios dispositivos SRF08 (hasta 16) con el PIC ocupando tan solo dos lineas. Además dispone de un sensor para la medida de la luminosidad ambiental.

En este proyecto vamos a mostrar como controlar el componente con un PIC 16F876A. En un primer momento, al iniciar la aplicación mostraremos la versión de firmware del componente sobre un display LCD mediante la lectura del correspondiente registro. Posteriormente y a intervalos regulares, mediremos la distancia a un objeto frontal así como la luminosidad ambiental y la mostraremos sobre el mismo display LCD.

Para realizar una operación deberemos escribir el correspondiente comando sobre el registro nº 0 del SRF08. Para realizar el cálculo de la distancia a un objeto frontal en modo normal existen 3 posibles comandos según la unidad de medida en el que se desee el resultado. En pulgadas, centímetros y micro segundos y sus correspondientes comandos 0x50, 0x51 y 0x52. Aquí obtendremos el resultado en centímetros por lo que se empleará el comando 0x51 (81 en decimal).


   SRF08_ID = 0xe0;        //Dirección I2C del SRF08
   registro = 0x00;        //Registro de comandos
   comando  = 81;          //Comando calculo en cm

   i2c_start();            //Comienzo de la comunicación I2C ...
   i2c_write(SRF08_ID);    //...con la dirección del SD21...
   i2c_write(registro);    //apuntando al registro de comandos...
   i2c_write(comando);     //...comando
   i2c_stop();
   delay_ms (80);          //Tiempo de adquisición de distancia

Una vez ejecutado el comando ya se pueden leer los resultados en los correspondientes registros:

-  En el 0x01 el valor de la luminosidad en un valor desde 0x00 a 0xff. 
-  En el 0x02 el byte alto del primer eco recibido
-  En el 0x03 el byte bajo del primer eco recibido

El SRF08 dispone de 32 registros más para almacenar los valores de otros ecos recibidos por objetos más distantes en una misma medición hasta un total de 17 ecos. Por ello es necesario un retardo de al menos 64ms antes de su lectura para asegurar la recepción de todos ellos.


   SRF08_ID = 0xe0;        //Dirección I2C del SRF08
   registro=0x01;          //Primer registro a leer
   n_registros=0x03;       //Total de registros a leer

   indice   = 0;
   contador = 0;

   i2c_start();            //Comienzo de la comunicación I2C...
   i2c_write(SRF08_ID);    //...con la dirección I2c del SRF08...
   i2c_write(registro);    //...apuntando al registro 
   i2c_start();            // Reinicio
   i2c_write(SRF08_ID+1);  // Cambio a función de lectura
   
   //lectura de los n registros
   For(contador=n_registros-1;contador>=1;contador--) { 
      I2C_Buffer[indice]=i2c_read();    //Envíar ACK y almacenar 
                                         en el buffer
      indice++;                         //Siguiente posición del
                                         buffer
   }
   I2C_Buffer[indice]=i2c_read(0);      //Envíar NACK y almacena
                                         en el buffer
   i2c_stop();                          //Secuencia de stop   


En este caso solo leemos 3 registros; el registro de la luminosidad y los dos registros del primer eco recibido correspondiente al objeto más cercano.


[+/-] Ver / Ocultar programa completo en C



En esta animación se muestra el resultado del programa realizado:



Y en este enlace la descarga de los archivos del proyecto:

Descarga archivos SRF08 con PIC






El proyecto contenido en el artículo ha sido diseñado con la versión v4.084 de CCS PIC C COMPILER


1 comentario:

komal dijo...

Is it work in real time like our overhead tank. What is the limits of temperature.

Related Posts Plugin for WordPress, Blogger...

CONTACTA - (Haz referencia del artículo sobre el que trata la consulta o comentario)