20
USO DEL SENSOR ULTRASÓNICO DE DISTANCIA PING))) DE PARALLAX 1. INTRODUCCIÓN El sensor ultrasónico de distancia PING))) (Fig. 1) permite efectuar la medición de distancia de objetos colocados entre 3 cm y 3 m, es fácil de conectar y requiere únicamente para su operación un terminal de entrada /salida del microcontrolador. Fig. 1. Sensor ultrasónico de distancias PING))). El funcionamiento de este poderoso sensor se basa en la utilización de ondas ultrasónicas, las cuales se caracterizan porque su frecuencia supera la capacidad de audición de los seres humanos. El oído humano es capaz de detectar ondas sonoras de frecuencias comprendidas entre unos 20 y 20000 Hertz, a esto se le conoce como espectro audible. Toda señal sonora que se encuentre por encima de este rango, se cataloga como ultrasónica. Este sensor es una buena elección para aplicaciones donde se requiera efectuar la medición de distancia entre objetos fijos o móviles. También puede ser usado en robótica (fig.2), sistemas de seguridad o como reemplazo de sistemas basados en infrarrojo. Fig. 2. Uso del PING))) como sonar en un robot móvil.

Teoria Sendor Ping)))

Embed Size (px)

Citation preview

Page 1: Teoria Sendor Ping)))

USO DEL SENSOR ULTRASÓNICO DE DISTANCIA PING))) DE PARALLAX

1. INTRODUCCIÓN

El sensor ultrasónico de distancia PING))) (Fig. 1) permite efectuar la medición de distancia de objetos colocados entre 3 cm y 3 m, es fácil de conectar y requiere únicamente para su operación un terminal de entrada /salida del microcontrolador.

Fig. 1. Sensor ultrasónico de distancias PING))).

El funcionamiento de este poderoso sensor se basa en la utilización de ondas ultrasónicas, las cuales se caracterizan porque su frecuencia supera la capacidad de audición de los seres humanos. El oído humano es capaz de detectar ondas sonoras de frecuencias comprendidas entre unos 20 y 20000 Hertz, a esto se le conoce como espectro audible. Toda señal sonora que se encuentre por encima de este rango, se cataloga como ultrasónica.

Este sensor es una buena elección para aplicaciones donde se requiera efectuar la medición de distancia entre objetos fijos o móviles. También puede ser usado en robótica (fig.2), sistemas de seguridad o como reemplazo de sistemas basados en infrarrojo.

Fig. 2. Uso del PING))) como sonar en un robot móvil.

2. CARACTERÍSTICAS TÉCNICAS

• Voltaje de Alimentación = 5 VDC.

• Consumo de Corriente = 30 – 35 mA (máx).

• Rango de medición = 3 cm hasta 3 m.

• Entrada de disparo = Pulso ascendente TTL con duración mínima de 5us.

Page 2: Teoria Sendor Ping)))

• Pulso de salida = Pulso ascendente TTL comprendido entre 115 us y 18.5 ms.

• Tiempo de espera para la medición = 750 us luego del pulso de disparo.

• Frecuencia del ultrasonido = 40 Khz.

• Tiempo de emisión del ultrasonido = 200 us.

• Diodo LED indicador de actividad.

• Tiempo mínimo de espera entre medidas = 200 us.

• Dimensiones = 22x46x16 mm.

La fig 3. muestra las dimensiones del sensor PING))).

Fig. 3. Dimensiones físicas del sensor PING))). Vista Frontal y Vista Lateral.

3. TERMINALES DE INTERFAZ DEL SENSOR PING)))

Este dispositivo cuenta únicamente con tres terminales de conexión separados por una distancia estándar de 2.5 mm, lo cual hace su inserción en protoboards o en circuitos impresos terminados una labor muy simple.

La fig 4. muestra la función del los terminales del PING))). Vss se utiliza como referencia o tierra GND, Vdd provee la alimentación de 5V para los circuitos internos del sensor y el I/O es el terminal de E/S utilizado para producir el pulso de activación o disparo y recibir la medición efectuada (SIG).

Fig. 4. Terminales de conexión del sensor.

4. TEORÍA DE OPERACIÓN

Page 3: Teoria Sendor Ping)))

El sensor ping transmite una ráfaga ultrasónica y mide el tiempo que demora el eco en ser recibido (fig 5). Este eco se produce cuando las ondas sonoras golpean un objeto que se encuentra dentro del rango de medición del PING))).

Fig. 5 Explicación gráfica del funcionamiento

El sensor PING))) entrega una salida en forma de un pulso digital que es proporcional al tiempo requerido por el ultrasonido para ir desde el módulo emisor, golpear contra un objeto y regresar hasta el receptor. Para lograr que el microcontrolador obtenga la medición de distancia de un objeto colocado frente al PING))), basta con medir la duración de este pulso (pulso del eco) y aplicar un sencillo cálculo para obtener el resultado.

El funcionamiento del sensor PING))) es explicado de forma simple por medio del diagrama de tiempos de la fig 6.

Fig. 6. Diagrama del funcionamiento temporal.4.1. EXPLICACIÓN

Page 4: Teoria Sendor Ping)))

El microcontrolador debe garantizar que exista un estado bajo (0V) en el pin de señal (SIG) del sensor antes de comenzar la operación.

Seguidamente se genera un pulso de activación o de disparo tOUT de 5μs.

Al concluir ese pulso, el terminal de E/S del microcontrolador conectado a SIG debe convertirse en una entrada para permitir que el PING tome el control del mismo.

El sensor activa al transmisor de ultrasonido durante unos 200us (Trafaga) enviando una ráfaga a 40 kHz. Esta ráfaga viaja en el aire a una velocidad aproximada de 1239.93 Km/hora (1300 pies/seg) golpea al objeto en frente del sensor y se genera una señal rebote que es “escuchada” por el micrófono para ultrasonidos del módulo.

El terminal SIG se colocará en estado alto luego de ser enviada la ráfaga de 40 kHz y permanecerá de esa manera por un tiempo comprendido entre un tIN-MIN=115 us y un tIN-MAX= 18.5ms, hasta recibir un pulso (tiempo en μs). Por lo tanto el ancho de este pulso corresponde con la distancia del sensor PING))) al objeto.

4.2. CÁLCULO DE LA DISTANCIA

Para efectuar el cálculo de la distancia debe considerarse que el pulso recibido tiene una duración proporcional al doble de la distancia recorrida por la onda sonora. Para comprender esto hace falta analizar la fig. 5. En esta se observa que la señal demora un tiempo T1 en alcanzar al objeto y posteriormente toma un tiempo T2 en llegar de regreso al PING))). Ya que ambas ondas se propagan por el mismo medio (aire) los tiempos T1 y T2 serán iguales.

Después de que el microcontrolador ha recibido el pulso en microsegundos, este valor se divide para dos (según las consideraciones mencionadas anteriormente) a fin de eliminar el tiempo de "regreso" T2 del eco del pulso. El valor que ahora se ha obtenido, es la distancia del sensor al objeto en microsegundos.

Para hacer la equivalencia, de la unidad de tiempo en microsegundos a la unidad de longitud en pulgadas o centímetros, es una simple cuestión de matemáticas. En general se asume que el valor de la velocidad del sonido es de 1130 pies/seg. Haciendo la respectiva conversión de pies a pulgadas y de segundos a microsegundos, tenemos:

Por otro lado, también nos interesa conocer a cuantos microsegundos equivale una pulgada, por lo tanto:

Entonces da lo mismo decir, que 0.01356 pulgadas equivalen a 1 μseg o que 1 pulgada es equivalente a 73.746 μseg.

El siguiente paso es convertir las pulgadas a centímetros, tal y como sigue:

Page 5: Teoria Sendor Ping)))

Por otro lado, también nos interesa conocer a cuantos microsegundos equivale un centímetro, por lo tanto:

Entonces es lo mismo decir, que 0.034442 cm equivalen a 1 μseg o que 1 cm es equivalente a 29.034 μseg.

CONCLUSIÓN:

Si el microcontrolador recibe un pulso (que lo llamaremos dato) en microsegundos, para calcular la distancia equivalente a ese pulso, se tiene que:

OBSERVACIÓN:

No se si les vaya a suceder, lo que me aconteció al momento de usar el sensor PING))), pero igualmente les haré conocer un pequeño problema que surgió con el cálculo de la distancia a partir del tiempo en microsegundos del pulso.

Al principio pensaba, que me había equivocado en algún punto de la programación con relación a los cálculos mencionados anteriormente, pero después hice algunas pruebas haciendo funcionar el sensor y anotando el tiempo en microsegundos para diferentes distancias obtenidas con un metro (instrumento de medida de longitud); y al hacer un promedio con todas las medidas, obtuve como resultado que 1 cm es equivalente a 2.905 microsegundos, que difiere en casi una décima con el valor obtenido en la sección 4.2 que es de 29.034 microsegundos.

Implemente este valor obtenido de 2.905 microsegundos en la programación, y el sensor funcionó correctamente. Queda como sugerencia para el lector, implementar este valor en caso de que le suceda lo mismo.

5. COMPROBACIÓN DE DATOS

Los prueba de datos en las páginas siguientes se basa en el sensor PING))), comprobados en el laboratorio de Parallax, mientras este sensor está conectado a un microcontrolador y programado con PIC BASIC.

La superficie de ensayo fue sobre un piso de linóleo, así el sensor fue elevado para reducir al mínimo reflexiones sobre piso. Todas las pruebas fueron realizadas a temperatura ambiente, en interiores, en un entorno protegido. El objeto fue siempre centrado en la misma altitud que el sensor PING))).

PRUEBA 1

Elevación del sensor: 40 pulgadas (101,6 cm)

Page 6: Teoria Sendor Ping)))

Objeto: 3,5 pulgadas (8,9 cm) de diámetro del cilindro, 4 pies (121,9 cm) de altura - vertical

Fig 7. Diagrama de radiación en coordenadas polares

Fig 8. Sensor PING))) en funcionamiento con un objeto cilíndrico PRUEBA 2

Elevación del sensor: 40 pulgadas (101,6 cm)

Page 7: Teoria Sendor Ping)))

Objeto: 12 pulgadas x 12 pulgadas (30,5 cm x 30,5 cm) de cartón, montado sobre 1 pulgada (2,5 cm) polo. El objeto se coloca en paralelo con respecto al plano del sensor.

Fig 9. Diagrama de radiación en coordenadas polares

Fig 10. Sensor PING))) en funcionamiento con un objeto plano de cartón. 6. PROGRAMACIÓN DEL SENSOR PING))) CON PIC BASIC

Page 8: Teoria Sendor Ping)))

PIC BASIC brinda algunas funciones ya intrínsecas, que facilitan la programación del microcontrolador para realizar las operaciones tanto de configuración y recepción de datos del sensor PING))). Las instrucciones que se van a utilizar son PULSOUT y PULSIN, que ha continuación se van a explicar.

PULSOUT Pin, Periodo

Genera un pulso en Pin, con un Periodo especificado. El pulso se genera activando dos veces el pin, por lo que la polaridad del pulso depende del estado inicial del pin. Pin puede ser una constante, entre 0 - 15, ó una variable que contenga un número de 0-15 (p.ej. B0) ó un número de Pin (p.ej. PORTA.0)

La resolución de PULSOUT depende de la frecuencia del oscilador. Si se usa un oscilador de 4 Mhz, el periodo del pulso generado estará en incrementos de 10 us. Si se usa un oscilador de 20 Mhz, periodo una resolución de 2 us. Definir un valor de OSC no tiene efectos sobre PULSOUT. La resolución siempre cambia con la velocidad del oscilador en uso.

Ejemplo:

PULSOUT PORTB.5, 1000 ‘envia un pulso de 1000 μseg (1 mseg) por el pin 5 (a 4 Mhz).

PULSIN Pin, State , Var

Mide el ancho del pulso en Pin. Si State es cero se mide el ancho de un pulso bajo. Si State es uno, se mide el ancho de un pulso alto. El ancho medido se coloca en Var. Si el flanco del pulso no llega, ó el ancho del pulso es demasiado grande para ser medido, Var = 0 . Si se usa una variable de 8 bit, solo se usan los bits menos significativos de la medición de 16 bits. Pin puede ser una constante, 0 - 15, ó una variable que contenga un número de 0-15 (p.ej. B0) ó un número de Pin (p.ej. PORTA.0)

La resolución de PULSIN depende de la frecuencia del oscilador. Si se usa un oscilador de 4 Mhz, el ancho de pulso se obtiene en incrementos de 10 us. Si se usa un oscilador de 20 Mhz, el ancho de pulso tendrá una resolución de 2 us .Definir un valor de OSC no tiene efectos sobre PULSIN. La resolución siempre cambia con la velocidad del oscilador en uso.

Ejemplo:

PULSIN PORTB.4, 1 , W3 ‘mide el pulso alto en pin 4 y lo guarda en la variable W3

Para la activación del sensor PING))) se usará la instrucción PULSOUT, garantizando que exista un estado bajo (0V) en el pin de señal (SIG) del sensor antes de comenzar la operación, es decir LOW SIG, seguidamente se envía en pulso en alto durante 5 μs PULSOUT SIG , 5. Después de la activación del sensor se debe esperar alrededor de 200 microsegundos antes de transmitir la ráfaga de ultrasonidos PAUSEUS 200. Esto permite al microcontrolador cargar y preparar la próxima instrucción.

El sensor PING))) proporciona un pulso de eco proporcional a la distancia. La instrucción, PULSIN, se utiliza para medir el pulso en alto que corresponde a la distancia al objeto de destino, PULSIN SIG,1,MEDIDA. Después este valor llamado

Page 9: Teoria Sendor Ping)))

MEDIDA que corresponde a la distancia al objeto en microsegundos, se divide por dos, a fin de eliminar el tiempo de "regreso" T2 del pulso del eco.

Ahora para calcular la distancia, el resultado se debe dividir entre 29.034 para saber el equivalente en centímetros, y entre 73.746 para saber el equivalente en pulgadas.

Pero PIC BASIC no maneja números de cómo flotante, entonces la pregunta sería, ¿cómo podemos dividir nuestro valor de medición del pulso por el número de coma flotante 73,746 o 29.034?

Para casos en que no se requiera demasiada exactitud, la solución más fácil sería redondear el número a su valor entero más cercano es decir 74 o 29, pero esta solución acarrearía un porcentaje de error en el cálculo de distancia y además solo nos daría la distancia en centímetros, ya que como mencionamos PIC BASIC no maneja números de cómo flotante y no sabríamos cuantos milímetros habría entre cada centímetro.

Pero para casos en que se requiera exactitud y saber con precisión la distancia hasta en milímetros, se debe usar el siguiente artificio matemático y vamos a tomar como ejemplo el número 2.905 (que es el valor que use en la práctica):

Al número 2.905 lo multiplicamos por 1000 y tendríamos el nuevo número entero 2905, pero esto implica un cambio en la variable MEDIDA por lo que a este variable también la multiplicamos por 1000, es decir 1000*MEDIDA, con lo cual solucionaríamos la primera parte de nuestro problema.

Pero esta solución también acarrea otro, puesto que hay que recordar que la variable de PIC BASIC que soporta un mayor tamaño es la de tipo WORD y soporta 2 bytes es decir de 0 a 65535, entones ¿que pasaría si (MEDIDA/2)=320 μs, que corresponde a 110.1 cm?, la respuesta a esta pregunta es que al multiplicar este número 320 por 1000, la nueva cantidad no será soportada por la variable WORD y la asumiría como 0. Entonces para evitar este estado, vamos a redondear el número 2.905 a 2.91, con lo cual las operaciones anteriores no se harían con el número 1000 sino con el numero 100, es decir que, 320*100=32000 y es una cantidad soportada por la variable WORD. El porcentaje de error es mínimo casi de ± 1 mm.

MEDIDA VAR WORD

MEDIDA= MEDIDA/2

DISTANCIA= (MEDIDA*100)/291

Ahora surge otra inquietud cuando dividimos la variable MEDIDA para 2 ¿Qué sucede si por ejemplo MEDIDA = 641? Cuando dividimos 641 para 2 el nuevo valor sería 320.5, pero si estamos utilizando PIC BASIC el nuevo valor se guardaría como 320 sin tomar en consideración los 0.5, para solucionar este problema guardamos en otra variable el resto de la división y tratamos este valor por separado, para ello hacemos uso de PIC BASIC como sigue:

Page 10: Teoria Sendor Ping)))

RESTO_MEDIDA = MEDIDA//2

Que para el ejemplo RESTO_MEDIDA=1, como el 2 corresponde a un solo digito a RESTO_MEDIDA lo multiplicamos por 10 y lo volvemos a dividir para 2, y así botemos el valor decimal como un valor entero.

DECIMAL_MEDIDA = (RESTO_MEDIDA*10)/2

Que para nuestro ejemplo DECIMAL_MEDIDA = 5. Ahora para saber a cuantos milímetros equivalen esos 0.5 μs, se realiza el mismo procedimiento explicado anteriormente:

DECIMAL_DISTANCIA1= (DECIMAL_MEDIDA*100)/291

Lo mismo que sucede cuando se hace la división para 2, ocurre con la operación DISTANCIA= (MEDIDA*100)/291, por lo que, debe hacerse el mismo procedimiento que se explico anteriormente:

RESTO_DISTANCIA = (Medida*100)//291

DECIMAL_DISTANCIA2= (RESTO_DISTANCIA*10)/291

DECIMAL_DISTANCIA_TOTAL= DECIMAL_DISTANCIA1 + DECIMAL_DISTANCIA2

Así obtenemos el valor real de la medida de la distancia donde la parte entera se almacena en la variable DISTANCIA y la parte decimal se almacena en DECIMAL_DISTANCIA_TOTAL.

EJEMPLO1: Realizar un programa en PIC BASIC que permita realizar la configuración y recepción de datos del sensor PING))). Mostrar en un LCD el tiempo y la distancia medida por el sensor. Utilizar el siguiente circuito como referencia.

Page 11: Teoria Sendor Ping)))

Fig 11. Circuito para el manejo del sensor PING)))

‘PROGRAMA EJEMPLO DE USO DEL SENSOR PING))) CON UN MICROCONTROLADOR 16F877A. LA MEDICIÓN ‘EFECTUADA POR EL SENSOR SE VISUALIZA EN UNA PANTALLA DE UN LCD. EL TERMINAL SIG SE CONECTA AL PIN ‘PORTB.0 DEL MICROCONTROLADOR

‘-------------------------------------------------------------------------------------------------------------------------------------------------

‘CONFIGURACIÓN DEL LCD

DEFINE LCD_DREG PORTB ‘DEFINE PINES DEL LCD B4 A B7

DEFINE LCD_DBIT 4 ‘EMPEZANDO DESDE EL PUERTO B4 HASTA B7

DEFINE LCD_RSREG PORTB ‘DEFINE EL PUERTO B PATA CONECTAR EL BIT RS

DEFINE LCD_RSBIT 3 ‘ESTE ES EL PUERTO B3

DEFINE LCD_EREG PORTB ‘DEFINE EL PUERTO B PATA CONECTAR EL BIT ENABLE

DEFINE LCD_EBIT 2 ‘ESTE ES EL PUERTO B2

‘DEFINICIÓN DE VARIABLES A UTILIZAR

SIG VAR PORTB.0 ‘TERMINAL DE E/S DEL SENSOR PING)))

MEDIDA VAR WORD ‘ALMACENA LA MEDICIÓN DEL SENSOR EN μs

DECIMAL_MEDIDA VAR WORD

RESTO_MEDIDA VAR WORD

DISTANCIA VAR WORD ‘ALMACENA LA PARTE ENTERA DEL VALOR DE LA DISTANCIA

RESTO_DISTANCIA VAR WORD

DECIMAL_DISTANCIA1 VAR WORD

DECIMAL_DISTANCIA2 VAR WORD

DECIMAL_DISTANCIA_TOTAL VAR WORD ‘ALMACENA LA PARTE DECIMAL DEL VALOR DE LA DISTANCIA

‘-------------------------------------------------------------------------------------------------------------------------------------------------

‘PROGRAMA PRINCIPAL

MAIN:

GOSUB MEDIR ‘OBTENER LECTURA DEL SENSOR EN CENTÍMETROS

GOSUB MOSTRAR ‘MOSTRAR EN EL LCD

PAUSE 200 ‘REPETIR CADA 200 MILISEGUNDOS

GOTO MAIN

‘-------------------------------------------------------------------------------------------------------------------------------------------------

Page 12: Teoria Sendor Ping)))

‘DEFINIICÓN DE LA SUBRUTINAS

MEDIR:

LOW SIG ‘GARANTIZAR ESTADO INICIAL DEL SENSOR SIG=0

PULSOUT SIG,5 ‘EMITIR PULSO DE ACTIVACIÓN EN ALTO DURANTE 5 us

PULSIN SIG,1,MEDIDA ‘LEER LA SALIDA DEL SENSOR (ECO) Y GUARDARLA EN MEDIDA

‘PROCEDIMIENTO PARA EL CÁLCULO DE LA PARTE ENTERA Y DECIMAL DE LA DISTANCIA EN cm

MEDIDA=MEDIDA/2 ‘TIEMPO DE VIAJE DE LA SEÑAL

RESTO_MEDIDA=MEDIDA//2 ‘RESTO DE LA DIVISIÓN

DECIMAL_MEDIDA=(RESTO_MEDIDA*10)/2

DECIMAL_DISTANCIA1= (DECIMAL_MEDIDA*100)/291

DISTANCIA= (MEDIDA*100)/291 ‘PARTE ENTERA DEL VALOR DE LA DISTANCIA

RESTO_DISTANCIA= (MEDIDA*100)//291

DECIMAL_DISTANCIA2= (RESTO_DISTANCIA*10)/291

‘PARTE DECIMLAL DEL VALOR DE LA DISTANCIA

DECIMAL_DISTANCIA_TOTAL= DECIMAL_DISTANCIA1 + DECIMAL_DISTANCIA2

RETURN

‘MOSTRAR DESPLIEGA EN EL LCD EL VALOR MEDIDO Y VERIFICA QUE ESTE SE ENCUENTRE EN EL RANGO DE ‘MEDICIÓN DEL SENSOR PING))) QUE ES DE 3 cm (8.73 μs) A 30 cm (873 μs)

MOSTRAR:

IF (MEDIDA<9) OR(MEDIDA>873)THEN

LCDOUT $FE,1,"FUERA DE RANGO"

PAUSE 200

ELSE

LCDOUT $FE,1,"TIEMPO:",DEC3 MEDIDA,".",DEC1 DECIMAL_MEDIDA," us"

PAUSE 1

LCDOUT $FE, $C0,"MEDIDA:",DEC3 DISTANCIA,".",DEC1 DECIMAL_DISTANCIA_TOTAL, " cm"

PAUSE 1

ENDIF

RETURN

Page 13: Teoria Sendor Ping)))

EJEMPLO2: Realizar un programa en PIC BASIC que permita realizar la configuración y recepción de datos del sensor PING))). Realizar una comunicación inalámbrica usando dos módulos XBEE. En el circuito transmisor se debe conectar el sensor PING))) y enviar en forma serial el valor del tiempo y la distancia medida por el sensor. En el circuito receptor se debe leer serialmente la información enviada por el transmisor y mostrar en un LCD. Utilizar los siguientes esquemas como referencia.

Fig 12. Circuito transmisor para el manejo del sensor PING)))

‘PROGRAMA PARA EL CIRCUITO TRANSMISOR

‘-------------------------------------------------------------------------------------------------------------------------------------------------

INCLUDE "modedefs.bas" ‘PARA EL MODO DE COMUNICACIÓN SERIAL

‘DEFINICIÓN DE VARIABLES Y CONSTANTES A UTILIZAR

SIG VAR PORTB.0 ‘TERMINAL DE E/S DEL SENSOR PING)))

VELOCIDAD CON 396 ‘VELOCIDAD DE TRANSMISIÓN EN BAUDIOS DE 2400

MEDIDA VAR WORD ‘ALMACENA LA MEDICIÓN DEL SENSOR EN US

DECIMAL_MEDIDA VAR WORD

RESTO_MEDIDA VAR WORD

Page 14: Teoria Sendor Ping)))

DISTANCIA VAR WORD ‘ALMACENA LA PARTE ENTERA DEL VALOR DE LA DISTANCIA

RESTO_DISTANCIA VAR WORD

DECIMAL_DISTANCIA1 VAR WORD

DECIMAL_DISTANCIA2 VAR WORD

DECIMAL_DISTANCIA_TOTAL VAR WORD ‘ALMACENA LA PARTE DECIMAL DEL VALOR DE LA DISTANCIA

‘-------------------------------------------------------------------------------------------------------------------------------------------------

‘PROGRAMA PRINCIPAL

MAIN:

GOSUB MEDIR ‘OBTENER LECTURA DEL SENSOR EN CENTÍMETROS

GOSUB TRANSMITIR ‘ENVIAR DATOS EN FORMA SERIAL AL MODULO XBEE

PAUSE 200 ‘REPETIR CADA 200 MILISEGUNDOS

GOTO MAIN

‘-------------------------------------------------------------------------------------------------------------------------------------------------

‘DEFINIICÓN DE LA SUBRUTINAS

MEDIR:

LOW SIG ‘GARANTIZAR ESTADO INICIAL DEL SENSOR SIG=0

PULSOUT SIG,5 ‘EMITIR PULSO DE ACTIVACIÓN EN ALTO DURANTE 5 us

PULSIN SIG,1,MEDIDA ‘LEER LA SALIDA DEL SENSOR (ECO) Y GUARDARLA EN MEDIDA

‘PROCEDIMIENTO PARA EL CÁLCULO DE LA PARTE ENTERA Y DECIMAL DE LA DISTANCIA EN cm

MEDIDA=MEDIDA/2 ‘TIEMPO DE VIAJE DE LA SEÑAL

RESTO_MEDIDA=MEDIDA//2 ‘RESTO DE LA DIVISIÓN

DECIMAL_MEDIDA=(RESTO_MEDIDA*10)/2

DECIMAL_DISTANCIA1= (DECIMAL_MEDIDA*100)/291

DISTANCIA= (MEDIDA*100)/291 ‘PARTE ENTERA DEL VALOR DE LA DISTANCIA

RESTO_DISTANCIA= (MEDIDA*100)//291

DECIMAL_DISTANCIA2= (RESTO_DISTANCIA*10)/291

‘PARTE DECIMLAL DEL VALOR DE LA DISTANCIA

DECIMAL_DISTANCIA_TOTAL= DECIMAL_DISTANCIA1 + DECIMAL_DISTANCIA2

RETURN

‘TRANSMITIR ENVIA EN FORMA SERIAL EL VALOR MEDIDO TANTO EN TIEMPO COMO EN DISTANCIA

Page 15: Teoria Sendor Ping)))

TRANSMITIR:

SEROUT2 PORTC.6, VELLOCIDAD,[DEC3 MEDIDA, DEC1 DECIMAL_MEDIDA, DEC3 Distancia, DEC1

DECIMAL_DISTANCIA_TOTAL]

RETURN

Fig 12. Circuito receptor para la visualización de tiempo y la distancia medida por el sensor PING))) y enviada por el circuito transmisor

‘PROGRAMA PARA EL CIRCUITO RECEPTOR

‘-------------------------------------------------------------------------------------------------------------------------------------------------

‘DEFINICIÓN DE VARIABLES Y CONSTANTES A UTILIZAR

INCLUDE "modedefs.bas" ‘PARA EL MODO DE COMUNICACIÓN SERIAL

DEFINE LCD_DREG PORTB ‘DEFINE PINES DEL LCD B4 A B7

DEFINE LCD_DBIT 4 ‘EMPEZANDO DESDE EL PUERTO B4 HASTA B7

DEFINE LCD_RSREG PORTB ‘DEFINE EL PUERTO B PATA CONECTAR EL BIT RS

DEFINE LCD_RSBIT 3 ‘ESTE ES EL PUERTO B3

DEFINE LCD_EREG PORTB ‘DEFINE EL PUERTO B PATA CONECTAR EL BIT ENABLE

Page 16: Teoria Sendor Ping)))

DEFINE LCD_EBIT 2 ‘ESTE ES EL PUERTO B2

TIEMPO_ESPERA CON 2000 ‘CONTINÚE SI NO SE RECIBE UN CARÁCTER DENTRO DE 2000 US

VELOCIDAD CON 396 ‘VELOCIDAD DE TRANSMISIÓN EN BAUDIOS DE 2400

DATO1 VAR WORD ‘GUARDA EL VALOR ENTERO DEL TIEMPO MEDIDO

DATO2 VAR WORD ‘GUARDA EL VALOR DECIMAL DEL TIEMPO MEDIDO

DATO3 VAR WORD ‘GUARDA EL VALOR ENTERO DE LA DISTANCIA MEDIDA

DATO4 VAR WORD ‘GUARDA EL VALOR DECIMAL DE LA DISTANCIA MEDIDA

‘-------------------------------------------------------------------------------------------------------------------------------------------------

‘PROGRAMA PRINCIPAL

MAIN:

GOSUB RECIBIR ‘RECIBIR LOS DATOS EN FORMA SERIAL

GOSUB MOSTRAR ‘’MOSTRAR EN EL LCD

PAUSE 200 ‘REPETIR CADA 200 MILISEGUNDOS

GOTO MAIN

‘-------------------------------------------------------------------------------------------------------------------------------------------------

‘DEFINIICÓN DE LA SUBRUTINAS

RECIBIR:

SERIN2 PORTC.7, VELOCIDAD, TIEMPO_ESPERA, NODATO, [DEC3 DATO1, DEC1 DATO2, DEC3 DATO3,

DEC1 DATO4]

NODATO:

RETURN

‘MOSTRAR DESPLIEGA EN EL LCD EL VALOR MEDIDO Y VERIFICA QUE ESTE SE ENCUENTRE EN EL RANGO DE ‘MEDICIÓN DEL SENSOR PING))) QUE ES DE 3 cm (8.73 μs) A 30 cm (873 μs)

MOSTRAR:

IF (DATO1<9) OR(DATO1>873)THEN

LCDOUT $FE,1,"FUERA DE RANGO"

PAUSE 200

ELSE

LCDOUT $FE,1,"TIEMPO:",DEC3 DATO1,".",DEC1 DATO2," us"

Page 17: Teoria Sendor Ping)))

PAUSE 1

LCDOUT $FE, $C0,"MEDIDA:", DEC3 DATO3,".",DEC1 DATO4, " cm"

PAUSE 1

ENDIF

RETURN

7. REFERENCIAS

1. REYES, Carlos, “Microcontroladores Programación en BASIC: PIC 16F862X, 16F81X, 16F87X”, 3era Edición, Volumen1, Ecuador, 2008.

2. Manual de programación para PicBasic PRO Compiler (Español):

http://www.todopic.com.ar/pbp_sp.html

3. Uso del sensor ultrasónico de distancia PING))) con la tarjeta iBOARD (Español):

http://www.roso-control.com/Espanol/iBOARD/170_iBOARD_Ping_IR/PING/PING.pdf

4. Varios documentos que hablan del funcionamiento y programación del sensor PING))) (Inglés):

http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf

http://www.parallax.com/Portals/0/Downloads/docs/prod/acc/28015-PING-v1.5.pdf

http://www2.latech.edu/~dehall/LWTL/ENGR122/notes/1_PING.pdf

http://users.ece.utexas.edu/~valvano/Datasheets/PingDocs.pdf