Grupo 1

De Proyecto Butiá
Revisión del 13:00 17 sep 2014 de Grupobutia (Discusión | contribuciones) (Brújula con Follow Me)

Saltar a: navegación, buscar

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

Lego-Grupo1.png

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

VEX.png

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á

Butia-Grupo1.png

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

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

DHT11.jpg

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á.
LM35.png
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

Brujula.jpg

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

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

LSM303.jpg

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
  • Ae 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, entonces el radio del círculo sería 160 por lo tanto 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

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[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