5/22/2016

Balancing RGB

Saludos,

hace tiempo que no hago una entrada de 3Dpinting ni electrónica, y la verdad es  a lo que dedico mas tiempo y con lo que me gano la vida. Hoy os voy a hablar de un proyecto para el cual he estado trabajando.  La premisa del proyecto en si era realizar una balanza, digital para emplearla en un proyecto europeo de nuevos métodos de enseñanza, empleando tecnología y nuevas metodologías.

El motivo de realizar una balanza electrónica era, poder interactuar con ella tanto en el mundo físico , como en el virtual o el uso de realidad aumentada.




En un principio utilizamos sensores magnéticos para la lectura de los pesos, a los cuales les habíamos añadido un imán  de neodimio. Al ser digital los pesos los habíamos hecho con la impresora 3d y habíamos añadido peso en forma de tuercas y garbilla. No había mucha diferencia entre ellos salvo el color. Los sensores magnéticos no daban la posición de los pesos y el color lo obteníamos con un cámara pixy. El sistema funcionaba pero como toda instalación con detección por cámara la influencia de la luz ambiente hacia complicado su utilización. Si Calibrabas el sistema por la mañana, pasado unas horas ya no leía igual y daba muchos errores. Por ello pensamos emplear otra soluciones, entre ellas los sensores de color.

Hay muchos y casi todos tienen una particularidad son i2c y no se les puede modificar su dirección de entrada, algo que desde mi opinión va en contra del concepto i2c. Ya habíamos tenido este problema con unos robots musicales que estábamos desarrollando, al final optábamos por combinar dos sensores diferentes, pero esto daba problemas, los rangos de lectura eran diferentes y solo se podían poner uno de cada.

Para desarrollar este proyecto empleamos los sensores RGB TCS34725 de  adafruit, igual que otros muchos sensores de RGB que hemos probado funcionan por i2c y tienen una dirección fija que no se puede cambiar, en este caso 0x29.

Necesitamos emplear 12 sensores conectados a una placa Teensy 3.2. todo y que la placa de tensy posee dos puertos i2c empleamos únicamente el puerto 0, y multiplexamos la señal empleando dos placas TCA9548A, que permiten conectar cada un 8 sensor i2c con la misma dirección.

La placa ha de controlar un motor PSP y para ello lleva un Driver A4988 o similar. Y un módulo Bluetooth para comunicarse con la Tablet o el ordenador.






En la imagen anterior faltan los conectores para el control manual que se añadieron posteriormente.

Multiplexores TCA9548A


Las placas del multiplexor tienen tres pines que te dejan configurar su dirección de 0x70 a 0x77, en este caso uno tiene la dirección 0x70 y el otro 0x77. Y El pin de Reset esta cableado con el teensy para resetear una placa cuando no se esté empleando y evitar efectos de interferencia que venían sucediente.

No necesita librería propia para funcionar a parte del wire.h, que por defecto utiliza el i2c del Arduino/teensy/sparkcore…

La función que empleamos para seleccionar la placa y el sensor a leer es:


void tcaselect(uint8_t sensor, uint8_t canal) {  // número de sensor {2..7}, placa
  if (canal==TCAADDR0){ //0x70
    digitalWrite(rst0,HIGH);
    digitalWrite(rst1,LOW);
  }
  if (canal==TCAADDR1){ //0x77
    digitalWrite(rst0,LOW);
    digitalWrite(rst1,HIGH);
  }
  Wire.beginTransmission(canal);
  Wire.write(1 << sensor);
  Wire.endTransmission();
  delay(1);
}

Los sensores por comodidad de cableado están conectados en las salidas 2,3,4,5,6,7


Sensores TCS34725


Los sensores como ya he mencionado todos tienen la dirección física en 0x29 y están conectados en el multiplexor en las entradas {2…7}. Proporcionan cuatro lecturas Clear, Red, Green, Blue.  Necesitan de la librería “Adafruit_TCS34725.h” para hacer su uso más sencillo, creamos un struct para poder tener todos los sensores configurados de una forma más entendible:


struct CRGB {
 Adafruit_TCS34725 tcsX = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_24MS, TCS34725_GAIN_4X);
  uint16_t Clear;
  uint16_t Red;
  uint16_t Green;
  uint16_t Blue;
  uint16_t cct;
  uint16_t lux;
};

CRGB tcs[12];

Estos sensores vienen con un Led incorporado que proporciona una luz referencia para realizar la lectura ahorrándonos problemas derivados de la eliminación ambiente. No obstante, son tan potentes que su parpadeo es muy molesto para la vista y es algo de debemos evitar.

El modo de controlar el encendido del Led se obtiene con la siguiente instrucción:

                        tcs[i].tcsX.setInterrupt(X); // siendo X false (on) o true(off)

Pero no parece posible evitar que los leds se enciendan una vez reciben corriente, dejando al usuario que los esté observando con molestias.

La lectura de cada sensor se realiza de la siguiente forma:
           
     tcaselect(p, TCAADDR0);
     tcs[p].tcsX.setInterrupt(false);
     tcs[p].tcsX.getRawData(&tcs[p].Red, &tcs[p].Green, &tcs[p].Blue, &tcs[p].Clear);
     tcs[p].cct = tcs[p].tcsX.calculateColorTemperature(tcs[p].Red, tcs[p].Green, tcs[p].Blue);
     tcs[p].lux = tcs[p].tcsX.calculateLux(tcs[p].Red, tcs[p].Green, tcs[p].Blue);
     tcs[p].tcsX.setInterrupt(false);

Siendo (p) el número de sensor conectado al Multiplexor TCA 0.

Driver A4988


El driver A4988 se emplea para controlar el motor PSP. Para su utilización empleamos la librería AccelStepper.h, que nos proporciona todo lo necesario. En nuestro proyecto la relación entre los pines entre el teensy y el driver son:

A4988
TEENSY 3.2
DIR
PIN 1
STEP
PIN 2
MS3
PIN 4
MS2
PIN 5
MS1
PIN 6



DIR determina la dirección del motor, Step el número de pulsos que debe dar, este tipo de motor tiene una resolución de 200 pulsos por vuelta. Los pines MS3, MS2, MS1, se emplean para configurar el tipo de pulso, y aumentando la resolución del motor.
 

MS1
MS2
MS3
RESOLUTION
0
0
0
FULL STEP
1
0
0
HALF STEP
0
1
0
QUARTER STEP
1
1
0
EIGHTH STEP
1
1
1
SIXTEENTH STEP

Una configuración “Full Step”, el Driver debe recibir 200 pulsos para realizar una vuelta, en “Quarter step” son 800 pulsos y así sucesivamente.

Modulo Bluetooth


El módulo JY-MCU es un estándar de bluetooth que está configurado a 9600 bauds, y está conectado al puerto serial 2 de la placa Teensy 3.2.



Modos


El sistema tiene dos modos de funcionamiento el modo automático que funciona mediante la Tablet y el modo manual que funciona mediante los controles de la balanza.

Los colores de los pesos están indicados por su letra o su código ASCII:

    Amarillo à ‘A’ o 65 (DEC)
   
   Rojo à ‘R’ o 82 (DEC)

   Verde à ‘V’ o 86 (DEC)

Automático

El sistema envía cada segundo la información de los pesos a la Tablet y espera la respuesta de este. En este modo la balanza es pasiva, el sistema no hace ningún calculo simplemente obedece las instrucciones. Por ello en este modo es posible jugar a engañar al usuario.

La trama del mensaje que recibe la Tablet es :

A
0
0
0
0
0
0
0
0
0
 0
0
0
mensaje
Modo
0
1
2
3
4
5
6
7
8
9
10
11
Posición

Cada parámetro está separado por una coma, las posiciones están invertidas con la configuración de la balanza, es decir la posición 0 está en el extremo derecha y la posición 11 en el extremo izquierdo.

La trama a recibir por la Tablet es un mensaje que puede ser.

A
L,X,R,H
A
Control
opción
Control

La señal de control es para comprobar que el mensaje ha llegado correctamente y la opción son los movimientos que ha de realizar la balanza, Derecha, izquierda, o centro, H se emplearía para rearmar el sistema.

Manual


El sistema manual consta de dos tableros instalados en la balanza, el primero está en la parte posterior y solo es accesible por el examinador consta:

-          Un interruptor para encender el sistema
-          Un interruptor para seleccionar modo Automático/ Manual.
-          Un pulsador Start. Activa el sistema.
-          Un Pulsador Home. Nos devuelve la balanza a su posición inicial y rearma el sistema.



El segundo panel accesible al usuario consta:

-          Un Led indicador, encendido cuando la lectura está fijada.
-          Un pulsador de  ß, para indicar el movimiento hacia la izquierda.
-          Un pulsador X, para indicar que está en equilibrio.
-          Un pulsador de à, para indicar el movimiento hacia la derecha.






Este segundo panel es donde el usuario hace su apuesta respecto hacia dónde va a caer la balanza, su funcionamiento es idéntico al botón de Start, pero el usuario debe realizar su apuesta. La trama del mensaje es:


M
0
0
0
0
0
0
0
0
0
 0
0
0
L,X,R,S
L,X,R
Modo
0
1
2
3
4
5
6
7
8
9
10
11
Apuesta
Movimiento


Al igual que el modo automático el mensaje va separado por comas, en apuestas es la selección del usuario en el segundo panel (el caso de presionar el botón de Start, se indica con la letra S). Y el movimiento indica hacia donde se ha movido la balanza.



Anakleto.