miércoles, 26 de agosto de 2015

Sensores para Robotica Infrarrojos, Mécanicos, Magnéticos, Ultrasonidos


http://www.x-robotics.com/sensores.htm


Miércoles, 26 de Agosto de 2015


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.


INFRARROJOS



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
 

Descripción: El sensor GP2DXX de sharp es un dispositivo de  reflexión por infrarrojos con medidor de distancia proporcional al ángulo de recepción del haz de luz que incide en un sensor lineal integrado, dependiendo del modelo utilizado, la salida puede ser analógica, digital o booleana.
 
Funcionamiento: El dispositivo emite luz infrarroja por medio de un led emisor de IR, esta luz pasa a través de una lente que concentra los rayos de luz formando un único rayo lo mas concentrado posible para así mejorar la directividad del sensor, la luz va recta hacia delante y cuando encuentra un obstáculo reflectante rebota y retorna con cierto ángulo de  
inclinación dependiendo de la distancia, la luz que retorna es concentrada por otra lente y así todos los rayos de luz inciden en un único punto del sensor de luz infrarroja que contiene en la parte receptora del dispositivo. Este sensor es un CCD lineal y dependiendo del    ángulo de recepción de la luz incidirá esta en un punto u otro del sensor pudiendo de esta manera obtener un valor lineal y proporcional al ángulo de recepción del haz de luz.
Dependiendo del modelo elegido leeremos de una manera u otra la salida de este con lo cuál tendremos que remitirnos al datasheet del modelo elegido para ver su funcionamiento interno.
  • En los modelos analógicos la salida es un voltaje proporcional a la distancia medida.
  • En los modelos digitales la lectura será de 8 bits serie con reloj externo.
  • En los modelos Booleanos la salida será de 1 bit y este marcara el paso por la zona de histéresis del sensor con lo cual solo tendremos una medición de una distancia fija.  

 
Datasheets Rango de medida Tipo de salida
GP2D-02 10 a 80 cm. Digital 8 bits
GP2D-05 10 a 80 cm.(adj, micro pot.) Lógica 1 bit
GP2D-12 10 a 80 cm Analógica (0-3V)
GP2D-15 adj. a 24cm de fabrica Lógica 1 bit
GP2D-120 4 a 30 cm. Analógica (0-3V)


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:
  1. La entrada Vin en reposo a de ser nivel lógico alto con lo que el diodo bloqueara este estado y solo cuando se ponga un nivel lógico bajo será cuando el sensor reciba la orden, sabido esto, indicamos al sensor que inicie una captura poniendo a nivel lógico bajo el pin Vin y mantendremos el estado bajo un tiempo de 70mS, transcurridos los cuales volveremos a poner Vin a nivel lógico alto. Ahora el sensor ya tiene el dato listo para ser transmitido y como el bus de salida es serie tenemos que sincronizar para saber cuando salen los bits, el sensor lo consigue poniendo cada bit en Vout por cada flanco de bajada de la señal Vin.
  2. Espera de 0,2mS o menos para iniciar el primer flanco de bajada.
  3. Poner Vin a nivel lógico bajo con lo cual iniciamos el primer flanco de bajada de la señal y el sensor nos responde poniendo el bit de mayor peso "MSB" en Vout.
  4. Leer el bit de Vout y almacenarlo debidamente para completar el byte correspondiente al dato de salida.
  5. Poner Vin a nivel lógico alto.
  6. Repetir 7 veces más, los pasos de 3 a 5 teniendo en cuenta que hay que tardar un mínimo de 1mS para leer los 8 bits con lo que si lo hacemos muy rápido el sensor no responderá debidamente.
  7. Una vez leídos los 8 bits tenemos que esperar un mínimo de 1,5mS o mas para poder ordenar al sensor otra captura de distancia.

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:

GP2D02.asm           Descargar

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.


Subir





Descripción: El bumper es un conmutador de 2 posiciones con muelle de retorno a la posición de reposo y con una palanca de accionamiento mas o menos larga según el modelo elegido.
Funcionamiento: En estado de reposo la patita común (C) y la de reposo (R) están en contacto permanente hasta que la presión aplicada a la palanca del bumper hace saltar la pequeña pletina acerada interior y entonces el  contacto pasa de la posición de reposo a la de activo (A), se puede escuchar cuando el bumper cambia de estado, porque se oye un pequeño clic, esto sucede casi al final del recorrido de la palanca.
Usos: Se usan para detección de obstáculos por contacto directo. No son adecuados para robots de alta velocidad ya que cuando detectan el obstáculo ya están encima y no da tiempo a frenar el robot.
Ideas y mejoras: Pocas mejoras puede tener un dispositivo tan simple pero una buena idea seria utilizar un multiplexor para poner mas bumpers de control en nuestro robot y usar el mínimo de líneas de control.
  Subir

MAGNETICOS





Descripción: Los ultrasonidos son vibraciones del aire de la misma naturaleza que el sonido audible pero de una frecuencia mas elevada que parte de 20 000 Hz hasta 5.108 Hz.  no audibles estos por el oído humano. Se alcanzan longitudes de onda que se aproximan a la luz visible.
Funcionamiento: Para producirlos se utilizan las propiedades piezoeléctricas del cuarzo.
Usos: Se utilizan en la obtención de emulsiones fotográficas de grano muy fino, en sondeos acústicos (detección de fisuras, mediciones, etc.. ), como bactericidas y como limpiadores de superficies entre otros.
mas información en cuanto pruebe a fondo...
  Subir






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.

  Subir



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:
  • +1500mV = 150ºC
  • +250mV = 25ºC
  • -550mV = -55ºC
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:

X-Temp_LM35.asm           Descargar
 
 
  Subir



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:
Comando
Código binario
Reservado 0000x
Medida de Temperatura 00011
Medida de Humedad 00101
Leer el registro de estado interno 00111
Escribir el registro de estado interno 00110
Reservado 0101x-1110x
Generar un Reset al software interno, reponiendo a los valores por defecto el registro de estado. Hay que esperar 11mS al menos despues de mandar este comando. 11110
 
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.
D E S C A R G A S
Programa de prueba: X-Higrometer.asm  
Rutina para sensor: SHT11.inc X-Higrometer.zip
Codigo programa: X-Higrometer.hex  


  Subir



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.
Pin Nombre Descripción
1 NC -
2 TP Conectar a GND
3 COM Comun
4 Yout Salida Duty Cycle Eje Y
5 Xout Salida Duty Cycle Eje X
6 NC -
7 NC -
8 Vdd 2.75 a 5.25 V
 
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:
Código fuente X-TILT.rar
 
 
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.
Instalable Windows X-InclinoLab.rar
 
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.
Instalable Windows
Código fuente VB6 X-ACTILT3Dsource.rar
 
Video demostracion:
 
 
  Subir




Robotica & µControladores Pic

Licencia de Creative Commons
Esta obra está bajo una licencia de Creative Commons.

 Daniel C. Martin "ionitron" ··· Barcelona (Spain) ··· 2001-2008

No hay comentarios:

Publicar un comentario