
|
|
|
|
| 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.
|
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.
El el siguiente esquema vemos el simple circuito necesario para hacer funcionar al sensor.
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. |
|||||||||||||||||||||||||||
|
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.
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.
|
|||||||||||||||||||||||||||
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.
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 |
|
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.
|
|
|
|
|
| Temperatura | |
|
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:
Podemos conectarlo a un conversor Analógico/Digital y tratar la medida digitalmente, almacenarla o procesarla con un µControlador o similar.
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.
Programa en ensamblador para termómetro 4 canales:
|
|
|
|
|
| HUMEDAD | |||||||||||||||||||||||||||||
|
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.
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 |
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.
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º
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:
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.
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
![]()
Esta obra está bajo una licencia de Creative Commons.
Daniel C. Martin "ionitron" ··· Barcelona (Spain) ··· 2001-2008