Para completar la tercer pata del proyecto, voy a mostrar los elementos externos que interactúan con el simulador, su conexión con los elementos internos, básicamente el envío de datos, el software que se utiliza en cada una de las etapas. Voy a presentar mis soluciones en cuanto a extracción, transmisión y procesamiento de los datos. Esta es mi visión actual que puede no ser la mas adecuada. Mi intención es probar distintas alternativas en especial las bondades que me pueda proveer X-Sim.
Hasta el momento utilizo el simulador x-plane por lo tanto lo que mostrare a continuacion se refiere a este software.
El equipo que utilizo es:
Procesador Intel Core i7-6800k CPU
Memoria RAM 32 GB
Sistema Operativo Windows 10 64 bits
Placa de video GeForce de Nvidia
Como lo comente antes, el simulador tiene aros concéntricos que pueden girar 360 grados en forma independiente. Esto significa que no se puede conectar ningún dispositivo dentro de la estructura con ningún elemento fuera de la estructura en forma directa, porque cualquier cable se opondría al giro de estos aros, o se cortaría. También esto sucede dentro de la estructura entre los aros ya que los aros giran en forma independiente y sobre ejes distintos (x,y,z)
Otros de las cosas a tomar en cuenta: Gimbal lock, Angulos de Euler, Cuaterniones, que veremos mas adelante cuando veamos la configuración de acuerdo a los datos. La obtención de datos se basa en el protocolo Ethernet UDP de X-plane.
Primero conectamos la pc a nuestra red local Wifi.

- Pieza_126.jpg (14.87 KiB) Viewed 16276 times
Luego con el modulo NodeMCU ESP8266 nos conectaremos vía wifi con el x-plane para solicitarle los datos del vuelo. Para programar el modulo se utiliza el Kernel de arduino.
Ejemplo de programa para la conexión:
#include "ESP8266WiFi.h"
const char* ssid = "ssid"; //Ingresar SSID
const char* password = "password"; //Ingresar Password
void setup(void)
{
Serial.begin(115200);
// Coneccion a WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print("*");
}
Serial.println("");
Serial.println("Conectado a WiFi");
Serial.print("La dirección IP del Módulo ESP8266 es: ");
Serial.print(WiFi.localIP());// Imprime la dirección IP
}
void loop()
{
// VACIO
}
NOTA: En el código, introduce los detalles de tu Red WiFi en lugar de “ssid” y “password”.
Antes de programar, se selecciona el “Módulo genérico ESP8266” de las placas y también selecciona el puerto COM correcto.
Ahora,luego de cargar el programa, se conectará automáticamente a la red WiFi especificada y también responderá con la dirección IP.
Esto se vera en el puerto serie
Connecting to wifi-xxxx
..........
WiFi connected
IP address:
xxx.xxx.x.xx
connecting to xxxxxxxx.net:17
sending data to server
receiving from remote server
"My spelling is Wobbly. It's good spelling but it Wobbles, and the letters
get in the wrong places." A. A. Milne (1882-1958)
closing connection
Al programa que se carga en el modulo ESP2866 de le debe agregar las siguientes líneas
//Necesario para conectar con xplane
xplane.infoXplane(WiFi.localIP());
//Crear una línea por cada dataref que se quiere recibir, (frecuencia -veces por segundo-, orden, dataref)
//si se indica frecuencia 0, entonces xplane deja de enviar ese data ref.
//si alguna suscripción devuelve siempre valor 0, es posible que no se haya especificado bien el dataref, es sensible a las mayúsculas.
xplane.suscribeDataRef(1,1,"sim/cockpit2/clock_timer/zulu_time_seconds");
xplane.suscribeDataRef(1,2,"sim/cockpit2/clock_timer/zulu_time_minutes");
xplane.suscribeDataRef(1,3,"sim/cockpit2/radios/actuators/com1_standby_frequency_hz_833");
xplane.suscribeDataRef(4,4,"sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
xplane.suscribeDataRef(4,5,"sim/cockpit2/gauges/indicators/compass_heading_deg_mag");
En este punto ya tenemos los parámetros que hemos seleccionado de x-plane, para procesarlos. Primero y ya que es la parte mas avanzada, nos ocuparemos del G-Seat.