You are on page 1of 17

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.
• 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
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
 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:

pie 12 pu lg adas 1 x10 -6 seg pu lg adas


Velocidad =1130 * * = 0.01356
seg 1 pie 1 µseg µseg

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

0.01356 pu lg adas → 1 µseg x = 73 .746 µseg


1 pu lg ada → x =?

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:


pie 30 .48 cm 1 x10 -6 seg cm
Velocidad =1130 * * = 0.034442
seg 1 pie 1 µseg µseg

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

0.034442 cm → 1 µseg x = 29 .034 µseg


1 cm → x =?

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:

dato
dis tan cia PULGADAS =
2 * 73 .746
dato
dis tan cia CENTIMETRO S =
2 * 29 .034

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)


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)


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
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
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.

MEDIDA
dis tan cia PULGADAS =
2 * 73 .746
MEDIDA
dis tan cia CENTIMETRO S =
2 * 29 .034

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:
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.
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

‘-------------------------------------------------------------------------------------------------------------------------------------------------
‘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
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


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
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


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"


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

You might also like