http://www.x-robotics.com/sensores.htm
Miércoles, 26 de Agosto de 2015
|
|
INFRARROJOS | MECANICOS | MAGNETICOS | ULTRASONIDOS |
IS471F | Bumper | Basico | |
CNY70 | |||
GP2D | |||
LUZ | Temperatura | Humedad | Aceleración / Inclinación |
LDR | LM35 | SHT11 | memsic7202 |
Para dotar al
robot de sensibilidad con el mundo que le rodea, se necesita dotar a este, de
sensores para detectar obstáculos y así poder actuar para esquivarlos o hacer
los movimientos necesarios según la programación que se haga.
Descripción:
Sensor basado en el dispositivo
SHARP
IS471F inmune a interferencias de luz normal. Este sensor incorpora un
modulador/demodulador integrado en su carcasa y a
través de su patilla 4 controla un diodo LED de infrarrojos externo,
modulando la señal que este emitirá, para ser captada por el IS471F que
contiene el receptor. cuando un objeto se sitúa enfrente del conjunto
emisor/receptor parte de la luz emitida es reflejada y demodulada para
activar la salida en la patilla 2 que pasará a nivel bajo si la señal
captada es suficientemente fuerte.
El uso de luz IR modulada
tiene por objeto hacer al sensor relativamente inmune a las interferencias
causadas por la luz normal de una bombilla o la luz del sol.
Funcionamiento:
Como puede verse en el esquema, el sensor se alimenta por sus patitas 1 y
3 y estas corresponden a Vcc y Gnd respectivamente, la patita 2 es la
salida del detector y la patita 4 es la salida que modula al led emisor
externo. Mediante el potenciómetro P1 se varia la distancia a la que es detectado
el objeto. Contra mas baja sea la resistencia de este potenciómetro, mas
intensa será la luz emitida por el diodo de IR y por lo tanto mayor la
distancia a la que puede detectar el objeto.
El el
siguiente esquema vemos el simple circuito necesario para hacer funcionar al
sensor.
Usos:
Creo que estos se usan para detección de obstáculos por reflexión y detección
de oponentes en combates de sumo. (digo creo porque aun no e probado este
dispositivo y no se que sensibilidad tiene y si es adecuado para esto)
Ideas
y mejoras: En el circuito anterior lo que vemos es un detector de
distancia fija ajustable por un potenciómetro, pero seria posible hacerlo
de varias distancias o incluso un detector gradual de distancias. Para
varias distancias se podría conmutar varias resistencias y así
calcular la distancia del objeto haciendo pruebas antes, y creando una
tabla de equivalencias. Para el detector gradual también seria posible
controlando la corriente que le llega al diodo emisor mediante un
conversor D/A y un circuito de potencia basado el algún transistor, todo
esto controlado por un µControlador.
Todavía
no e probado nada y esto tan solo son ideas pero si alguien lo prueba y
quiere compartir sus experiencias, se lo agradeceríamos todos.
|
|||||||||||||||||||||||||||
Descripción:
El
CNY70 es un pequeño
dispositivo con forma de cubo y cuatro patitas que aloja en su
interior un diodo emisor de infrarrojos que trabaja a una longitud de onda
de 950 nm. y un fototransistor (recetor)
estando ambos dispuestos en paralelo y apuntando ambos en la misma dirección,
la distancia entre emisor y receptor es de 2.8
mm. y están separados del frontal del encapsulado por 1 mm.
El
la siguiente figura vemos la disposición interna del CNY70 mirando el
encapsulado desde arriba, así pues tenemos el diodo emisor de infrarrojos a
la izquierda y el fototransistor a la derecha.
Funcionamiento:
El fototransistor conducirá mas, contra mas luz reflejada del emisor capte
por su base. La salida de este dispositivo es analógica y viene determinada
por la cantidad de luz reflejada, así pues para tener una salida digital se
podría poner un disparador Trigger Schmitt y así obtener la salida digital
pero esto tiene un problema, y es que no es ajustable la sensibilidad del
dispositivo y los puntos de activación de histerisis distan
algunos milivoltios uno del otro (ver explicación en el esquema de la LDR ). Para solventar este problema muestro el siguiente circuito
basado en un amplificador operacional configurado en modo comparador, en la
salida del circuito obtendremos una señal cuadrada lista para su interconexión
con la entrada de cualquier µControlador.
La
sensibilidad del circuito es ajustable mediante la resistencia variable de
10k (aconsejo poner una resistencia multivuelta). Para comprobar y
visualizar la señal de salida es posible montar un diodo led en la salida
con su resistencia de polarización a masa, si así lo hacemos veremos que
cuando el sensor detecta una superficie blanca o reflectante el led se
ilumina ya que la salida del
LM358 pasa a nivel alto
y por lo tanto alimenta
al led que tiene su ánodo conectado directamente.
La salida del LM358 varia de 0V
para nivel lógico 0 a unos 3,3V para nivel lógico 1, con lo que puede ser
llevada directamente a un disparador trigger schmitt (p.ej. 74LS14) para
conformar pulsos de niveles TTL de 0 a 5V si fuese necesario.
Usos:
Comúnmente utilizado en los robots rastreadores (Sniffers) para detección
de líneas pintadas sobre el suelo, debido principalmente a su baja
distancia de detección.
Ideas
y mejoras: Mas que una idea esto es un descuido que tuve al
montar el circuito en una protoboard y asi comprobé que quitando
la resistencia de polarización de 10k que tiene conectada el fototransistor
a su emisor hacemos que el circuito se vuelva mucho mas sensible (e
inestable también jeje). Con un buen ajuste de la resistencia variable e
conseguido detectar superficies reflectantes a una distancia de unos 5 cm.
también al pasar la mano por enfrente del sensor se activaba la salida.
Supongo que habrá una manera menos inestable de hacer esto así que ya sabéis...
a cacharrear y haber que sale jejeje
|
|||||||||||||||||||||||||||
Usos:
Debido a su gran rango de medida este sensor es adecuado para detectar obstáculos
reflectantes como paredes, usado en robots de exploradores para los de
laberintos entre otros.
Ideas
y mejoras: Debido a su gran directividad se puede montar un
sensor GPD2 en un servo y así tener un radar de IR cubriendo de esta manera
un radio de 180º aprox.
Descripción
de uso del GP2D02: Este sensor proporciona
una salida en serie digital con un valor de un byte proporcional al ángulo
de recepción del haz de luz, este valor no es lineal a la distancia medida
así que hay que usar un calculo para saber la medida de distancia en
centímetros. En el ejemplo mostrado mas abajo se usa otro método, que es
simplemente una tabla de conversión de valores conocidos.
En la fotografía siguiente vemos
la disposición de pines en el conector de salida del GP2D02:
1.-GND
2.-Vin
3.-Vcc
4.-Vout
El dispositivo se alimenta
poniendo a +5V el pin VCC y GND a 0V(masa). El pin Vout
es la salida de datos en serie con lógica positiva y niveles TTL.
Vin
es la entrada con la que comandaremos el funcionamiento del sensor, hay que
tener muy en cuenta una característica de este pin y es que la salida es a
drenador abierto y esta prohibido poner esta entrada a una salida TTL o CMOS
ya que esto provocaría la destrucción de la entrada, solo acepta niveles
bajos y por lo tanto para acoplarla a la salida de un microcontrolador es
necesario poner un diodo (p.ej.: 1N4148) tal como se muestra a continuación:
Una vez tenemos conectado el
sensor nos queda mandarle hacer una captura y leer el resultado, para
conseguir esto hay que seguir unos sencillos pasos:
Se puede acelerar la medida
comprobando cuando pasa a nivel alto la señal Vout mientras se mantiene a
nivel bajo Vin en los 70mS de inicio de medición aunque recomiendo esperar
los 70mS.
Medidor
de distancias con PIC16F876 y LCD 2x16:
Nota: Como puede verse en el
esquema no esta puesto el circuito oscilador de 4 MHz necesario para que
funcione el montaje, no olvidarse de ponerlo! (cristal de 4MHz y
condensadores de 27pF)
Programa en ensamblador para
medidor Gp2d02:
El programa usa una tabla de
conversión calibrada para usar con una cartulina blanca como objeto distante
para la medición y muestra en el LCD la distancia en centímetros
continuamente, para otros objetos de diferente color se puede modificar la
tabla fácilmente.
|
|||||||||||||||||||||||||||
MAGNETICOS
|
Descripción:
La LDR (Light Dependent Resistor) o resistencia dependiente de la luz, como
su propio nombre indica es una resistencia que varia su valor en función de
la luz que incide sobre su superficie. Contra mas sea la intensidad de luz
que incida en la superficie de la LDR menor será su resistencia y contra
menos luz incida mayor será la resistencia. La forma externa puede variar de
la mostrada en esta foto ya que este modelo en concreto no es muy común pero
la función es la misma.
Funcionamiento:
Para hacernos un medidor de luz ambiental o una fotocélula
que encienda un determinado proceso en ausencia o presencia de luz podremos
hacerlo de dos maneras, usando un amplificador operacional para detectar y
ajustar la sensibilidad y punto en que se dispara la salida como en el caso
del
CNY70 mostrado mas arriba o bien hacerlo como se muestra en el siguiente
circuito, que es en base a un disparador trigger schmitt TTL que conformara
una señal totalmente compatible TTL
para ser aplicada a un microcontrolador o puerta
lógica compatible.
El circuito consta de un divisor
de tensión formado por la LDR, una resistencia y un disparador trigger
schmitt inversor modelo
74LS14. Como la LDR varia en función de la luz, la
señal de salida del divisor también lo hará y cuando pase el umbral de
disparo del trigger schmitt este
cambiara el estado de su salida según
corresponda.
Los umbrales de disparo para el
74LS14 son de 0,9 y 1,7 voltios, esto quiere decir que cuando la señal en la
entrada del disparador supere los 1,7 voltios se tomara como un 1 lógico en
la entrada y la salida al ser inversa tomara el nivel lógico bajo o 0
voltios, si el voltaje de entrada baja por debajo de 0,9 voltios se tomara
como un 0 lógico en la entrada con lo que la salida tomara un nivel lógico
1.
El problema que se comentaba en
la explicación del
CNY70 radica en la distancia en voltios entre el umbral
de disparo alto y bajo, que es de 0,8 voltios entonces imaginemos que si la
luz recibida en el sensor va incrementando hasta llegar a los 1,7 voltios y
rebosarlos este será el punto de activación pero no se desactivara al volver
a pasar por este punto, ya que la salida del circuito no se desactivara
hasta que no se baje por debajo del umbral de 0,9 voltios, esto hay que
tenerlo muy en cuenta ya que para algunos casos donde los niveles a detectar
sean muy distantes como por ejemplo detectar niveles de todo o nada o luz y
oscuridad puede dar igual pero si lo que se quiere es activar algún circuito
en un determinado nivel de luz y desactivarlo justo cuando ese nivel ya no
exista, entonces el circuito ya no es valido y será mejor usar el circuito
basado en amplificador operacional en modo comparador de tensiones.
Nota: El circuito
integrado
74LS14 dispone en su interior de 6 puertas inversoras trigger
schmitt, así que hay que tener especial cuidado en no dejar ninguna entrada
no usada al aire, esto es sin conexión alguna ya que la puerta empezara a
oscilar y podría causar la destrucción de dicha puerta, para que esto no
suceda hay que conectar todas las entradas a un nivel lógico estable,
normalmente a GND. las salidas se dejaran como es lógico al aire ya que
tendrán el nivel lógico inverso que en su entrada.
Usos:
Las LDR se usan para detectar niveles de luz
ambiente o seguimiento de luces o linternas, así pues podemos crear un
seguidor de luz con varias LDR dispuestas alrededor del robot y hacer que
este siga una luz directa que le enfoque, también pueden usarse para
encender los focos o luces de balizamiento del robot en ausencia de luz.
Ideas
y mejoras: Una
mejora es sustituir la resistencia fija del divisor de tensión por una
variable de valor adecuado, para poder ajustar el umbral de disparo.
|
|
Temperatura | |
Descripción:
El LM35 es un sensor de temperatura con una precisión calibrada de 1ºC y un
rango que abarca desde -55º a +150ºC.
El sensor se presenta en
diferentes encapsulados pero el mas común es el to-92 de igual forma que un
típico transistor con 3 patas, dos de ellas para alimentarlo y la tercera
nos entrega un valor de tensión proporcional a la temperatura medida por el
dispositivo. Con el LM35 sobre
la mesa las patillas hacia nosotros y las letras del encapsulado hacia
arriba tenemos que de izquierda a derecha los pines son: VCC - Vout - GND.
La salida es lineal y equivale a 10mV/ºC por lo tanto:
Funcionamiento:
Para
hacernos un termómetro lo único que necesitamos
es un voltímetro bien calibrado y en la escala correcta para que nos muestre
el voltaje equivalente a temperatura. El
LM35 funciona
en el rango de alimentación comprendido entre 4 y 30 voltios.
Podemos conectarlo a un
conversor Analógico/Digital y tratar la medida digitalmente, almacenarla o
procesarla con un µControlador o similar.
Usos:
El sensor de temperatura puede usarse para
compensar un dispositivo de medida sensible a la temperatura ambiente,
refrigerar partes delicadas del robot o bien para loggear temperaturas en el
transcurso de un trayecto de exploración.
Circuito
de prueba:
El siguiente montaje es un medidor de temperatura
de 4 canales
usando un PIC16F876 y un LCD para mostrar los datos aunque se puede
modificar fácilmente el programa para obtener los datos de temperatura y
calcular con ellos lo que fuese necesario.
Para una medida real con el
conversor del Analógico/Digital se ha dispuesto un generador de tensión de
referencia ajustable modelo
LM336
externo al pic, con lo cual la medida de temperatura será simple y fiable.
El rango de medidas que soporta este montaje es solo de temperaturas
positivas y abarca desde 0º a +150ºC.
En el LCD se muestran los 4
canales T1=RA0, T2=RA1, T3=RA2, T4=RA5.
Nota: Como puede verse en el
esquema no esta puesto el circuito oscilador de 4 MHz necesario para que
funcione el montaje, no olvidarse de ponerlo! (cristal de 4MHz y
condensadores de 27pF). Tampoco olvidar poner condensadores de desacoplo de
100nF entre las patillas de alimentación de cada integrado lo mas cerca
posible de estas para evitar interferencias por la línea de alimentación que
son muy criticas usando el conversor A/D del pic.
Ajuste:
Hay un único ajuste que es necesario hacer
correctamente y es referente a la tensión de referencia para el conversor
A/D, lo haremos quitando el µControlador PIC de su zócalo y midiendo entre
el pin número 5 correspondiente a "RA3 +Vref" y GND, entonces ajustaremos
por medio de la resistencia variable multivuelta (recomiendo multivuelta y
no normal por precisión de ajuste) para que en el polímetro nos marque
exactamente 2,56 V con lo cual se consigue que con una precisión de
conversión A/D de 8 bits cada 10mV represente un incremento en el byte de
salida del conversor y por lo tanto lo podamos representar de manera
sencilla sin hacer cálculos complejos.
Programa en ensamblador para
termómetro 4 canales:
|
|
HUMEDAD | |||||||||||||||||||||||||||||
Descripción:
El
SHT11 de la casa
www.sensirion.com es un sensor integrado de humedad calibrado en
fábrica con salida digital mediante un bus serie sincrono y protocolo
especifico. El dispositivo también dispone de un sensor de Temperatura
integrado para compensar la medida de humedad dependiendo de la temperatura,
en casos extremos. Cuenta también en su interior con un calefactor para
evitar condensación en el interior de la cápsula de medida para condiciones
de niebla o similar donde existe condensación.
Funcionamiento:
El
SHT11 se puede alimentar con un
rango de tensión continua comprendido entre 2,4 a 5V
y es necesario proveer
lo
mas cerca posible del chip un condensador de desacoplo de 100nF entre GND y
VCC. En la imagen puede observarse una pequeña PCB (Printed Circuit Board)
realizada al efecto para albergar al SHT11 y su
condensador de desacoplo, ya que el sensor se
presenta en encapsulado para montaje superficial LCC (Lead Chip Carrier) y
es difícil de quitar una vez soldado, así que mejor trabajar con pines mas
standard como un SIL de 4 pines.
Como puede verse en el datasheet
del
SHT11, el chip dispone de 10 pines aunque solo se usan 4 de ellos y los
demás se deberán soldar en pads al aire, simplemente para la sujeción del integrado.
El pin DATA corresponde a
la salida/entrada de datos para comandar y leer el sensor y es un pin
triestado por lo que necesita de una resistencia de polarización a Vcc (push-up).
SCK se utiliza para sincronizar la transmisión y no dispone de
frecuencia mínima.
Transmission Start: Para
comunicarse con el
SHT11 lo primero que hay que hacer es mandar una secuencia de Inicio de
Transmisión "Transmission Start". Esta consiste en poner a cero lógico la
línea de datos mientras SCK esta a uno, seguidamente se genera un pulso bajo
en SCK mientras la línea DATA sigue a cero y para finalizar se pone a 1 DATA
mientras SCK esta a 1, seguidamente se baja a cero también SCK y finaliza la
secuencia dejando la línea de datos y Clock en los estados lógicos por
defecto, DATA en estado alto y SCK en estado bajo.
Lo siguiente será mandar un
comando de los siguientes que acepta:
El protocolo de transmisión de
comandos esta basado en un byte completo o lo que es lo mismo 8 bits, como
los comandos son de 5 bits tan solo el resto de bits a la izquierda siempre
serán 0. Por lo que se mandaran primero los 3 ceros seguido del comando para
completar el byte.
El
SHT11 indicará una recepción valida con un pulso de ACK en la línea de
datos que es bidireccional (no lo olvidemos) y lo hará en el siguiente pulso
de CLK después de haber completado los 8 bits del comando, por lo tanto acto
seguido después de enviar el comando hay que configurar como entrada el
puerto del microcontrolador conectado a DATA del
SHT11 y generar una señal de CLOCK para que el sensor nos mande su
respuesta ACK y lo hará poniendo la línea a nivel bajo ya que como se dijo
mas arriba la línea de datos esta polarizada a VCC por lo tanto siempre hay
un 1 lógico en ella y lo que hace el SHT11 es forzar a 0 lógico con su
salida a colector abierto.
Secuencia de medida:
Suponiendo que ya sabemos mandar un comando y por ejemplo hemos mandando un
comando "00000101" correspondiente a
"Medida de Humedad", una vez
recibido el ACK desde el sensor hay que esperar a que este complete la
adquisición y nos entregue su medida, esto suele tardar unos 55mS para una
resolución de salida de 12bits o bien, unos 11mS para una resolución de 8
bits. Como este tiempo de adquisición no es muy exacto y puede variar
dependiendo de la alimentación del sensor, y por lo tanto de su oscilador
interno. Para evitar esperas innecesarias el sensor genera un pulso bajo en
la línea de datos y así se sabe que lo siguiente ya serán datos validos,
esto se hace comprobando la línea de datos cada x tiempo hasta que esta pase
a nivel bajo. Si es nivel alto aun no a acabado y cuando recibamos un nivel
bajo será la indicación de adquisición completada y pasaremos a leer la
medida del sensor.
Ahora se generan 8 pulsos de
reloj en la línea CLK y se guarda el estado de cada bit que nos retornara el
sensor. La trama que retorna el sensor se compone de 3 bytes, el primero
corresponde a MSB el segundo a LSB y el tercero es el CRC-8 Checksum para
comprobar que el dato a llegado correcto, pero lo podemos ignorar generando
NACK después de la llegada del segundo byte (LSB). Como puede observarse el
dato de la medida se compone de 2 bytes aunque como mucho el dato valido
será de 12 bits de resolución, pero aunque configuremos el sensor para una
resolución de 8 bits.. siempre leeremos 2 bytes ignorando el MSB en este
caso.
Despues de cada 8 bits recibidos
el microcontrolador a de generar un ACK para que el sensor sepa que ya a
recibido los datos. Esto se hace generando un flanco de subida en CLK
mientras DATA esta a nivel bajo. Después de esto se continua con la lectura
de otro byte.
Para acabar la trama se genera
desde el microcontrolador un NACK (NoACK) esto es lo mismo que el ACK pero
en vez de mantener la linea DATA a nivel bajo la tendremos que poner a 1
generando mientras esto pasa un flanco de subida en CLK igual que antes.
El sensor admite unas dos
adquisiciones o medidas por segundo por lo que no se debe forzar la lectura
con refrescos superiores a este, y ni que decir que una medida de este tipo
no necesita un refresco tan elevado.. lo normal seria una medida cada 5 o 10
segundos o mas incluso.
Usos:
Este sensor de humedad/temperatura puede ser
usado en estaciones meteorológicas portátiles, y en un robot explorador
puede servir para generar gráficos de humedad en los sitios por donde pasa
así como también evitar funcionar o tomar las medidas adecuadas en
situaciones de climatología extrema.
Circuito
de prueba:
El siguiente montaje es un medidor de humedad
relativa (sin compensación de temperatura) el cual utiliza un sensor
integrado SHT11, un pic16F876 y un LCD microcontrolado.
La medida se muestra por
pantalla representando un porcentaje de humedad relativa y se actualiza cada
2 segundos.
El esquema para el montaje es el
siguiente:
Nota: No se ha realizado el
circuito impreso debido a la sencillez del montaje, que puede hacerse en
protoboard sin problemas.
|
|||||||||||||||||||||||||||||
Aceleración / Inclinación | ||||||||||||||||||||||||||||||||||||
MXD7202GL
|
Descripción:
El sensor de aceleración lineal de dos ejes modelo
MXD7202GL
de memsic esta fabricado para medir aceleración lineal en sus dos ejes hasta
un fondo de escala de 2g (2 veces la fuerza de la gravedad). Debido a la
capacidad de poder medir la fuerza de la gravedad terrestre lo usaremos
también como inclinómetro de estado sólido. Este sensor se presenta en
encapsulado LCC8, esta compensado internamente en temperatura y no le
afectan las fluctuaciones en la alimentación. La salida del sensor es un
pulso digital de ancho variable a una frecuencia fija de 100Hz.
Funcionamiento:
Este sensor no tiene partes móviles para medir la
aceleración y es por eso que es capaz de sobrevivir a choques de mas de 50g
En vez de partes móviles, este sensor se basa en el efecto de convección de
calor, creando una burbuja de calor mediante un filamento dentro de la
cavidad del encapsulado que esta rellena de un gas inerte. Los captadores
están dispuestos alrededor de este filamento y captan el calor de la burbuja
que esta en el centro, al acelerar hacia cualquier lado, esta burbuja de
calor se desplaza hacia el lado contrario al movimiento y los captadores
miden la diferencia de calor para de este modo crear una salida proporcional
a la aceleración detectada.
En la figura adjunta se muestra
el encapsulado visto desde arriba y puede observarse la disposición de pines
así como también los ejes de medición correspondientes.
Teoría de operación para medir inclinación:
Como se ha dicho, este sensor es capaz de medir
la fuerza de la gravedad terrestre si se coloca uno de sus ejes
perpendiculares a la superficie de la tierra. Pero la medida de aceleración
no será lineal, ya que será en función del seno del ángulo al que se ponga
el sensor con respecto a la superficie de la tierra.
En el siguiente gráfico puede verse la señal
obtenida con respecto a la inclinación de 0 a 180º.
Los valores de PWM que da el sensor para el
máximo y mínimo son los siguientes:
+1g = 6,25mS
-1g = 3,75mS
Por lo tanto tenemos un rango total de 6,25 -
3,75 = 2,5mS
esto quiere decir que el ancho de impulso de la
señal que nos dará el sensor variara un máximo de 2,5mS aprox. si lo
tumbamos de un lado a otro, debido a la aceleración de 1g provocada por la
fuerza de la gravedad terrestre.
Cuando la aceleración es nula 0g podemos leer un
duty cycle del 50% que corresponde a 5mS.
Con esto ya tenemos definidos los valores para
-90º, 0º y +90º que serán los siguientes:
-90 = 3,75ms
0º = 5ms
+90º = 6,25ms
Ahora nos faltan todos los demás... para medir
aceleración seria dividir el rango total en la precisión que queramos
obtener ya que es una medida lineal cuando se trata de aceleración, pero para medir inclinación tendremos
que hacer uso de la trigonometría para obtener el valor correcto porque la
aceleración medida en el acelerómetro depende de la inclinación con respecto
al eje del sensor y por tanto será en función del seno de dicha inclinación.
y lo haremos como sigue..
Entre el valor mínimo y el valor máximo queremos
sacar 180 valores intermedios que corresponderán a cada uno de los grados de
arco relativos a la inclinación que queremos obtener y teniendo en cuenta
que el valor obtenido surge en relación al seno del ángulo, tendremos que
diferenciar entre sectores de 90º o cuadrantes.
Si el valor leído es menor de 5mS, en este caso
estamos en el rango de 0º a 90º y si el valor fuese mayor de 5mS estaríamos
en el rango de 90º a 180º, primer y segundo cuadrante respectivamente.
Para linealizar la salida y conseguir un valor
de inclinación real se usaran las siguientes formulas.
De 0º a 90º se usará la siguiente fórmula:
y de 90º a 180º se usará esta otra:
Un ejemplo practico:
Imaginemos que leemos un ancho de impulso de
4,12mS. Como es menor de 5mS usaremos la primera formula,
4,12 - 3,75 = 370µS / 1,25mS = 0,296 mS
1 - 0,296 = 0,704
Ahora ya tenemos el coseno del ángulo y tan solo
tenemos que hacer la operación inversa, el arco coseno y obtendremos el
ángulo para dicho coseno.
ArCos( 0,704 ) = 45,25 = 45º
Por lo tanto un valor de 4,12mS corresponderá a
un ángulo de inclinación real de 45º
Circuito
y programa de medición:
Como el MXD7202GL dispone de salidas digitales PWM con lo
cual podemos
conectarlo directamente a cualquier puerto de entrada de un
microcontrolador. El circuito simplemente es un pic16F876 con un max232
conectado a la USART para comunicarse con el PC por medio del bus serie
RS232.
El programa contenido en el pic
se dispara a cada flanco de subida de la señal y cuenta pequeños intervalos
incrementando en cada uno de ellos el contador TMR1 hasta el flanco de
bajada de la señal, para saber el ancho del impulso de
la señal PWM y luego pasa los datos del contador de 16bits al PC por medio
de la USART para que el PC calcule y analice las muestras.
Nota: En el esquema anterior falta la
alimentación del pic y del max232, el oscilador del pic y el circuito de
reset, así como también los condensadores de desacoplo de 100nF para cada
integrado.
El código fuente para grabar en el pic es el
siguiente:
Software
de análisis:
El programa creado al efecto para análisis de datos
procedentes del acelerómetro captura los datos procedentes del circuito de
muestreo y recibe 4 bytes que son los 16 bits de cada timer de conteo de
ancho de impulso.
La
ventana del programa esta dividida en dos grandes displays, el de arriba
corresponde a los datos para el eje X y el de abajo para el eje Y.
Dentro de cada una de esas ventanas tenemos una
disposición idéntica de controles y visualizadores para ambos ejes.
La primera parte situada arriba a la derecha,
consta de dos medidores de aguja lineales, el medidor de arriba es
directamente el valor del timer expresado en cuentas y su valor directo
puede verse justo debajo además del valor de duty cicle correspondiente
expresado en segundos. Justo debajo esta el medidor lineal de media y puede
ajustarse mediante un scroll horizontal situado al lado que indica cuantas
muestras son necesarias para calcular la media, contra mas muestras pongamos
mas estable será la medida pero mas lento será el refresco al necesitar
esperar mas muestras.
En la parte inferior podemos ver un grafico que
se va pintando al ritmo que entran datos, en este grafico podemos ver la
señal en tiempo real (línea negra) y la media calculada (línea amarilla),
este grafico es muy útil para analizar la señal y ver como afecta la
aceleración lineal a la inclinación. Como podemos observar a cada lado del
grafico tenemos varios scrolls, estos son para el ajuste de fondo de escala
tanto en tiempo como en "g" medidos y el scroll vertical de la derecha es
simplemente para desplazarse por el grafico de arriba a abajo.
La parte mas compleja en cuanto a cálculos se
refiere es la pantalla situada arriba a la izquierda que muestra un reloj
analógico de forma angular. Este medidor muestra la inclinación calculada
respecto a la aceleración de la gravedad terrestre.
Software
libre de ejemplo:
Este software es una aplicación de ejemplo
en la cual se reciben los datos
por puerto serie y se calcula en tiempo real los valores
medios de inclinación
para presentarlos por pantalla.
Existen unos scroll deslizantes
con los cuales podemos ajustar cuantas capturas son necesarias para calcular
la media de la señal medida, para evitar oscilaciones debidas a
aceleraciones rapidas.
Además es capaz de mover un
objeto 3d en relación a la inclinación real en la que se coloca el sensor de
entrada, con lo cual podemos mover el objeto 3d en el pc moviendo el sensor
en el mundo real.
Video demostracion:
|
|||||||||||||||||||||||||||||||||||
Robotica & µControladores Pic
Daniel C. Martin "ionitron"
··· Barcelona (Spain) ··· 2001-2008
No hay comentarios:
Publicar un comentario