miércoles, 25 de noviembre de 2015

TELEMETRÍA EN EL SLOT (II)

Publicado en SVQSLOTPRESS en Junio de 2013 número 16.

En el número anterior realizamos una somera introducción de lo que entendíamos por Telemetría en general y de lo que según nosotros creemos podremos aplicarlo al Slot.

En este número vamos a introducirnos un poco en el montaje que estamos realizando, para que en el siguiente y con el tiempo extra que nos dará el descanso estival, esperamos poder mostrar el montaje completo funcionando al 100%, para que aquellos que quieran investigar en el tema puedan basarse en nuestros avances incluso mejorarlo.

En principio como decíamos en el primer artículo de esta serie, nuestro montaje necesitará una unidad central que sea la que “dirija y coordine” todos los demás elementos. En nuestro caso vamos a utilizar un Arduino Nano v3.0. Vamos a describirlo un poco.


Arduino Nano.

En los artículos precedentes del amigo Jordi ya se describió lo que es y en que consiste el Arduino y vimos ejemplos de lo que podíamos hacer con el. Para nuestro montaje hemos elegido una versión más reducida de la placa Arduino, por aquello de lo reducido del espacio y del peso que podemos usar en nuestro montaje.


El Arduino nano es una placa que se basa en el procesador Atmega 328 (o en el Atmega 168 para las versiones más antiguas, arduino Nano V1.x o 2.x) muy similar al Arduino Uno o al Duemilianove que son los standard. Tienen las mismas funcionalidades pero algunas diferencias, por ejemplo este no cuenta con alimentación externa y funciona para alimentarse y comunicarse con el PC a través de un conector USB mini-B.


Algunos datos sobre la placa:

Microcontrolador Atmel ATmega168 o Atmega328 
Tensión de Operación (nivel lógico) 5 V 
Tensión de Entrada (recomendado) 7-12 V 
Tensión de Entrada (límites) 6-20 V 
Pines E/S Digitales 14 (de los cuales 6 proveen de salida PWM 
Entradas Analógicas 8 
Corriente máx por cada PIN de E/S 40 mA 
Memoria Flash 16 KB (ATmega168) o 32 KB (ATmega328) de los cuales 2KB son usados por el bootloader SRAM 1 KB (ATmega168) o 2 KB (ATmega328) EEPROM 512 bytes (ATmega168) o 1 KB (Atmega328) 
Frecuencia de reloj 16 Mhz 
Dimensiones 18,5mm x 43.2mm
Peso: 

El Arduino Nano puede ser alimentado usando el cable USB Mini-B , con una fuente externa no regulada de 6-20V (pin 30), o con una fuente externa regulada de 5V (pin 27). La fuente de alimentación es seleccionada automáticamente a aquella con mayor tensión. 

Conexiones: Cada uno de los 14 pines digitales del Nano puede ser usado como entrada o salida, usando las funciones pinMode(), digitalWrite(), y digitalRead(). Operan a 5 voltios. Cada pin puede proveer o recibir un máximo de 40mA y poseen una resistencia de pull-up (desconectada por defecto) de 20 a 50 kOhms. Además algunos pines poseen funciones especializadas: 

· Serial: 0 (RX) y 1 (TX). (RX) usado para recibir y (TX)usado para transmitir datos TTL vía serie. Estos pines están conectados a los pines correspondientes del chip USB-a-TTL de FTDI. 
· Interrupciones Externas: pines 2 y 3. Estos pines pueden ser configurados para activar una interrupción por paso a nivel bajo, por flanco de bajada o flanco de subida, o por un cambio de valor. Mira la función attachInterrupt() para más detalles. 
· PWM: pines 3, 5, 6, 9, 10, y 11. Proveen de una salida PWM de 8-bits cuando se usa la función analogWrite()
· SPI: pines 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines soportan la comunicación SPI, la cual, a pesar de poseer el hardware, no está actualmente soportada en el lenguaje Arduino. 
· LED: Pin 13. Existe un LED conectado al pin digital 13. Cuando el pin se encuentra en nivel alto, el LED está encendido, cuando el pin está a nivel bajo, el LED estará apagado. 

El Nano posee 8 entradas analógicas, cada unas de ellas provee de 10 bits de resolución (1024 valores diferentes). Por defecto miden entre 5 voltios y masa, sin embargo es posible cambiar el rango superior usando la función analogReference(). También, algunos de estos pines poseen funciones especiales: 

· I2C: Pines 4 (SDA) y 5 (SCL). Soporta comunicación I2C (TWI) usando la librería Wire (documentación en la web Wiring). 

Hay algunos otros pines en la placa: 

· AREF. Tensión de referencia por las entradas analógicas. Se configura con la función analogReference(). 
· Reset. Pon esta linea a nivel bajo para resetear el microcontrolador. Normalmente se usa para añadir un botón de reset que mantiene a nivel alto el pin reset mientras no es pulsado. 




El software Arduino incluye un monitor serial que permite visualizar en forma de texto los datos enviados desde y hacia la placa Arduino. Los LEDs RX y TX en la placa parpadearán cuando los datos se estén enviando a través del chip FTDI y la conexión USB con el PC (Pero no para la comunicación directa a través de los pines 0 y 1).

El Arduino Nano puede ser programado con el software de Arduino. Selecciona "Arduino Diecimila, Duemilanove, o Nano w/ ATmega168" o "Arduino Duemilanove or Nano w/ ATmega328" de el menú Tools > Board (seleccionando el modelo del microcontrolador en tu placa). 

Por lo demás todo lo que se aplicó en los anteriores artículos para los montajes con Arduino Uno se puede realizar con el Arduino Nano.


Sensor acelerómetro de 3 ejes.

El siguiente elemento que vamos a ver es el sensor que hemos utilizado para nuestro montaje. Se trata de un acelerómetro de 3 ejes en concreto el MMA7361.



Qué es un acelerómetro? Es un sensor que mide las fuerzas de aceleración en diversos ejes. El espacio, eso donde nos movemos, tiene, básicamente, 3 dimensiones Simplificando mucho, si tu estás de pie en mitad de una calle, puedes andar hacia delante/atrás (eje X), de lado (eje Y) o saltar/agacharte (eje Z). Aquí tenemos lo que se llama un eje de coordenadas:

Pues bien, cuando vais en un vehículo, al acelerar, notais como que os quedais pegados al asiento. Al frenar, os vais hacia delante, y al subir un bache parece que momentáneamente, "voláis". Bueno, eso son las fuerzas de aceleración/deceleración en cada eje.

Pues un acelerómetro, mide precisamente esas fuerzas; ¿y como las muestra? En sus patillas de salida da un voltaje determinado en función de la fuerza medida. Luego ese voltaje, se corresponde con una cantidad de "g" en función de la hoja de características del fabricante del chip. 



¿Que son las "g"? 
Un "G", es una unidad de medida del sistema internacional, que se corresponde con la aceleración de la fuerza de la gravedad. Es decir, que 1G es la fuerza que notamos que nos mantiene pegados al suelo.  Puesto sobre nuestro eje de coordenadas, el cuerpo aguanta mejor los G sobre Z que sobre X o Y, por eso notamos cuando aceleramos o frenamos el coche pero no la fuerza de la tierra que nos mantiene pegados al suelo. 

Bien, pues el acelerómetro es capaz de detectar y medir todas esas variaciones de aceleración, y mostrarlo en sus patillas. ¿Cómo? Como se comunican todas las señales analógicas, mediante variaciones de voltaje. ¿Y luego como se yo cuantos G son? Mediante funciones matemáticas. 

Bien, el módulo que hemos elegido para este montaje es un MMA7361 , con sus patillas preparadas para conectar. La elección se ha basado en lo de siempre: disponibilidad de información, de recambios, cantidad de datos de salida, y precio. 



 Se puede descargar la biblioteca "oficial" desde éste enlace:

http://code.google.com/p/mma7361-library/

Los archivos a descargar contienen la biblioteca, archivos de ejemplo y documentación de uso de la misma.

Alimentación del sensor: éste sensor se alimenta a 5v o 3.3V. El Arduino es capaz de proporcionar ambos voltajes, así que no hay problema.



Calibración. Éste sensor detecta de -1G a +1G y tiene dos sensibilidades, seleccionables mediante la activación a señal alta (+3,3v en éste caso) del conector GS (G Select). Podéis ver las sensibilidades en el Datasheet. Para los que os perdaís por entre los documentos técnicos, os diré que con el GS activado, la sensibilidad es de 1G cada 200mV y con el GS desactivado, la sensibilidad es de 1G cada 800mV. Para calibrarlo, tomad como referencia el voltaje que os de el eje Z, ya que si ponéis el acelerómetro en una superficie plana y perpendicular con la tierra, el eje Z estará midiendo 1G. 


Vamos a conectar ahora nuestro MMA 7361 al Arduino Nano.

Como podéis ver en el esquema de arriba y en el de la página anterior la conexión es muy sencilla. 

Por un lado las patillas marcadas como X Y Z las vamos a conectar a los pines analógicos A0 A1 y A2 del arduino, por aquí es por donde nos van a entrar los voltajes que nos indicarán las aceleraciones.

Por otro lado la conexión GND del Arduino se conecta con la del mismo nombre del MMA 7361 a la que también conectaremos las patillas de ST y GS 

Conectaremos apropiadamente la conexión de 3,3 v que es la que hemos elegido en este caso. Conectaremos a esta patilla también la patilla Sl. u dejaremos sin conectar la patilla OG.


Por supuesto antes de realizar un circuito definitivo, vamos a montar tanto el Arduino como el MMA 7361 en una placa de prototipos que nos permitirá hacer pruebas y cambiar los cables muy fácilmente.

Una vez todo conectado, vamos a enchufarlo, naturalmente no hará nada salvo que podremos comprobar el correcto encendido de los led tanto del MMA como de Arduino y ver que está todo correcto. 

A continuación lo que queremos es que haga algo, y para eso hay que meterle algún programa al Arduino, lo más sencillo es probar con los ejemplos que vienen con la documentación de las librerías del acelerómetro, así podremos comprobar el correcto funcionamiento.

Para nuestro proyecto finalmente deberemos de hacer un programa un poco más complejo que desarrollaremos en el próximo artículo.

Como podéis ver en las fotografías que acompañan el artículo nosotros ya hemos superado este paso y hemos montado nuestros elementos en una placa (no definitiva) que nos permite montar el artilugio en un chasis de un coche de Slot para realizar pruebas más definitivas. Además veréis un módulo de antena Bluetooch que es la que nos sirve para emitir los datos y poder recogerlos en nuestra tablet, móbil o Portátil. En el próximo número enseñaremos también como implementar el código.

Por ahora como vamos a tener el Arduino conectado por su cable para poder alimentarlo, podremos comprobar el buen funcionamiento del sistema a través del monitor del puerto serie que incorpora el módulo de explorador de Arduino.

#include
AcceleroMMA7361 accelero;
int x;
int y;
int z;
double G;
int current=0;

void setup()
{
  Serial.begin(9600);
  accelero.begin(13, 12, 11, 10, A0, A1, A2);
  accelero.setARefVoltage(5.0);  //sets the AREF voltage to 3.3V
  accelero.setSensitivity(HIGH);    //sets the sensitivity to +/-6G
  accelero.setAveraging(100);
  accelero.calibrate();
}

void loop()
{
//  g = [mV/analogRead unit] * ([units] - ([Aref/2]) / [mvPerG]
 current = abs(current - accelero.getTotalVector());
 G = 3.22 * ((current - 3.3 / 2)  / 2450); ???
  x = accelero.getXAccel();
  y = accelero.getYAccel();
  z = accelero.getZAccel();

  Serial.print("\nx: ");
  Serial.print(x);
  Serial.print(" \ty: ");
  Serial.print(y);
  Serial.print(" \tz: ");
  Serial.print(z);
  Serial.print("\tG*10^-2");
  Serial.print( " -> " );
  Serial.print( G );
   delay(50);                 //make it readable
}




Con este primer código podremos obtener las aceleraciones en cada uno de los ejes a media que vamos inclinando el montaje, suponemos que en este momento está realizado sobre nuestra placa de prototipos. El artífice de que podamos obtener las aceleraciones directamente es la función accelero.getXAccel() y consiguientes de la librería.

Si en lugar de usar esa función utilizamos la función accelero.getXVolt() lo que obtenemos es el voltaje que recoge el Arduino de la patilla del MMA 7361.

Además de estas funciones hay otras cuantas, todas igualmente sencillas de manejar.

Otra cosa es como interpretar estos datos para obtener el resultado que nosotros queremos o necesitamos.

En nuestro caso nos hemos propuesto conseguir interpretar estos datos de manera que seamos capaces de poder representar en un plano de nuestros circuitos las aceleraciones y las zonas de frenada. Aunque el objetivo más ambicioso es poder representar, a partir de estos datos, el propio circuito, habiendo recorrido una o dos vueltas al mismo.

Os dejo algunas imágenes en las que se pueden ver algunos avances del prototipo, entre otros una de las cosas que más quebraderos de cabeza nos ha dado, la alimentación definitiva del montaje, (en el próximo número le dedicaremos su propio espacio) y alguna captura de pantallas de las pruebas en algunos sistemas de los datos obtenidos.

Esperamos que os interese esta serie de artículos y recordaros que podéis preguntarnos y consultarnos aquellas dudas que os surjan a los que lo vayáis a intentar y sobre todo que si tenéis conocimientos de estos sistemas o de la programación necesaria os agradeceríamos cualquier aportación.
















Buen verano.




martes, 13 de octubre de 2015

Volvemos al BLOG

Hola a todos.

Hace al menos 2 años que no escribo en el Blog. El motivo es que entre el trabajo o la búsqueda del mismo y sobre todo mi tienda on line no me dejan mucho tiempo, además se junta que todos los meses por narices tengo que escribir varios artículos en la revista SVQSLOT PRESS, con lo cual no me quedan ganas para mas.

Sin embargo tengo muy abandonado el Blog que era una válvula de escape para mi y sobre todo porque me gustaría escribir de otros temas que no fuesen de solo de Slot, si no de mis viajes salidas en bici y de otras aficiones que ahora publico como casi todo el mundo por Facebook.

Lo que ocurre es que el famoso "Cara Libro" a pesar de que es muy cómodo e inmediato, cada vez me gusta menos, aunque lo que se escribe tiene mucha difusión, lo que no me gusta es que los señores de Facebook hacen lo que quieren con lo que escribes, desde utilizarlo incluidas fotografías hasta borrarte lo que quieran (ya me ha pasado dos veces).

Bueno lo dicho que intentaré escribir más a menudo y activar un poco el Blog

Saludos.