Controladoras

La placa controladora (que contiene al µControlador) usada como referencia en FreeSensors es la Arduino UNO R3. Esta placa es su vez el modelo de referencia (en versión 1.0) de toda la plataforma Arduino.

La placa controladora normalmente tiene cargado un pequeño programa (firmware) que arranca o inicializa la placa, y luego permite acceder a uno de los dos modos básicos de funcionamiento utilizados en robótica con µControladores:

    • Modo autónomo: El firmware arranca y luego pasa el control a un programa que fue previamente cargado o transferido por el usuario a la placa. En este modo, la comunicación entre la PC y la placa se realiza obligatoriamente al momento de pasarle o cargarle el programa, y de modo opcional durante la operación. Cuando el programa del robot se está ejecutando, esa comunicación puede servir por ejemplo para pasar datos de vuelta a la PC de modo de mostrarlos en la pantalla de la misma. Arduino permite habilitar un canal serial con este propósito.
    • Modo esclavo: El firmware arranca y luego pasa a un loop de comunicaciones para enviar y recibir mensajes de una PC, donde reside el programa del usuario. En ese modo la comunicación entre la PC y la placa es obligatoria y permanente. El canal de comunicaciones es usado intensamente, ya que por ahí van los datos de los sensores hacia la PC y por ahí vuelven los comandos hacia los actuadores.

Normalmente, una misma placa puede usarse en cualquiera de los dos modos, según el firmware que se encuentre instalado en la misma. Y todo esto depende del software y entorno de programación elegido por el usuario para su proyecto de robótica.

A continuación, a modo de referencia se exploran posibles placas, de algún modo compatibles con Arduino, ya sean porque usan el mismo µControlador o similares de la misma familia, o porque tienen el mismo form-factor de pines que una Arduino (necesario para la compatibilidad física de las shields). Se presta especial atención a la placa PICduino que con la misma forma y tamaño que una Arduino, está basada en el PIC 18F2550.

Todas las placas arriba mencionadas contienen un µControlador, y por lo tanto soportan los 2 modos de funcionamiento. Pero existen otras posibilidades cuando solamente usamos el "Modo esclavo" de una PC. Por ejemplo, podríamos no usar un µControlador y hacer las cosas mas simples (entendiendo que tendremos menos funcionalidades), en estos casos dependemos del modo de conexionado con la PC:

  • Conector puerto paralelo: La controladora consistiría en un conector DB25 del cual le llegarían los pines de 2 1/2 puertos y la alimentación. Se podrían colocar buffers para disponer de mas corriente en los pines y así tener entradas y salidas digitales, y debiera contemplarse una alimentación independiente para darle 5V a los conectores 6P4C de las shields. Otra posibilidad para tener pines de entradas/salidas sería colocar chips tipo el PPI 8255. Si se colocase un ADC de 8 bits se podría tener una entrada analógica cuyo valor sería leído por el puerto paralelo.
  • Conector puerto serie (RS232): Es similar al anterior, pero hay que colocar un chip que permita la comunicación como el MAX232. Luego podría colocarse un registro de desplazamiento o un µControlador sencillo como los de la serie PIC 16Fx, de modo de tener pines con entradas/salidas digitales. Según sea la cantidad de pines obtenidos, podrían dirigirse hacia los pines correspondientes para conectar alguna de las shields del sistema (probablemente la Direct o la AIport).
  • Conector USB: Este protocolo es complejo y requiere chips especiales, siendo conceptualmente similar al caso del puerto serial RS232. La diferencia es que los chips son generalmente de montaje superficial y mas difíciles de incorporar a proyectos simples como en este planteo. De trabajar con este conector, el diseño óptimo sería el que ya tenemos en una Arduino o una PICduino.
  • Conector de video VGA (también en DVI y HDMI): Este conector tiene un par de pines muy interesantes porque permiten comunicaciones I2C (son los que usa la computadora para saber la marca, modelo y otros datos del monitor conectado). Se puede hacer una controladora que tenga un conector VGA y alimentación independiente. Dentro de la controladora solo se colocarían probablemente los 2 resistores de pullup de las lineas SDA y SCL y nada mas, ambas lineas se conectarían simplemente a los pines SDA y SCL del pinout de Arduino. De esta forma sería posible conectar las shields (como la DIOport y la Motor) y todos los sensores/actuadores que usan I2C. Si se tuviera una variante de la AIport con ADC comunicados por I2C, también se podrían agregar entradas analógicas a una controladora de este tipo.

Otra consideración importante se refiere a la forma física en que la PC se comunica con la placa controladora. Lo normal es que la conexión física sea cableada (por USB, por puerto paralelo, por puerto serie, por puerto VGA), pero existen posibilidades inalámbricas, que se entrecruzan con los 2 modos de funcionamiento definidos anteriormente. No todos los posibles modos de comunicación inalámbrica sirven igual para todos los propósitos.

Algunas posibilidades de comunicación inalámbrica son:

  • Infrarrojo (como en IrDA) : Sería equivalente a un canal serial como el RS232
  • Bluetooh : Radio en 2.4 GHz. Sería equivalente a un canal serial como el RS232
  • Radio Frecuencia (RF) : Radio en frecuencias mas bajas como 433 Mhz. Sería equivalente a un canal serial como el RS232
  • WiFi con stack Ethernet. La comunicación debe ser hecha en protocolos de mas alto nivel y mas complejos
  • Xbee: Físicamente como WiFi, pero se comporta equivalente a un canal serial RS232