Diferencia entre revisiones de «Grupo 1»
(→Brújula con Follow Me) |
|||
(No se muestran 85 ediciones intermedias del mismo usuario) | |||
Línea 12: | Línea 12: | ||
===Introducción=== | ===Introducción=== | ||
− | * Un robot inteligente es por definición una máquina capaz de interactuar con su entorno. Para lograr esto, el robot debe poder recibir información sobre su entorno y actuar en base a ella. Es por este motivo que se necesitan los sensores. | + | * Un robot inteligente es por definición una máquina capaz de interactuar con su entorno de forma autónoma. Es un robot del cual se espera que aprenda y ejecute tareas aún en ambientes cambiantes. Para lograr esto, el robot debe poder recibir información sobre su entorno y actuar en base a ella, de una forma segura, cumpliendo un propósito y sentido. Es por este motivo que se necesitan los sensores. |
− | Un sensor es un dispositivo capaz de percibir magnitudes físicas y/o químicas con el fin de transformarlas en señales electrónicas, y así introducirlas al circuito de control, de modo que el robot sea capaz de cuantificarla y reaccionar en consecuencia. | + | * Un sensor es un dispositivo capaz de percibir magnitudes físicas y/o químicas con el fin de transformarlas en señales electrónicas, y así introducirlas al circuito de control, de modo que el robot sea capaz de cuantificarla y reaccionar en consecuencia. |
+ | ===Objetivos=== | ||
+ | *Investigación de kits educativos actuales | ||
+ | *Implementación de sensores nuevos (y de utilidad) para el kit Butiá | ||
===Kits educativos actuales=== | ===Kits educativos actuales=== | ||
====[http://www.lego.com/en-us/mindstorms/?domainredir=mindstorms.lego.com LEGO Mindstorm]==== | ====[http://www.lego.com/en-us/mindstorms/?domainredir=mindstorms.lego.com LEGO Mindstorm]==== | ||
+ | |||
+ | [[Archivo:Lego-Grupo1.png|250px]] | ||
El kit de robótica educativa LEGO dispone de los siguientes sensores: | El kit de robótica educativa LEGO dispone de los siguientes sensores: | ||
+ | <br> | ||
+ | -Sensor barométrico | ||
+ | <br> | ||
+ | -Sensor de acelerómetro | ||
<br> | <br> | ||
-Sensor de color | -Sensor de color | ||
Línea 27: | Línea 36: | ||
<br> | <br> | ||
-Sensor de distancia | -Sensor de distancia | ||
+ | <br> | ||
+ | -Sensor de infrarrojo | ||
<br> | <br> | ||
-Sensor de intensidad lumínica | -Sensor de intensidad lumínica | ||
Línea 36: | Línea 47: | ||
-Sensor de temperatura | -Sensor de temperatura | ||
<br> | <br> | ||
− | + | -Cámara | |
+ | <br> | ||
+ | -Sensor Dexter dIMU (combina giroscopio y acelerómetro) | ||
+ | <br> | ||
====[http://www.vexrobotics.com/vexiq VEX]==== | ====[http://www.vexrobotics.com/vexiq VEX]==== | ||
+ | |||
+ | [[Archivo:VEX.png|250px]] | ||
El kit de robótica educativa VEX IQ dispone de los siguientes sensores: | El kit de robótica educativa VEX IQ dispone de los siguientes sensores: | ||
Línea 48: | Línea 64: | ||
-Sensor de distancia | -Sensor de distancia | ||
<br> | <br> | ||
− | -Sensor de giro ( | + | -Sensor de giro (Giroscopio) |
<br> | <br> | ||
-Touch LED (sensor/actuador que detecta el color del objeto, y enciende una luz del color leído) | -Touch LED (sensor/actuador que detecta el color del objeto, y enciende una luz del color leído) | ||
<br> | <br> | ||
− | |||
====[http://www.fing.edu.uy/inco/proyectos/butia/ Butiá]==== | ====[http://www.fing.edu.uy/inco/proyectos/butia/ Butiá]==== | ||
+ | |||
+ | [[Archivo:Butia-Grupo1.png|250px]] | ||
El kit de robótica educativa Butiá dispone actualmente de los siguientes sensores: | El kit de robótica educativa Butiá dispone actualmente de los siguientes sensores: | ||
Línea 71: | Línea 88: | ||
<br> | <br> | ||
− | ===Discusión | + | ===Discusión de qué sensores integrar al robot Butiá=== |
− | En base a la investigación efectuada referente a los sensores disponibles en el kit educativo LEGO Mindstorm y VEX IQ, analizamos qué sensores sería interesante agregar al | + | En base a la investigación efectuada referente a los sensores disponibles en el kit educativo LEGO Mindstorm y VEX IQ, analizamos qué sensores sería interesante agregar al Proyecto Butiá. |
− | El | + | El giroscopio no es un sensor que esté presente actualmente en el Butiá. El mismo se utiliza para conocer la orientación en el espacio de algún dispositivo. Los altos precios de estos sensores, se enfrentan a la idea de que el Butiá sea un robot accesible para todos los contextos. |
− | El sensor de orientación | + | El sensor de orientación o brújula se utiliza para orientarse basándose en los campos magnéticos terrestres. Su menor costo y su amplia difusión, clasifican a este sensor como uno de los candidatos a implementar. |
Conociendo que existen planes de construir una estación meteorológica en una escuela, resulta interesante poder incluir un sensor de temperatura al robot Butiá. Por otro lado, la temperatura es una magnitud que resulta muy intuitiva para el público en general y en particular, para los niños. | Conociendo que existen planes de construir una estación meteorológica en una escuela, resulta interesante poder incluir un sensor de temperatura al robot Butiá. Por otro lado, la temperatura es una magnitud que resulta muy intuitiva para el público en general y en particular, para los niños. | ||
Complementando los sensores necesarios para una estación meteorológica, podemos incluir uno que sense la humedad y otro para sensar la presión. | Complementando los sensores necesarios para una estación meteorológica, podemos incluir uno que sense la humedad y otro para sensar la presión. | ||
+ | Luego de la segunda reunión se decidió implementar: movimiento, temperatura y humedad. También se vió la posibilidad de implementar un sensor brújula y un sensor de gas. El primero es un sensor caro, por lo que se llegó a la alternativa de hacer una brújula artesanal y con un sensor existente ya en butiá, por ejemplo la camara, "ver" como está posicionada la brújula. En cuanto al sensor de gas, decidimos dejarlo como último a implementar, si es posible, ya que le vimos mayor utilidad al resto de los sensores propuestos. | ||
+ | |||
+ | |||
+ | ===Sensores a incorporar=== | ||
+ | |||
+ | ====Movimiento==== | ||
+ | [[Archivo:PIR.jpg]] | ||
+ | |||
+ | |||
+ | El sensor de movimiento hace un relevamiento del ambiente y devuelve si en este encontró objetos en movimiento. | ||
+ | Hemos incorporado el sensor Flamingo EDA PIR 2.0. | ||
+ | |||
+ | ======Características====== | ||
+ | *Opera a 5 Voltios de alimentación | ||
+ | *Tiempo ajustable de delay (de 0.3 a 18 segundos) | ||
+ | *Rango: hasta 120 grados a 7 metros | ||
+ | *Bajo costo | ||
+ | |||
+ | |||
+ | ====Temperatura==== | ||
+ | |||
+ | [[Archivo:DHT11.jpg|500px]] | ||
+ | |||
+ | El sensor de temperatura sensa la temperatura ambiente y la devuelve. | ||
+ | En una primer instancia, intentamos incorporar los sensores seriales de temperatura DS18B20 ([http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf]); y el de temperatura y humedad DHT11 ([http://akizukidenshi.com/download/ds/aosong/DHT11.pdf]). Tras un largo período de investigación y pruebas, concluímos que la integración de un sensor serial no estaba a nuestro alcance para los conocimientos y experiencia que teníamos. | ||
+ | <br> | ||
+ | Por lo tanto, optamos por integrar el sensor LM35 a la plataforma Butiá. | ||
+ | <br> | ||
+ | [[Archivo:LM35.png|150px]] | ||
+ | <br> | ||
+ | Su salida es lineal y cada grado equivale a 10 mV, además no requiere de circuitos adicionales para calibrarlo externamente. | ||
+ | |||
+ | |||
+ | ======Características====== | ||
+ | *Está calibrado en grados Celsius. | ||
+ | *La tensión de salida es proporcional a la temperatura. | ||
+ | *Opera entre 4 y 30 Voltios de alimentación. | ||
+ | *Precisión calibrada de 1ºC | ||
+ | *Su rango de medición abarca desde -55°C hasta 150°C | ||
+ | *Bajo costo | ||
+ | |||
+ | ====Brújula==== | ||
+ | |||
+ | [[Archivo:Brujula.jpg|250px]] | ||
+ | |||
+ | El sensor de brújula, se utiliza para conocer la orientación y se basa en el magnetismo terrestre. | ||
+ | |||
+ | En primera instacia, se empezó por investigar cuáles componentes electrónicos podrían ser utilizados para este fin. | ||
+ | |||
+ | =====HMC6352===== | ||
+ | [[Archivo:1884-HMC6352chipeke.jpeg]] | ||
+ | |||
+ | El sensor HCM63525 es un magnetómetro, ya que mide la fuerza de los campos magnéticos, pero también se le suele llamar compás o brújula digital. | ||
+ | Los magnetómetros nos permiten saber la dirección hacia la que se encuentra el Norte del campo magnético mas fuerte. Se suelen utilizar para obtener la orientación respecto al Norte magnético terrestre. Tienen mucha utilidad en robots para la navegación autónoma o para devolver datos de orientación a distancia. | ||
+ | ======Características====== | ||
+ | * Interfaz I2C por lo que se necesitaría 2 pines para obtener los datos | ||
+ | * Alimentación 2.7 - 5.2V. | ||
+ | * Refresco ajustable de 1 a 20Hz | ||
+ | * Resolución 0.5 grados. | ||
+ | * Consumo: 1mA (3V) | ||
+ | * Dimensiones: 15x15mm | ||
+ | * Permite calibrado | ||
+ | |||
+ | |||
+ | =====LSM303===== | ||
+ | [[Archivo:LSM303.jpg|250px]] | ||
+ | <br> | ||
+ | <br> | ||
+ | Contiene dos sensores, un acelerómetro que indica la dirección en que se está respecto a la tierra (midiendo la gravedad) y el otro es un magnetómetro que nos permiten conocer hacia donde se encuentra el campo magnético más fuerte (el norte magnético). | ||
+ | |||
+ | ======Características====== | ||
+ | *Interfaz I2C | ||
+ | *3V - 5V | ||
+ | |||
+ | =====Brújula con Follow Me===== | ||
+ | |||
+ | Debido a que los sensores de brújulas son caros y difíciles de conseguir en el medio local, por lo que se tendrían que traer del exterior y esto trae consigo demoras que no podemos afrontar, comenzamos una investigación para imitar el comportamiento utilizando una brújula tradicional y la webcam de las computadoras. | ||
+ | El procesamiento de imagen es una tarea ardua que aún no ha madurado lo suficiente como para poder ser implementado fácilmente y con una suficiente confiabilidad. | ||
+ | Hemos hecho una implementación con la paleta "Follow Me" de Butiá y una brújula común. | ||
+ | La implementación de esto es: | ||
+ | *Follow me “sigue” el color rojo | ||
+ | *Se utiliza una Brújula que tiene aguja que apunta al norte en rojo | ||
+ | *Se centra la brújula con la camara tal que queden alineados sus puntos medios | ||
+ | *Se toma que la posición actual es desde el medio (0,0) "mirando" hacia la derecha | ||
+ | Luego con la posición dada por el follow me se realizan los siguientes cálculos: | ||
+ | *Se toma el coseno del ángulo, dado por la coordenada x del circulo trigonométrico. En este caso para obtener esta x se hace x-160/160 ya que el diámetro total tomado por el follow me es de 320, por lo que el radio del círculo sería 160, entonces si la x es 160 sería la x 0 del cículo y el coseno sería 0 | ||
+ | *Se calcula el arcoseno de x se pasa el resultado a grados, luego dependiendo de la coordenada y, el ángulo sera mayor o menor a 180 grados | ||
+ | |||
+ | [[Archivo:Brujula.png]] | ||
+ | |||
+ | ==Implementación== | ||
+ | |||
+ | A continuación se detallan los pasos seguidos para incorporar dichos sensores al Butiá: | ||
+ | *Crear User Module | ||
+ | *Reconocimiento PnP | ||
+ | *Crear Driver | ||
+ | *Grabar Firmware | ||
+ | |||
+ | ===Crear User Module=== | ||
+ | |||
+ | Un usermodule debe cumplir con una API determinada, de esta manera es posible agregar las funcionalidades que el módulo expone. Las operaciones principales que se deben implementar son las encargadas de atender los eventos de: | ||
+ | *inicialización | ||
+ | *liberación de recursos | ||
+ | *configuración | ||
+ | |||
+ | El siguiente es el codigo del UserModule del sensor Temperatura: | ||
+ | |||
+ | Codigo User Module Temperatura[http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/images/b/be/Temp_usermodule.pdf] | ||
+ | |||
+ | |||
+ | ===Reconocimiento PnP=== | ||
+ | |||
+ | Se toma un valor de resistencia no utilizado en la cartilla [https://docs.google.com/spreadsheet/ccc?key=0AvO96_3p52-AdFdtaE1YbzV1ZmhVRldjSVE0OUtEZGc#gid=0)] y se agregan sus respectivas constantes (por ejemplo en el caso de la temperatura R_TEMP_MIN, R_TEMP_MAX), con los valores dados por dicha tabla, también se debe aumentar la cantidad de dispositivos (MAX_DEVICES) del archivo pnp.h. | ||
+ | |||
+ | Luego en el pnp.c en la función table_device_id_resistance se debe agregar el modulo nuevo con las constantes definidas anteriormente | ||
+ | |||
+ | rom const device_resistance table_device_id_resistance[MAX_DEVICES] = { | ||
+ | ... | ||
+ | { "temp", R_TEMP_MIN, R_TEMP_MAX} | ||
+ | }; | ||
+ | |||
+ | ===Crear Driver=== | ||
+ | |||
+ | A continuación se encuentra el driver del sensor temperatura: | ||
+ | <code> | ||
+ | import math | ||
+ | |||
+ | RD_VERSION = 0x00 | ||
+ | GET_VALUE = 0x01 | ||
+ | VCC = 65536 | ||
+ | |||
+ | def getVersion(dev): | ||
+ | dev.send([RD_VERSION]) | ||
+ | raw = dev.read(3) | ||
+ | return raw[1] + raw[2] * 256 | ||
+ | |||
+ | def getValue(dev): | ||
+ | dev.send([GET_VALUE]) | ||
+ | raw = dev.read(3) | ||
+ | volt = (raw[1] + raw[2] * 256) * 5.0 / VCC | ||
+ | return math.floor(volt * 1000.0) / 10.0 | ||
+ | </code> | ||
+ | |||
+ | Donde el getValue hace la traducción de la salida del sensor a grados celsius tal como se especificó en la sección del sensor Temperatura. | ||
+ | |||
+ | ===Grabar Firmware=== | ||
+ | |||
+ | El microcontrolador contiene un bootloader que permite grabar el firmware sin necesidad de un programador por hardware. | ||
+ | Para grabar el firmware se utiliza el siguiente comando: ./fsusb --force_program usb4all2.hex. Donde usb4all2.hex es el binario generado como resultado de compilar el proyecto (con los usermodules nuevos agregados) y fsusb es un programa que implementa el protocolo de grabación de firmware de microchip. | ||
+ | |||
+ | |||
+ | ==Demos== | ||
+ | ===Sensor Temperatura=== | ||
+ | Para esta demo se utilió un programa Python que muestra en consola la temperatura tomada. | ||
+ | <code> | ||
+ | print "Iniciado.." | ||
+ | while 1: | ||
+ | temperature=robot.getTemperature(1) | ||
+ | if temperature == -1: | ||
+ | print "OH NO! ERROR" | ||
+ | else: | ||
+ | clear() | ||
+ | print "Iniciado.." | ||
+ | print (str(temperature) + " C") | ||
+ | time.sleep(2) | ||
+ | </code> | ||
+ | <br> | ||
+ | <youtube>PrNPiMWmwY0</youtube><br> | ||
+ | |||
+ | ===Sensor Movimiento=== | ||
+ | Para esta demo se utilió un programa Python que muestra en consola cuando se detectó movimiento. | ||
+ | |||
+ | <code> | ||
+ | print "Iniciado.." | ||
+ | while 1: | ||
+ | sensor=robot.getMotion(1) | ||
+ | if sensor == 1: | ||
+ | clear() | ||
+ | print "Iniciado.." | ||
+ | print "NOS MOVEMOS!!" | ||
+ | else: | ||
+ | if sensor == -1: | ||
+ | print "OH NO! ERROR" | ||
+ | else: | ||
+ | clear() | ||
+ | print "Iniciado.." | ||
+ | time.sleep(0.5) | ||
+ | </code> | ||
+ | |||
+ | <youtube>mSEpZyIHv64</youtube><br> | ||
+ | |||
+ | ==Conclusiones== | ||
+ | *Se implementaron dos sensores nuevos, útiles y de bajo costo: Temperatura y Movimiento. | ||
+ | El de temperatura nos parece de gran utilidad para la estación meteorológica que se está intentando construir, ya que a demás la temperatura es una magnitud fácilmente comprendida por niños. | ||
+ | <br> | ||
+ | El de movimiento nos pareció un sensor que puede llegar a ser entretenido para niños, ya que programando algo relativamente sencillo se puede llegar a algo interesante. Por ejemplo que se prenda una luz cuando alguien se mueve. | ||
+ | |||
+ | *Se investigaron posibles sensores brújulas existentes en el mercado para un gran posible proyecto futuro | ||
+ | El costo de estas varía según el componente pero mas o menos rondan por los 40 dolares | ||
+ | |||
+ | *Se logró implementar utilizando un plugin ya existente (Follow Me) una primer experiencia de brújula en Butiá | ||
+ | |||
+ | ==Trabajo a Futuro== | ||
+ | *Realizar el diseño de las placas para los módulos implementados | ||
+ | *Implementar sensor de Gas | ||
+ | Esto no se pudo realizar ya que no encontramos documentación de como conectar el sensor con la placa. Pero una vez que esto se conozca sería seguir el procedimiento hecho para los otros sensores. | ||
+ | *Investigar los dispositivos seriales y su conexión con la placa para implementar los sensores de temperatura y humedad seriales | ||
+ | *Continuar con la Brújula | ||
==Actas== | ==Actas== | ||
===Primera reunión - 08/07/2014=== | ===Primera reunión - 08/07/2014=== | ||
*En nuestra primera reunión nos informamos de cómo proceder con los materiales a utilizar. Se acordó para una segunda reunión, estudiar los diferentes kits que ya están implementados en el mercado y discutimos la utilidad para el proyecto de algunos sensores que ya teníamos pensados. | *En nuestra primera reunión nos informamos de cómo proceder con los materiales a utilizar. Se acordó para una segunda reunión, estudiar los diferentes kits que ya están implementados en el mercado y discutimos la utilidad para el proyecto de algunos sensores que ya teníamos pensados. | ||
+ | ===Segunda reunión - 08/08/2014=== | ||
+ | *En nuestra segunda reunión, ya estabamos informados de que sensores estaban implementados en varios kits diferentes. En esta reunión se concluyó que sensores para butiá sería de utilidad implementar, estos son: movimiento, temperatura y humedad. También se vió la posibilidad de implementar un sensor brújula y un sensor de gas. El primero es un sensor caro, por lo que se llegó a la alternativa de hacer una brújula artesanal y con un sensor existente ya en butiá, por ejemplo la camara, "ver" como está posicionada la brújula. En cuanto al segundo sensor: el de gas, decidimos dejarlo como último a implementar, si es posible, ya que le vimos mayor utilidad al resto de los sensores propuestos. | ||
+ | ===09/08/2014=== | ||
+ | *Recibimos los sensores |
Revisión actual del 13:01 17 sep 2014
Contenido
Integrantes
- Ignacio Betancurt - ibetancurt@gmail.com
- Alejandro Brusco - alejandrobi89@gmail.com
- Maite Ibarburu - maite2310@hotmail.com
Tutor
- Gonzalo Tejera
Reseña
Introducción
- Un robot inteligente es por definición una máquina capaz de interactuar con su entorno de forma autónoma. Es un robot del cual se espera que aprenda y ejecute tareas aún en ambientes cambiantes. Para lograr esto, el robot debe poder recibir información sobre su entorno y actuar en base a ella, de una forma segura, cumpliendo un propósito y sentido. Es por este motivo que se necesitan los sensores.
- Un sensor es un dispositivo capaz de percibir magnitudes físicas y/o químicas con el fin de transformarlas en señales electrónicas, y así introducirlas al circuito de control, de modo que el robot sea capaz de cuantificarla y reaccionar en consecuencia.
Objetivos
- Investigación de kits educativos actuales
- Implementación de sensores nuevos (y de utilidad) para el kit Butiá
Kits educativos actuales
LEGO Mindstorm
El kit de robótica educativa LEGO dispone de los siguientes sensores:
-Sensor barométrico
-Sensor de acelerómetro
-Sensor de color
-Sensor de contacto
-Sensor de distancia
-Sensor de infrarrojo
-Sensor de intensidad lumínica
-Sensor de orientación/Brújula
-Sensor de sonido
-Sensor de temperatura
-Cámara
-Sensor Dexter dIMU (combina giroscopio y acelerómetro)
VEX
El kit de robótica educativa VEX IQ dispone de los siguientes sensores:
-Sensor de color
-Sensor de contacto
-Sensor de distancia
-Sensor de giro (Giroscopio)
-Touch LED (sensor/actuador que detecta el color del objeto, y enciende una luz del color leído)
Butiá
El kit de robótica educativa Butiá dispone actualmente de los siguientes sensores:
-Sensor de color (escala de grises)
-Sensor de contacto
-Sensor de distancia
-Sensor de imagen (cámara de la XO)
-Sensor de intensidad lumínica
-Sensor de sonido (micrófono de la XO)
Discusión de qué sensores integrar al robot Butiá
En base a la investigación efectuada referente a los sensores disponibles en el kit educativo LEGO Mindstorm y VEX IQ, analizamos qué sensores sería interesante agregar al Proyecto Butiá.
El giroscopio no es un sensor que esté presente actualmente en el Butiá. El mismo se utiliza para conocer la orientación en el espacio de algún dispositivo. Los altos precios de estos sensores, se enfrentan a la idea de que el Butiá sea un robot accesible para todos los contextos.
El sensor de orientación o brújula se utiliza para orientarse basándose en los campos magnéticos terrestres. Su menor costo y su amplia difusión, clasifican a este sensor como uno de los candidatos a implementar.
Conociendo que existen planes de construir una estación meteorológica en una escuela, resulta interesante poder incluir un sensor de temperatura al robot Butiá. Por otro lado, la temperatura es una magnitud que resulta muy intuitiva para el público en general y en particular, para los niños. Complementando los sensores necesarios para una estación meteorológica, podemos incluir uno que sense la humedad y otro para sensar la presión.
Luego de la segunda reunión se decidió implementar: movimiento, temperatura y humedad. También se vió la posibilidad de implementar un sensor brújula y un sensor de gas. El primero es un sensor caro, por lo que se llegó a la alternativa de hacer una brújula artesanal y con un sensor existente ya en butiá, por ejemplo la camara, "ver" como está posicionada la brújula. En cuanto al sensor de gas, decidimos dejarlo como último a implementar, si es posible, ya que le vimos mayor utilidad al resto de los sensores propuestos.
Sensores a incorporar
Movimiento
El sensor de movimiento hace un relevamiento del ambiente y devuelve si en este encontró objetos en movimiento.
Hemos incorporado el sensor Flamingo EDA PIR 2.0.
Características
- Opera a 5 Voltios de alimentación
- Tiempo ajustable de delay (de 0.3 a 18 segundos)
- Rango: hasta 120 grados a 7 metros
- Bajo costo
Temperatura
El sensor de temperatura sensa la temperatura ambiente y la devuelve.
En una primer instancia, intentamos incorporar los sensores seriales de temperatura DS18B20 ([1]); y el de temperatura y humedad DHT11 ([2]). Tras un largo período de investigación y pruebas, concluímos que la integración de un sensor serial no estaba a nuestro alcance para los conocimientos y experiencia que teníamos.
Por lo tanto, optamos por integrar el sensor LM35 a la plataforma Butiá.
Su salida es lineal y cada grado equivale a 10 mV, además no requiere de circuitos adicionales para calibrarlo externamente.
Características
- Está calibrado en grados Celsius.
- La tensión de salida es proporcional a la temperatura.
- Opera entre 4 y 30 Voltios de alimentación.
- Precisión calibrada de 1ºC
- Su rango de medición abarca desde -55°C hasta 150°C
- Bajo costo
Brújula
El sensor de brújula, se utiliza para conocer la orientación y se basa en el magnetismo terrestre.
En primera instacia, se empezó por investigar cuáles componentes electrónicos podrían ser utilizados para este fin.
HMC6352
El sensor HCM63525 es un magnetómetro, ya que mide la fuerza de los campos magnéticos, pero también se le suele llamar compás o brújula digital. Los magnetómetros nos permiten saber la dirección hacia la que se encuentra el Norte del campo magnético mas fuerte. Se suelen utilizar para obtener la orientación respecto al Norte magnético terrestre. Tienen mucha utilidad en robots para la navegación autónoma o para devolver datos de orientación a distancia.
Características
- Interfaz I2C por lo que se necesitaría 2 pines para obtener los datos
- Alimentación 2.7 - 5.2V.
- Refresco ajustable de 1 a 20Hz
- Resolución 0.5 grados.
- Consumo: 1mA (3V)
- Dimensiones: 15x15mm
- Permite calibrado
LSM303
Contiene dos sensores, un acelerómetro que indica la dirección en que se está respecto a la tierra (midiendo la gravedad) y el otro es un magnetómetro que nos permiten conocer hacia donde se encuentra el campo magnético más fuerte (el norte magnético).
Características
- Interfaz I2C
- 3V - 5V
Brújula con Follow Me
Debido a que los sensores de brújulas son caros y difíciles de conseguir en el medio local, por lo que se tendrían que traer del exterior y esto trae consigo demoras que no podemos afrontar, comenzamos una investigación para imitar el comportamiento utilizando una brújula tradicional y la webcam de las computadoras. El procesamiento de imagen es una tarea ardua que aún no ha madurado lo suficiente como para poder ser implementado fácilmente y con una suficiente confiabilidad. Hemos hecho una implementación con la paleta "Follow Me" de Butiá y una brújula común. La implementación de esto es:
- Follow me “sigue” el color rojo
- Se utiliza una Brújula que tiene aguja que apunta al norte en rojo
- Se centra la brújula con la camara tal que queden alineados sus puntos medios
- Se toma que la posición actual es desde el medio (0,0) "mirando" hacia la derecha
Luego con la posición dada por el follow me se realizan los siguientes cálculos:
- Se toma el coseno del ángulo, dado por la coordenada x del circulo trigonométrico. En este caso para obtener esta x se hace x-160/160 ya que el diámetro total tomado por el follow me es de 320, por lo que el radio del círculo sería 160, entonces si la x es 160 sería la x 0 del cículo y el coseno sería 0
- Se calcula el arcoseno de x se pasa el resultado a grados, luego dependiendo de la coordenada y, el ángulo sera mayor o menor a 180 grados
Implementación
A continuación se detallan los pasos seguidos para incorporar dichos sensores al Butiá:
- Crear User Module
- Reconocimiento PnP
- Crear Driver
- Grabar Firmware
Crear User Module
Un usermodule debe cumplir con una API determinada, de esta manera es posible agregar las funcionalidades que el módulo expone. Las operaciones principales que se deben implementar son las encargadas de atender los eventos de:
- inicialización
- liberación de recursos
- configuración
El siguiente es el codigo del UserModule del sensor Temperatura:
Codigo User Module Temperatura[3]
Reconocimiento PnP
Se toma un valor de resistencia no utilizado en la cartilla [4] y se agregan sus respectivas constantes (por ejemplo en el caso de la temperatura R_TEMP_MIN, R_TEMP_MAX), con los valores dados por dicha tabla, también se debe aumentar la cantidad de dispositivos (MAX_DEVICES) del archivo pnp.h.
Luego en el pnp.c en la función table_device_id_resistance se debe agregar el modulo nuevo con las constantes definidas anteriormente
rom const device_resistance table_device_id_resistance[MAX_DEVICES] = { ... { "temp", R_TEMP_MIN, R_TEMP_MAX} };
Crear Driver
A continuación se encuentra el driver del sensor temperatura:
import math
RD_VERSION = 0x00 GET_VALUE = 0x01 VCC = 65536
def getVersion(dev): dev.send([RD_VERSION]) raw = dev.read(3) return raw[1] + raw[2] * 256 def getValue(dev): dev.send([GET_VALUE]) raw = dev.read(3) volt = (raw[1] + raw[2] * 256) * 5.0 / VCC return math.floor(volt * 1000.0) / 10.0
Donde el getValue hace la traducción de la salida del sensor a grados celsius tal como se especificó en la sección del sensor Temperatura.
Grabar Firmware
El microcontrolador contiene un bootloader que permite grabar el firmware sin necesidad de un programador por hardware. Para grabar el firmware se utiliza el siguiente comando: ./fsusb --force_program usb4all2.hex. Donde usb4all2.hex es el binario generado como resultado de compilar el proyecto (con los usermodules nuevos agregados) y fsusb es un programa que implementa el protocolo de grabación de firmware de microchip.
Demos
Sensor Temperatura
Para esta demo se utilió un programa Python que muestra en consola la temperatura tomada.
print "Iniciado.." while 1: temperature=robot.getTemperature(1) if temperature == -1: print "OH NO! ERROR" else: clear() print "Iniciado.." print (str(temperature) + " C") time.sleep(2)
Sensor Movimiento
Para esta demo se utilió un programa Python que muestra en consola cuando se detectó movimiento.
print "Iniciado.." while 1: sensor=robot.getMotion(1) if sensor == 1: clear() print "Iniciado.." print "NOS MOVEMOS!!" else: if sensor == -1: print "OH NO! ERROR" else: clear() print "Iniciado.." time.sleep(0.5)
Conclusiones
- Se implementaron dos sensores nuevos, útiles y de bajo costo: Temperatura y Movimiento.
El de temperatura nos parece de gran utilidad para la estación meteorológica que se está intentando construir, ya que a demás la temperatura es una magnitud fácilmente comprendida por niños.
El de movimiento nos pareció un sensor que puede llegar a ser entretenido para niños, ya que programando algo relativamente sencillo se puede llegar a algo interesante. Por ejemplo que se prenda una luz cuando alguien se mueve.
- Se investigaron posibles sensores brújulas existentes en el mercado para un gran posible proyecto futuro
El costo de estas varía según el componente pero mas o menos rondan por los 40 dolares
- Se logró implementar utilizando un plugin ya existente (Follow Me) una primer experiencia de brújula en Butiá
Trabajo a Futuro
- Realizar el diseño de las placas para los módulos implementados
- Implementar sensor de Gas
Esto no se pudo realizar ya que no encontramos documentación de como conectar el sensor con la placa. Pero una vez que esto se conozca sería seguir el procedimiento hecho para los otros sensores.
- Investigar los dispositivos seriales y su conexión con la placa para implementar los sensores de temperatura y humedad seriales
- Continuar con la Brújula
Actas
Primera reunión - 08/07/2014
- En nuestra primera reunión nos informamos de cómo proceder con los materiales a utilizar. Se acordó para una segunda reunión, estudiar los diferentes kits que ya están implementados en el mercado y discutimos la utilidad para el proyecto de algunos sensores que ya teníamos pensados.
Segunda reunión - 08/08/2014
- En nuestra segunda reunión, ya estabamos informados de que sensores estaban implementados en varios kits diferentes. En esta reunión se concluyó que sensores para butiá sería de utilidad implementar, estos son: movimiento, temperatura y humedad. También se vió la posibilidad de implementar un sensor brújula y un sensor de gas. El primero es un sensor caro, por lo que se llegó a la alternativa de hacer una brújula artesanal y con un sensor existente ya en butiá, por ejemplo la camara, "ver" como está posicionada la brújula. En cuanto al segundo sensor: el de gas, decidimos dejarlo como último a implementar, si es posible, ya que le vimos mayor utilidad al resto de los sensores propuestos.
09/08/2014
- Recibimos los sensores