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.
No hay comentarios:
Publicar un comentario