Professional Documents
Culture Documents
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.
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.
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.
Fig. 3. Dimensiones físicas del sensor PING))). Vista Frontal y Vista Lateral.
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).
El funcionamiento del sensor PING))) es explicado de forma simple por medio del
diagrama de tiempos de la fig 6.
Por otro lado, también nos interesa conocer a cuantos microsegundos equivale una
pulgada, por lo tanto:
Por otro lado, también nos interesa conocer a cuantos microsegundos equivale un
centímetro, por lo tanto:
CONCLUSIÓN:
dato
dis tan cia PULGADAS =
2 * 73 .746
dato
dis tan cia CENTIMETRO S =
2 * 29 .034
OBSERVACIÓN:
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
Ejemplo:
PULSOUT PORTB.5, 1000 ‘envia un pulso de 1000 μseg (1 mseg) por el pin 5 (a
4 Mhz).
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)
Ejemplo:
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):
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= 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
DECIMAL_MEDIDA = (RESTO_MEDIDA*10)/2
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
‘-------------------------------------------------------------------------------------------------------------------------------------------------
‘-------------------------------------------------------------------------------------------------------------------------------------------------
‘PROGRAMA PRINCIPAL
MAIN:
GOTO MAIN
‘-------------------------------------------------------------------------------------------------------------------------------------------------
‘DEFINIICÓN DE LA SUBRUTINAS
MEDIR:
DECIMAL_MEDIDA=(RESTO_MEDIDA*10)/2
DECIMAL_DISTANCIA1= (DECIMAL_MEDIDA*100)/291
RESTO_DISTANCIA= (MEDIDA*100)//291
DECIMAL_DISTANCIA2= (RESTO_DISTANCIA*10)/291
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
PAUSE 200
ELSE
PAUSE 1
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.
‘-------------------------------------------------------------------------------------------------------------------------------------------------
‘-------------------------------------------------------------------------------------------------------------------------------------------------
‘PROGRAMA PRINCIPAL
MAIN:
GOTO MAIN
‘-------------------------------------------------------------------------------------------------------------------------------------------------
‘DEFINIICÓN DE LA SUBRUTINAS
MEDIR:
DECIMAL_MEDIDA=(RESTO_MEDIDA*10)/2
DECIMAL_DISTANCIA1= (DECIMAL_MEDIDA*100)/291
RESTO_DISTANCIA= (MEDIDA*100)//291
DECIMAL_DISTANCIA2= (RESTO_DISTANCIA*10)/291
RETURN
‘TRANSMITIR ENVIA EN FORMA SERIAL EL VALOR MEDIDO TANTO EN TIEMPO COMO EN DISTANCIA
TRANSMITIR:
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 PRINCIPAL
MAIN:
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
PAUSE 200
ELSE
PAUSE 1
ENDIF
RETURN
7. REFERENCIAS
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
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