Simulador 6DOF 360 grados

Running simulator build projects.
Please use the image gallery for your pictures, a short tutorial can be found here.
The first image in the first post will be shown in the project gallery.

Simulador 6DOF 360 grados

Postby CBRRRHRC » Thu 3. Jun 2021, 17:18

Hasta ahora he tomado de todas las variables que provee x-plane, estas seis:

xplane.suscribeDataRef(1,1,"sim/flightmodel/position/phi");
xplane.suscribeDataRef(1,2,"sim/flightmodel/position/theta");
xplane.suscribeDataRef(1,3,"sim/flightmodel/position/psi");
xplane.suscribeDataRef(1,4,"sim/flightmodel/forces/fnrml_aero");
xplane.suscribeDataRef(1,5,"sim/flightmodel/forces/fside_aero");
xplane.suscribeDataRef(1,6,"sim/flightmodel/forces/faxil_aero");

Si tomamos la primer línea lo que esta entre paréntesis, los campos tienen el siguiente significado:

Parámetro 1 = Número de veces por segundo que x-plane manda ese dato.
Parámetro 2 = Número de Orden de los datos enviados por x-plane.
Parámetro 3 = Nombre y ubicación del campo seleccionado.

Name Type Version Writable Units Description

fside_aero float 660+ yes Newtons Aerodynamic forces – sideways – ACF X.
fnrml_aero float 660+ yes Newtons Aerodynamic forces – upward – ACF Y.
faxil_aero float 660+ yes Newtons Aerodynamic forces – backward – ACF Z

theta float 660+ yes degrees The pitch relative to the plane normal to the Y axis in degrees –
phi float 660+ yes degrees The roll of the aircraft in degrees –
psi float 660+ yes degrees The true heading of the aircraft in degrees from the Z axis –
CBRRRHRC
 
Posts: 184
Images: 11
Joined: Thu 7. May 2020, 03:51
Has thanked: 0 time
Been thanked: 0 time

Simulador 6DOF 360 grados

Postby CBRRRHRC » Wed 9. Jun 2021, 18:09

Según vimos en los párrafos anteriores, tenemos 6 valores. Los motores necesitan solo los valores Pitch, Roll y Yaw, el g-seat utilizara los 6 valores.
Los motores utilizarán directamente los valores de posición para determinar el voltaje necesario para moverlos según el cálculo visto anteriormente.
Los seis valores deberán tomarse en cuenta para calcular la posición de los 16 servos del g-seat.
Veamos las distintas situaciones:
1- En un vuelos horizontal con velocidad uniformes solo actúa el peso y la fuerza de sustentación.
2 - En el decolaje inicialmente solo actúa la aceleración. Esta aceleración se incrementa con el tiempo y genera una fuerza creciente hacia atrás. Como vimos estos se simula llevando los borden interiores hacia atras.
he ira variando a medida que la aceleración aumenta.
El grado de movimiento de las placas dependerá de la aceleración y que en este caso ira aumentando.

El valor estándar de la gravedad (g) terrestre es de 9,80665 m/s². Entonces (y de acuerdo con la segunda ley de Newton: fuerza = masa × aceleración), tendremos:
1kp = 1 kgf = 1 kg × 9,80665 m/s2 = 9,80665 N, de modo que un kilogramo-fuerza o kilopondio equivale a 9,80665 N, de acuerdo con el valor estándar de la gravedad terrestre.


Como se ve en la figura en el momento del despegue se genera una fuerza centrifuga y se ve reflejada en los glúteos del pilotos. En este momento las placas simulan este movimiento así:
. Cuando el avión comienza el ascenso en forma rectilínea, las fuerzas resultantes son la de la primer figura. Cuando la aceleración de ascenso termina y las placas quedarían neutras:
,
Solo quedaría actuando la fuerza de gravedad provocada por la inclinación del aro medio.

Para el aterrizaje si bien las fuerzas son inversas, la mas importante es la fuerza de frenado cuando el avión toca tierra.
Se podría incrementar esta fuerza empujando al piloto hacia adelante con las placas del respaldo y además la presión que ejercerán los cinturones,
En este punto también comienzan a actuar los Bodyshayker para simular las imperfecciones de la pista como las juntas de las placas de asfalto.
Fuerza que actua en el descenso por la posición del aro medio,


El método que utilizaré para controlar las placas será el de Lógica Difusa y las reglas muy similares utilizadas en los aros, Los valores los obtendré en una primera aproximación de los valores de fuerzas que envia x-plane realizando maniobras que los maximicen, tomando como valor cero el punto medio del movimiento de las placas y valores positivos y negativos fuera de esa posición,
CBRRRHRC
 
Posts: 184
Images: 11
Joined: Thu 7. May 2020, 03:51
Has thanked: 0 time
Been thanked: 0 time

Simulador 6DOF 360 grados

Postby CBRRRHRC » Thu 24. Jun 2021, 03:54

Luego de definir, por lo menos tentativamente, el diseño de hardware como de software, voy a comenzar con la construcción del simulador. Primero construire lo esencial para poder probar todo parte del hardware, la parte eléctrica, electrónica y de programación, especialmente a la lógica difusa. En realidad hay un montón de cosas que he definido ad doc y que ahora quiero verificar.
La primer estructura es la sujeción al techo. Esta parte sostiene todo el simulador. Consta de 5 piezas y 8 tornillos,
La placa que va sujeta al techo (1) por los tornillos (2), M14x2,0x45 según nomenclatura Solidwork.El conjunto (2.3) se utiliza para regular la altura del simulador para conectarlo con el techo y el piso, El tornillo (4) conecta los tornillos (3) y al girar regula su separación. La placa (5) conecta el tornillo inferior con la caja reductora, Los tornillos (6) M8x1,25x80 fijan esta unión, Las pieza (1.3) y (3,5) van soldadas,
La siguiente estructura es la unión caja reductora-Motor. Las piezas en verde significan que ya existen y son partes del motor o de la caja.
La transmisión del motor (1) se debe acoplar a la caja a través de la pieza (7). Esta pieza se conecta al motor con una rosca al eje del motor y 2 tornillos (12) para fijar la rotación. A su vez esta se une con el eje (5) que recibe las revoluciones directas del motor y que forma parte de la caja reductora (2). La parte de unión fija es a través de la pieza (3). Esta se fija al motor por los tornillos (11) y a la caja por la unión de los tornillos (9) y (10). El tornillo (9) se enrosca dentro de tornillo (10), por lo que se deberá realizar una rosca interna al tornillo (10). La pieza (4) es el Rotary Encoder que va unido al eje (8) de la caja y es el que transmite las revoluciones del motor luego de la reducción 1:50.
Grupo Caja Motor armado
Unión de transmisión armada

Para la transmisión de movimiento entre los aros, desde el externo al interno pasando por el medio, se hace a través de ejes que unen los dos aros. El aro que transmite el movimiento (1) proveniente del par caja motor tiene un soporte que permite el giro libre del eje (2,3). La otra punta del eje (4) esta fijamente unido al aro (14) que recibe el movimiento.
En esta imagen muestra la coneccion del grupo caja motor con el aro exterior a través del eje de la caja. Los tornillos están colocados para permitir un ajuste de este conjunto. Si en la prueba el motor tiene poco sustento se colocara un soporte del motor con el soporte de la caja.

En esta imagen hemos reemplazado la parte del aro externo por el aro completo. Al lado de la caja coloque los soporte para la batería.
La coneccion en el piso es similar a la coneccion superior.

Para completar la configuración se agregan los componentes electrónicos y los circuitos para controlarlos.
Tenemos el Rotary Encoder(34), el Controlador del motor(43), la Batería (44) para el Arduino one(56), Los ventiladores de refrigeración(46), Circuitos para programación del controlador(47), sensores de temperatura(63).
CBRRRHRC
 
Posts: 184
Images: 11
Joined: Thu 7. May 2020, 03:51
Has thanked: 0 time
Been thanked: 0 time

Simulador 6DOF 360 grados

Postby CBRRRHRC » Wed 26. Jan 2022, 14:02

Para el armado de los circuitos utilizare placas perforadas.
CBRRRHRC
 
Posts: 184
Images: 11
Joined: Thu 7. May 2020, 03:51
Has thanked: 0 time
Been thanked: 0 time

Simulador 6DOF 360 grados

Postby CBRRRHRC » Wed 26. Jan 2022, 14:29

La primer placa que estará ubicada en el asiento de gravedad. Su función es recibir los datos del simulador y transmitirlo a cada uno de los aros (segunda placa) para actualizar su posición y los 8 motores del asiento. Para poner todo en la placa usare el componente Arduino Mega 2560 Pro Mini.

Los otros componentes que irán en la placa son:
1 - Módulo Internet
2 - Módulo ATmega 2560 mini Pro
3 - Módulos bluetooth (3)
4 - Display
5 - Conector RS232

PCB de ambas partes de la placa

La segunda placa (tres, una por cada aro). Para poner todo en la placa armare un Arduino con un cristal externo de 16Mhz).

1 - Microcontrolador AtmMega328P
2 - Zócalo Microcontrolador
3 - Cristal 16 Mhz
4 - Condensador de 22 Micro Faradios
5 - Regulador de Voltaje 7805
6 - Condensador de 0.22 Micro Faradios
7 - Condensador de 100 Micro Faradios
8 - Botón para reset
9 - Led
10- Resistencia de 230 ohm

La placa perforada con el clon de Arduino también tendrá las siguientes conexiones:
11 - Modulo Bluetooth ubicado en la placa
12 - Sensores de temperatura, solo las conecciones
13 - Ventiladores, solo las coneccion
14 - Soporte de las baterías ubicadas en la placa
15 - Micro ULN2003A
16 - Rotary Encoder, solo las conecciones
17 - Mosfet ubicado en la placa
18 - Resistencia de 10k ubicada en la placa
Last edited by CBRRRHRC on Mon 28. Feb 2022, 03:18, edited 6 times in total.
CBRRRHRC
 
Posts: 184
Images: 11
Joined: Thu 7. May 2020, 03:51
Has thanked: 0 time
Been thanked: 0 time

Simulador 6DOF 360 grados

Postby CBRRRHRC » Sat 5. Feb 2022, 15:10

La placa con la distribución aproximada de los componentes. De estos componentes algunos están dentro de la placa y otros fuera como en motores, controladores, etc.

La coneccion entre los componentes con el exterior se hará con un jumper de varios conectores.

Como no se utiliza una placa arduino la fuente de poder externa debe ser regulada a 5v. Para ello es el siguiente circuito en la placa. La salida de este circuito tendrá el positivo y negativo para alimentar componentes dentro de la placa y fuera como iremos viendo.

Se pueden observar:
1 - Regulador de Voltaje 7805
2 - Condensador de 22 Micro Faradios
3 - Condensador de 100 Micro Faradios
y los bornes positivo y negativo para los componente externos. Es bueno recordar que estos componentes también deben tener un voltaje de 5v como los entrega la placa Arduino.
Para completar el reemplazo del Arduino Uno, colocamos el microcontrolador Atmega328p, el Cristal 16 Mhz, 2 Condensadores de 22 Micro Faradios una resistencia de 10k y el botón pulsador para el reset.

El siguiente componente es el modulo de Bluetooth

Lo que sigue son los Muffet para el controlador del motor. Si bien estos están en la plaqueta, tiene seis conexiones para afuera de la plaqueta

Luego de acomodar un poco los componentes el siguiente modulo es el componente ULN2003A para el control de encendido de ventiladores. También se coloca un Led para indicar el encendido del circuito.

Completando todas las conecciones para los módulos externos y fuentes de poder de 5v regularizados.

Como el circuito se ha vuelto muy complejo para armarlo con las placas perforadas y además hay que hacer tres placas iguales, voy a probar con la fabricacion de PCB con el siguiente diseño:

Los diseños de la PCB son los siguientes:

Son dos porque el diseño impreso es para una placa de dos caras.
Last edited by CBRRRHRC on Fri 18. Feb 2022, 04:16, edited 8 times in total.
CBRRRHRC
 
Posts: 184
Images: 11
Joined: Thu 7. May 2020, 03:51
Has thanked: 0 time
Been thanked: 0 time

Simulador 6DOF 360 grados

Postby CBRRRHRC » Tue 15. Feb 2022, 17:42

En la plaza no encuentro tubos para los aros con las dimensiones exactas. por lo tanto las dimensiones que tomare serán 100x40x2 mm En base a esto debere modificar las dimensiones de alguna piezas.
CBRRRHRC
 
Posts: 184
Images: 11
Joined: Thu 7. May 2020, 03:51
Has thanked: 0 time
Been thanked: 0 time

Simulador 6DOF 360 grados

Postby CBRRRHRC » Fri 18. Feb 2022, 17:03

En forma paralela al armado físico del simulador iré detallando el programa que contendrá Arduino pero ahora contemplando todos los componente y la lógica para que cumplan sus funciones.

Flujo de Información
Para poder programar los módulos y su secuencia de activación, se debe tener muy en claro flujo de información. A lo largo del diseño he mostrado módulos, conecciones, y software pero todo desconectado o independiente entre si. El flujo de información es de ida y vuelta armando un ciclo desde xplane hasta como quedan con los cambios después de las lecturas.
Otra de las variables que se deben contemplar son las interrupciones de este flujo para que se cumplan ciertos eventos. El ciclo comienza en la PC con la obtención de Pitch, Raw y Roll, provistos por xplane. El módulo esp8266 recibe estos datos.
Arduino_ESP_8266.txt
(2.12 KiB) Downloaded 435 times

Para el calculo de las nuevas posiciones (voltaje enviado a los motores), se necesitan los datos que vienen del xplane y la posición actual de los aros y las placas del asiento. Inicialmente los valores de los aros es cero y las placas de 22,5 grados con respecto a la posición horizontal.
Los aros no tienen topes en su movimiento ya que pueden girar 360 grados, pero las placas tienen como minimo 0 grados y máximo 45 grados. las posición en grados de los aros se obtienen por bluetooth de los 3 módulos HC05. Los valores de 4 de los 8 motores(dos por cada placa) del asiento llegan directamente por el protocolo RS232 módulo Max3232. El calculo en los aros lo mostré en párrafos anteriores.

He mencionado que para enviar datos a los Arduino UNO en cada uno de los aros. El Arduino Mega tiene 3 módulos que para nuestra configuración será HC-05 y se conectaran con los HC-05 de cada aro.

1. Dispositivos Bluetooth:
El módulo Bluetooth HC-05 viene configurado de fábrica como "Esclavo" (slave), pero se puede cambiar para que trabaje como "maestro" (master), además se puede cambiar el nombre, código de vinculación, velocidad y otros parámetros más.

Definamos primero que es un dispositivo bluetooth maestro y dispositivo esclavo:

Modulo bluetooth hc-05 como esclavo:
Cuando está configurado de esta forma, se comporta similar a un HC-06, espera que un dispositivo bluetooth maestro se conecte a este, generalmente se utiliza cuando se necesita comunicarse con una PC o Celular, pues estos se comportan como dispositivos maestros.

Modulo bluetooth hc-05 como Maestro:
En este modo, EL HC-05 es el que inicia la conexión. Un dispositivo maestro solo se puede conectarse con un dispositivo esclavo. Generalmente se utiliza este modo para comunicarse entre módulos bluetooth. Pero es necesario antes especificar con que dispositivo se tiene que comunicar, esto se explicará más adelante

El módulo HC-05 viene por defecto configurado de la siguiente forma:
- Modo o role: Esclavo
- Nombre por defeco: HC-05
- Código de emparejamiento por defecto: 1234
- La velocidad por defecto (baud rate): 9600

2. Modos de trabajo del HC-05::
EL Modulo HC-05 tiene 4 estados los cuales es importante conocer:

Estado Desconectado:
- Entra a este estado en cuanto alimentas el modulo, y cuando no se ha establecido una conexión bluetooth con ningún otro dispositivo
- EL LED del módulo en este estado parpadea rápidamente
- En este estado a diferencia del HC-06, el HC-05 no puede interpretar los comandos AT

Estado Conectado o de comunicación
- Entra a este estado cuando se establece una conexión con otro dispositivo bluetooth.
- El LED hace un doble parpadeo.
- Todos los datos que se ingresen al HC-05 por el Pin RX se trasmiten por bluetooth al dispositivo conectado, y los datos recibidos se devuelven por el pin TX. La comunicación es transparente

Modo AT 1
- Para entrar a este estado después de conectar y alimentar el modulo es necesario presionar el botón del HC-05.
- En este estado, podemos enviar comandos AT, pero a la misma velocidad con el que está configurado.
- EL LED del módulo en este estado parpadea rápidamente igual que en el estado desconectado.

Modo AT 2
- Para entrar a este estado es necesario tener presionado el botón al momento de alimentar el modulo, es decir el modulo debe encender con el botón presionado, después de haber encendido se puede soltar y permanecerá en este estado.

- En este estado, para enviar comandos AT es necesario hacerlo a la velocidad de 38400 baudios, esto es muy útil cuando nos olvidamos la velocidad con la que hemos dejado configurado nuestro modulo.

- EL LED del módulo en este estado parpadea lentamente.

3. Conexión entre la PC con el Módulo HC-05:
Entendido lo anterior vamos realizamos las conexiones para configurar el HC-05.

Para configurar el modulo necesitamos enviar los comandos AT desde una computadora, esto lo podemos hacer de dos formas:
3.1. Hacer la comunicación entre la PC y el módulo de forma indirecta a través de un Arduino:

ConfiguracionHC-05 con Arduino
Las conexiones serían las siguientes:

Conexión HC-05 y Arduino

Ahora es necesario compilar y cargar el siguiente sketch que hemos preparado, que como vemos lee los datos enviados de la PC a través de nuestro IDE y se lo envía serialmente hacia los pines RXD y TXD de nuestro módulo HC-05.


#include <SoftwareSerial.h> // --------------------------------------------------------------------------------Incluimos la librería SoftwareSerial
SoftwareSerial BT(10,11); // -------------------------------------------------------------------------------------Definimos los pines RX y TX del Arduino conectados al Bluetooth
void setup() {
BT.begin(9600); // ----------------------------------------------------------------------------------------------Inicializamos el puerto serie BT (Para Modo AT 2)
Serial.begin(9600); // ---------------------------------------------------------------------------------------------Inicializamos el puerto serie
}
void loop() {
if(BT.available()) { //--------------------------------------------------------------------------------------Si llega un dato por el puerto BT se envía al monitor serial
Serial.write(BT.read());
}
if(Serial.available()) { // ----------------------------------------------------------------------------------Si llega un dato por el monitor serial se envía al puerto BT
BT.write(Serial.read());
}
}


3.2. Hacer la comunicación entre la PC y el módulo de forma Directa usando un conversor USB-Serial:
Configuración HC-05 con USB a TTL
Las conexiones serían las siguientes:

Conexión HC-05 y conversor USB a TTL

Como se observa los datos le llegan directamente desde la PC a través del módulo USB a Serial, para esto se pueden usar cualquier modelo de conversor como el CP2102 y PL2303 pero también se puede hacer a través de un módulo MAX232 en caso tengan un puerto físico serial en su PC.

4. Configurando nuestro Módulo HC-05:
En nuestro ejemplo usaremos un conversor USB serial CP2102 que se ha instalado como puerto serial COM5, por lo que antes de abrir el Monitor serial, en nuestro IDE Arduino debemos escoger dicho Puerto.

El siguiente paso es entrar al Modo AT 1 o Modo AT 2:
-Para entrar al modo AT 1, después de alimentar el modulo y haber encendido tan solo basta presionar el botón que tiene el módulo HC-05, el LED del módulo seguirá parpadeando rápidamente, por lo que para saber si hemos entrado al Modo AT 1 es necesario enviar comandos AT y ver si responde, estos comandos se verán más adelante.
-Para entrar al modo AT 2, antes de alimentar o encender el modulo es necesario presionar su botón, mantener presionado y alimentar el modulo, después que enciende recién podemos soltar el botón. Si el LED Parpadea lentamente es porque ya está en Modo AT 2.

En este tutorial enviaremos los comandos AT usando el Modo AT 2, pero también es válido si están en el Modo AT 1, con la diferencia que tendrán que cambiar a la velocidad con la que tienen configurado su Bluetooth (si es la primera vez que configuran, la velocidad por defecto es de 9600).
Ahora abrimos nuestro Monitor serial del IDE de Arduino, pero puedes usar cualquier monitor serial.
En la parte inferior debemos escoger “Ambos NL & CR” y la velocidad “38400 baud” (la velocidad para comunicarse en el MODO AT 2)

Configuración Monitor Serial

Echo esto Podemos empezar a enviar los comandos AT a nuestro Bluetooth
Test de comunicación
Lo primero es comprobar si nuestro bluetooth responde a los comandos AT
Enviar: AT
Recibe: OK
Si recibimos como respuesta un OK entonces podemos continuar, sino verificar las conexiones o los pasos anteriores.

Cambiar nombre de nuestro módulo HC-05
Por defecto nuestro bluetooth se llama “HC-05” esto se puede cambiar con el siguiente comando AT
Enviar: AT+NAME=<Nombre> Ejm: AT+NAME=Robot
Respuesta: OK
Cambiar Código de Vinculación
Por defecto viene con el código de vinculación (Pin) “1234”, para cambiarlo hay que enviar el siguiente comando AT
Enviar: AT+PSWD=<"Pin"> Ejm: AT+PSWD="2560"
Respuesta: OK
Se puede saber cuál es el pin actual de nuestro modulo, para eso hay que enviar el siguiente comando: AT+ PSWD?

Configurar la velocidad de comunicación:
La velocidad por defecto es de 9600 baudios, con Stop bit =0 (1 bit de parada), y sin Paridad, para cambiar estos parámetros, se hace uso del siguiente comando AT:
Enviar: AT+UART=<Baud> ,< StopBit>,< Parity>
Respuesta: OK
Donde :
< Baud > equivale a una velocidad, los valores pueden ser: 4800, 9600, 19200, 38400, 57600, 115200, 23400, 460800, 921600 o 1382400.
< StopBit> es el Bit de parada, puede ser 0 o 1, para 1 bit o 2 bits de parada respectivamente, Para aplicaciones comunes se trabaja con 1 bit por lo que este parámetro normalmente se lo deja en 0.
< Parity> Es la paridad, puede ser 0 (Sin Paridad), 1 (Paridad impar) o 2 (Paridad par). Para aplicaciones comunes no se usa paridad, por lo que se recomienda dejar este parámetro en 0.
Ejemplo:
Enviar: AT+UART=9600,0,0
Respuesta: OK
Se puede saber cuál es la configuración actual, para eso hay que enviar el siguiente comando: AT+UART?
Configurar el Role: para que trabaje como Maestro o Esclavo
Por defecto nuestro HC-05 viene como esclavo, el Siguiente comando nos permite cambiar esto:
Enviar: AT+ROLE=<Role> Ejm: AT+ROLE=0
Respuesta: OK
Donde:<Role>
0 -> Esclavo
1 -> Maestro

Para saber cuál es la configuración actual, enviar el siguiente comando: AT+ ROLE?
Configurar el modo de conexión (cuando se trabaja como maestro)
Esta configuración aplica para cuando el modulo está trabajando como maestro, el modulo necesita saber si se va a conectar con un dispositivo en particular o con cualquiera que esté disponible.
Enviar: AT+CMODE=<Mode> Ejm: AT+CMODE=1
Respuesta: OK
Donde: < Mode >
0 -> Conectarse a un dispositivo con la dirección especificada(Se utiliza otro comando AT para especificar esta dirección).
1 -> conectar el módulo a cualquier dirección disponible(aleatorio).
Enviar el siguiente comando para averiguar el modo actual de conexión: AT+ CMODE?
Especificar la dirección del dispositivo al cual nos vamos a conectar
Esta configuración aplica cunado nuestro modulo está configurado como maestro, y a la vez el modo de conexión está en 0 (CMODE=0) el cual indica que nos vamos a conectar al dispositivo esclavo en particular. Para especificar la dirección al cual nos vamos a conectar se usa el siguiente comando AT
Enviar: AT+BIND=<Address>
Respuesta: OK
Donde:
< Address > Es la dirección del dispositivo al cual nos vamos a conectar, la dirección se envía de la siguiente forma: 1234,56,ABCDEF la cual equivale a la dirección 12:34:56:AB:CD:EF
Ejemplo:
Enviar: AT+BIND=E668,46,9277F2
Respuesta: OK
Para ver la dirección actual en este parámetro hay que enviar el siguiente comando: AT+ BIND?
Otros comandos AT de utilidad:
Obtener la versión del firmware:
Enviar: AT+VERSION?
Respuesta: +VERSION<Versión> Resp Ej: +VERSION:2.0-20100601
Obtener la dirección de nuestro modulo bluetooth
Enviar: AT+ADDR?
Respuesta: +ADDR:<dirección> Resp Ej: +ADDR: 98d3:31:2052e6
Resetear nuestro Modulo, después de hacer esto salimos del MODO AT
Enviar: AT+RESET
Respuesta: OK
Restablecer valores por defecto.
Enviar: AT+ORGL
Respuesta: OK
*Al hacer esto todos los parámetros del módulo se restablecen, a los valores por defecto de fábrica. En algunas versiones la velocidad cambia a 38400 baudios y en otros a 9600.

Ahora veremos Dos ejemplos prácticos, con los pasos para configurar nuestro HC-05 como maestro y esclavo:
4.1. Configurando nuestro módulo HC-05 como esclavo:
Realizaremos un ejemplo para configurar nuestro modulo con las siguientes características:
- Modo o role: Esclavo
- Nombre: Robot
- Código de emparejamiento: 1212
- Velocidad o Baud rate: 9600 baudios
A continuación se muestra los pasos para realizar la configuración:
- Entrar en modo AT 1 o Modo AT 2
- Verificar si estamos en modo AT
Enviar: AT
Recibe: OK
- Establecer el Role como Esclavo
Enviar: AT+ROLE=0
Respuesta: OK
- Configurar el Nombre del modulo
Enviar: AT+NAME=Robot
Respuesta: OK
- Establecer el Pin de vinculación
Enviar: AT+PSWD="1212"
Respuesta: OK
- Configura la Velocidad
Enviar: AT+UART=9600,0,0
Respuesta: OK
- Verificar los parámetros cambiados
Enviar:
AT+ROLE?
AT+PSWD?
AT+UART?
Respuesta:
+ROLE:0
OK
+PSWD:1212
OK
+UART:9600,0,0
OK
- Resetear el modulo
Enviar: AT+RESET
Respuesta: OK
En la siguiente imagen podemos ver la secuencia de datos recibidos por el monitor serial en el mismo orden en que se realizaron los pasos anteriores.
Configuración HC-05 como Maestro
Después de hacer la configuración anterior, podemos usar el modulo como un dispositivo esclavo, el cual estará siempre en espera de una conexión por parte de una dispositivo bluetooth maestro.
4.2. Configurando nuestro módulo HC-05 como Maestro:
Ahora veremos un ejemplo para configurar nuestro modulo como maestro, con las siguientes características:
-Modo o role: Maestro
-Nombre: Naylamp
-Código de emparejamiento: 1465 (La misma que el dispositivo a conectarse)
-Velocidad o Baud rate: 57600 baudios
-Dirección del dispositivo esclavo con el que se desea conectar: 98:D3:31:20:3A:D0

A continuación se muestra los pasos para realizar la configuración:
- Entrar en modo AT 1 o Modo AT 2
- Verificar si estamos en modo AT
Enviar: AT
Recibe: OK
- Establecer el Role como Maestro
Enviar: AT+ROLE=1
Respuesta: OK
- Configurar el Nombre del modulo
Enviar: AT+NAME=Naylamp
Respuesta: OK
- Establecer el Pin de vinculación
Enviar: AT+PSWD="1465"
Respuesta: OK
- Configura la Velocidad
Enviar: AT+UART=57600,0,0
Respuesta: OK
- Configurar el modo de conexión
Enviar: AT+CMODE=0
Respuesta: OK
- Especificar la dirección del dispositivo a conectarse
Enviar: AT+BIND=98D3,31,203AD0
Respuesta: OK
- Verificar los parámetros cambiados
Enviar:
AT+ROLE?
AT+PSWD?
AT+UART?
AT+CMODE?
AT+BIND?
Respuesta:
+ROLE:1
OK
+PSWD:1465
OK
+UART:57600,0,0
OK
+CMOD:0
OK
+BIND:98d3:31:203ad0
OK
- Resetear el modulo
Enviar: AT+RESET
Respuesta: OK

En la siguiente imagen podemos ver la secuencia de datos recibidos por el monitor serial en el mismo orden en que se realizaron los pasos anteriores.
Configuración HC-05 como maestro
Después de haber hecho las configuraciones, nuestro modulo se comporta como un dispositivo maestro, el cual estará constantemente buscando el dispositivo especificado hasta encontrarlo y conectarse. Para que el Maestro pueda conectarse con el dispositivo esclavo, ambos deben tener el mismo código de vinculación.
Last edited by CBRRRHRC on Mon 28. Mar 2022, 02:47, edited 1 time in total.
CBRRRHRC
 
Posts: 184
Images: 11
Joined: Thu 7. May 2020, 03:51
Has thanked: 0 time
Been thanked: 0 time

Simulador 6DOF 360 grados

Postby CBRRRHRC » Thu 24. Mar 2022, 17:51

Vimos en el post anterior como enviar Pich, Roll y Yaw mediante Bluetooth los datos para el movimiento de los aros. Ahora debemos enviar los datos de fuerza al asiento de Gravedad. Para ello usaremos un conversor TTL-RS232 para enviar los datos al controlador de los 16 servos del asiento.
Este controlador es el Yost Labs’ Servo Center v4.1.

El ServoCenter 4.1 es un controlador integrado que permite que cualquier dispositivo con un puerto serie para controlar servomotores de hobby estándar,
dispositivos y lectura de entradas analógicas. La placa proporciona una interfaz serial para permitir un fácil control de la posición de posicionamiento a y la velocidad de posicionamiento de cada uno de hasta dieciséis servos conectados de forma independiente y simultánea. Este esquema de control independiente permite que un servo se mueva a una posición lentamente, mientras que otro se mueve a una posición diferente rápidamente, mientras que otro se está moviendo a otra posición a media velocidad. El controlador también proporciona comandos de movimiento "temporizados" que permiten que debe proporcionarse un destino y un tiempo para que el motor pueda moverse hacia el destino especificado durante la cantidad de tiempo especificada.
El controlador ServoCenter 4.1 también ofrece funciones como control absoluto y relativo
conjuntos de comandos, modos posicionales brutos/escalados/porcentuales, 16 canales de E/S digitales, 8
canales de entrada analógica, un protocolo de comando simple pero confiable accesible en ambos
modos de transmisión de texto binario o ASCII, capacidades de almacenamiento preestablecidas integradas y almacenamiento de configuraciones integradas.
La capacidad de controlar de forma independiente la posición, la velocidad y los movimientos cronometrados combinados con el conjunto de características flexibles y ampliables del controlador, ServoCenter 4.1 es especialmente útil para aplicaciones de servocontrol como robótica, animatrónica, control de movimiento, automatización, exhibiciones minoristas y otras áreas donde el fluido independiente o coordinado
servo movimiento es necesario o deseable.
Se pueden conectar hasta 16 servomotores, 8 entradas analógicas a cada placa ServoCenter 4.1. y controladas de forma independiente y simultánea desde un puerto serie RS-232.
El controlador ServoCenter 4.1 se puede programar usando un protocolo de comando simple en modo de texto sin formato o ASCII.

Este controlador tiene varios junper's y conectores que permiten la configuración a nuestras necesidades. Solo mostrare aquellos que nos interesan.Las variables que debemos considerar son ;
JUNPER 2: Define la frecuencia de transferencia.
RS-232 SERIAL-CONECTOR: Para recibir mensajes de control por la interface RS-232.
SV-PWR-EXTERNA-POWER-PADS.: Poder suministrar potencia a los servos mediante una batería externa de 7.5VDC – 12VDC y no menor a 1000mA.

Protocolo del Formato de un paquete
Formato del paquete binario

El tamaño del paquete binario puede oscilar entre tres y diecinueve bytes de longitud, dependiendo de la
naturaleza del comando que se envía al controlador. Cada paquete consta de un byte de "inicio del paquete" (que incluye un especificador de ID de placa), seguido de un "byte especificador de valor”, seguido de cero a treinta y cinco bytes de “datos de comando”, y terminado por un byte de "valor de suma de comprobación" del paquete.

Cada paquete binario tiene de 3 a 35 bytes de longitud y formateado como se muestra:

240(0xF0) + Board ID First Byte – Start of Packet. Calculated by adding 240 to the desired board ID.
Command Second Byte – Command Value. Selected from one of the possible control commands.
Command Data Command Data / Command Parameters. Varies from zero to thirty-five bytes
depending upon the command specified in the second byte position. See the table below for specific command data format and specification.
Command Data
Checksum Value Last Byte – Packet Checksum. See the checksum description below for specific calculation information

Formato de mensaje de comando
El controlador ServoCenter 4.1 ofrece valores de 14 bits para controlar un servo en todo momento.
su rango de movimiento. Esto permite que el rango de movimiento de un servo se divida en 16384
distintas posiciones (0-16383), lo que permite un posicionamiento muy preciso y transiciones suaves.
Dado que el protocolo se basa en valores de 8 bits, la transmisión de valores de 14 bits se logra
enviando dos valores, cada uno de los cuales contiene 7 bits del mensaje de 14 bits. Para valor de varios bytes
transmisión, la porción más significativa (MSB) siempre se envía primero y la porción menos significativa (LSB) se envía en segundo lugar. El MSB está compuesto por los bits 7-13 y el LSB está
compuesto de bits 0-6.
Por ejemplo: para enviar un valor de 16.383 (11111111111111 en binario) un valor de 127
(1111111 binario) sería enviado seguido de otro valor de 127 (1111111 binario). Para
enviar un valor de 5000 (01001110001000 en binario), un valor de 39 (0100111 en binario) sería
ser enviado seguido de otro valor de 8 (0001000 en binario).
Se utiliza un concepto similar para enviar otros parámetros de varios valores, como porcentajes y
veces. En estos casos, los valores se dividen en valores de unidades y valores de centésimas que se combinan para formar un número decimal completo.
Por ejemplo: para enviar un valor porcentual de 50,25% se transmitiría un valor de 50
seguido de un valor de 25. Para enviar un tiempo de 22,50 segundos el usuario transmitiría un valor
de 22 seguido de un valor de 50.
Algunos comandos codifican información adicional en formas específicas de uso. Los detalles de estos
las codificaciones se describen con los detalles de cada comando en la sección "detalles del comando"
de este documento.

1.2 C++: Microsoft Visual C++ 6 Programa ejemplo del tipo de comando usare
/********************************************************************************************\
* This program illustrates how to move servo motors *
* using raw serial communication access using Visual C++ 6.0. *
\*******************************************************************************************/
#include <windows.h>
#include <stdio.h>
#define PORTNUM 1
#define BAUDRATE 9600
void moveservo(HANDLE *,int,int,int);
int InitPort(unsigned int, unsigned int, HANDLE *, DCB *);
int main(int argc, char *argv[]) {
DCB dcb;
HANDLE hCom;
int i=0, BoardNum, ServoNum, Position;
printf(" \n");
printf(" This program demonstrates the QuickMove Raw command.\n");
printf(" \n");
if((InitPort(PORTNUM,BAUDRATE,&hCom,&dcb))!=0) { //--------------------------------------open serial port
printf("\tCould not initialize Comm Port!\n");
return (1);
}
else {
while(1)
{
printf("\n Enter Board Number (0-15):");
scanf("%d",&BoardNum);
printf("\n Enter Servo Number (0-15):");
scanf("%d",&ServoNum);
printf("\n Enter Position (0-16383):");
scanf("%d",&Position);
printf("\n\tSending QuickMove Raw Command *..\n");
moveservo(&hCom,BoardNum,ServoNum,Position);
printf("\n\tDone!\n");
}
}
return (0);
}
void moveservo(HANDLE *hCom,int board,int servo,int position) {
unsigned char buffer[6];//------------------------------------------------------------create empty command packet
unsigned long BytesWritted;//-------------------------------------------------------records # of bytes sent
buffer[0]=board%16 + 0xf0; //--------------------------------------------------------board id #
buffer[1]=0; //--------------------------------------------------------------------------QuickMove Raw command
buffer[2]=servo%16; //----------------------------------------------------------------servo #--used to identify which servo
buffer[3]=position/128; //-----------------------------------------------------------position MSB 7 bits
buffer[4]=position%128; //-----------------------------------------------------------position LSB 7 bits
buffer[5]='\0'; //-----------------------------------------------------------------------NULL character added to disable checksum
WriteFile(*hCom,buffer,5,&BytesWritted,NULL); //-----------------------------send packet
}
int InitPort(unsigned int PortNum, unsigned int BaudRate, HANDLE *hCom,
DCB *dcb) {
BOOL fSuccess;
char pcCommPort[4]={'\0'};
if(PortNum==1)
sprintf(pcCommPort,"COM1");
else if(PortNum==2)
sprintf(pcCommPort,"COM2");
else if(PortNum==3)
sprintf(pcCommPort,"COM3");
else if(PortNum==4)
sprintf(pcCommPort,"COM4");
else
printf("\tPort Number not recognized\n");
*hCom = CreateFile( pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, //-------------------------------------------------------------------------------------------- must be opened with exclusive-access
NULL, //--------------------------------------------------------------------------------------- no security attributes
OPEN_EXISTING, //-------------------------------------------------------------------------- must use OPEN_EXISTING
0, // -------------------------------------------------------------------------------------------not overlapped I/O
NULL //--------------------------------------------------------------------------------------- hTemplate must be NULL for comm
);
if (*hCom == INVALID_HANDLE_VALUE) { //------------------------------------------------Handle the error.
printf("\tCreateFile failed with error%d.\n",
GetLastError());
return (2);
}
// Build on the current configuration, and skip setting the size
// of the input and output buffers with SetupComm.
fSuccess = GetCommState(*hCom, dcb);
if (!fSuccess) //------------------------------------------------------------------------------ Handle the error.
{

printf ("\tGetCommState failed with error %d.\n",
GetLastError());
return (3);
}
// Fill in DCB: Baudrate,8 data bits,no parity, 1 stop bit.
switch(BaudRate)
{
case 9600: dcb->BaudRate = CBR_9600; break;
case 38400: dcb->BaudRate = CBR_38400; break;
case 57600: dcb->BaudRate = CBR_57600; break;
case 115200: dcb->BaudRate = CBR_115200; break;
default: printf("\tBaud Rate not recognized\n");
printf("\tUsing default rate of 9600bps.\n");
dcb->BaudRate = CBR_9600; break;
}
dcb->ByteSize = 8; // data size, xmit, and rcv
dcb->Parity = NOPARITY; // no parity bit
dcb->StopBits = ONESTOPBIT; // one stop bit
fSuccess = SetCommState(*hCom, dcb);
if (!fSuccess)
{
// Handle the error.
printf("\tSetCommState failed with error %d.\n",
GetLastError());
return (4);
}
printf ("\tSerial port successfully reconfigured.\n");
return (0);
}


En este ejemplo estamos moviendo un servo, pero necesitamos mover simultáneamente 4 servos por cada placa con los mismos parámetros. para eso tenemos la opción de usar los comandos de grupo, que en este caso seria

GroupQuickMoveRaw(ServoPositions() As Integer)
Parametros: ServoPositions: Position (0~16383) to which servos will be moved. Expects a 16 element array of
integers. Values out of range are skipped to allow for the individual control of servos.

En este momento luego de mover los servos de una placa debemos preguntar por la posicion actual de esa placa. Ese valor sera devuelto por la interface RS-232 al Arduino Mega.

GetCurrentPositionRaw(ServoNumber As Integer) As Integer
Parameters: ServoNumber: ID (0~15) of servo for which position is being queried.
Return Value: -1=Fail, Current position of servo (0~16383)
CBRRRHRC
 
Posts: 184
Images: 11
Joined: Thu 7. May 2020, 03:51
Has thanked: 0 time
Been thanked: 0 time

Re: Simulador 6DOF 360 grados

Postby andreschaos » Fri 15. Apr 2022, 21:52

Wowww, que pinta tiene eso!!

Lo lograste terminar??
andreschaos
 
Posts: 5
Joined: Fri 8. Apr 2022, 04:55
Has thanked: 0 time
Been thanked: 0 time

PreviousNext

Return to Motion simulator Projects in progress

Who is online

Users browsing this forum: No registered users and 3 guests