Secuenciador de compuertas tren de aterrizaje y freno con Arduino


La idea original del proyecto era una toma de contacto con el Arduino, sancandole algo de provecho al tiempo invertido, así que como desde hace años estoy construyendo un avión boeing 727 de gran escala, el proyecto arduino es el siguiente:

Todos los modelos grandes de aviones tienen dos juegos de compuertas para cada tren de aterrizaje, unas que se abren solo mientras el tren está subiendo o bajando, y otras que permanecen abiertas mientras el tren está bajado. En la imagen se pueden ver las compuertas del tren abierta, y se aprecia que son tan grandes que de estar abiertas en tierra, casi tocarían el suelo.

La cuestión es que necesito un secuenciador de puertas que abra todas las puertas, saque el tren, y cierre la mitad de las compuertas, y la maniobra inversa para el despegue. Aquí es donde entra arduino. Originalmente pensé que esta fuera su unica misión, activandolo desde un canal de la radio del avión, pero parece desaprovechar un poco el hecho de tener un arduino onboard ! llegados a este punto creo que sería bueno meterle dos sondas de presión ya que los circuitos del tren y de los frenos son pneumáticos, y con esto podría comprobar si el tren dispone de suficiente presión de aire o no, así que he pensado en dos sensores MPXV5100GP para ambos circuitos, y en caso de que la presión caiga, bajen el tren antes de que sea demasiado tarde y no pueda bajar por si mismo.

valvula pneumáticaMartinete del tren

Esta es una de las válvulas que se accionan mediante servos para inyectar aire en los martinetes del tren y a su lado el martinete,o cilindro pneumático que sube y baja el tren.

Como ya tenía intención de montar esta plataforma en el avión, el tema del GPS, los acelerometros, el pitot y demás, han venido saliendo solos.

Esta tarde me he puesto con el programa secuenciador de servos para las compuertas, y los conmutadores de electroválvulas para los martinetes de los trenes. No es mi mejor programa, y además está segmentado, pero para la prueba que quería hacer, es más que suficiente; Se limita a subir y bajar el tren completamente con cada 5 segundos.

He aquí el resultado:


La idea original del proyecto era una toma de contacto con el Arduino, sancandole algo de provecho al tiempo invertido, así que como desde hace años estoy construyendo un avión boeing 727 de gran escala, el proyecto arduino es el siguiente:

Todos los modelos grandes de aviones tienen dos juegos de compuertas para cada tren de aterrizaje, unas que se abren solo mientras el tren está subiendo o bajando, y otras que permanecen abiertas mientras el tren está bajado. En la imagen se pueden ver las compuertas del tren abierta, y se aprecia que son tan grandes que de estar abiertas en tierra, casi tocarían el suelo.

La cuestión es que necesito un secuenciador de puertas que abra todas las puertas, saque el tren, y cierre la mitad de las compuertas, y la maniobra inversa para el despegue. Aquí es donde entra arduino. Originalmente pensé que esta fuera su unica misión, activandolo desde un canal de la radio del avión, pero parece desaprovechar un poco el hecho de tener un arduino onboard ! llegados a este punto creo que sería bueno meterle dos sondas de presión ya que los circuitos del tren y de los frenos son pneumáticos, y con esto podría comprobar si el tren dispone de suficiente presión de aire o no, así que he pensado en dos sensores MPXV5100GP para ambos circuitos, y en caso de que la presión caiga, bajen el tren antes de que sea demasiado tarde y no pueda bajar por si mismo.

valvula pneumáticaMartinete del tren

Esta es una de las válvulas que se accionan mediante servos para inyectar aire en los martinetes del tren y a su lado el martinete,o cilindro pneumático que sube y baja el tren.

Como ya tenía intención de montar esta plataforma en el avión, el tema del GPS, los acelerometros, el pitot y demás, han venido saliendo solos.

Esta tarde me he puesto con el programa secuenciador de servos para las compuertas, y los conmutadores de electroválvulas para los martinetes de los trenes. No es mi mejor programa, y además está segmentado, pero para la prueba que quería hacer, es más que suficiente; Se limita a subir y bajar el tren completamente con cada 5 segundos.

He aquí el resultado:



#include <Servo.h> 
 
Servo struts;  // Los struts son las "patas", lo que comunmente se llama tren.
Servo compuertas_1; // Compuertas de las ruedas, estas se abren solo mientras se está subiendo bajanado el tren
Servo compuertas_2; // Compuertas de los struts, estas están abiertas mientra el tren está bajado.

static void tren_bajar();
static void tren_subir();
static void struts_bajar();
static void struts_subir();
static void compuertas_1_cerrar();
static void compuertas_1_abrir();
static void compuertas_2_cerrar();
static void compuertas_2_abrir();

// Ajustamos el recorrido de los servos para cada una de las acciones.
int struts_bajado = 70;
int struts_subido = 150;
int compuertas_1_cerradas = 70;
int compuertas_1_abiertas = 150;
int compuertas_2_cerradas = 70;
int compuertas_2_abiertas = 150;
int pos = 0;

void setup() 
{ 
  struts.attach(9);  // attaches the servo on pin 9 to the servo object 
  compuertas_1.attach(10);
  compuertas_2.attach(11);
  
  //Arrancamos con el tren bajado, que es su posición normal en tierra
  tren_bajar();
} 
 
 
void loop() 
{ 

  tren_bajar();
  delay(5000);
  tren_subir();
  delay(5000);  
} 

static void tren_bajar(){
  compuertas_2_abrir();
  compuertas_1_abrir();
  delay(1500);
  struts_bajar();
  delay(1500);
  compuertas_1_cerrar();
}

static void tren_subir(){
  compuertas_1_abrir();
  delay(1500);
  struts_subir();
  delay(1500);
  compuertas_1_cerrar();
  compuertas_2_cerrar();   
}

static void struts_bajar(){
  struts.write(struts_bajado);
}

static void struts_subir(){
  struts.write(struts_subido);
}

static void compuertas_1_cerrar(){
  for(pos = compuertas_1_abiertas; pos > compuertas_1_cerradas; pos--){                                
    compuertas_1.write(pos);             
    delay(15);                      
  } 
}

static void compuertas_1_abrir(){
  for(pos = compuertas_1_cerradas; pos < compuertas_1_abiertas; pos++){                                
    compuertas_1.write(pos);             
    delay(15);                      
  } 
}

static void compuertas_2_cerrar(){
  for(pos = compuertas_2_abiertas; pos > compuertas_2_cerradas; pos--){                                
    compuertas_2.write(pos);             
    delay(15);                      
  } 
}

static void compuertas_2_abrir(){
  for(pos = compuertas_2_cerradas; pos < compuertas_2_abiertas; pos++){                                
    compuertas_2.write(pos);             
    delay(15);                      
  } 
}

También he estado programando el loger para el gps y el pitot, el gps funciona a 1Hz pero el pitot lo hará a 10Hz. En cualquier caso ahora mismo solo lo envia a tierra ya que por ahora no tengo ningún sistema para guardar los datos en el aire.

— Actualización —
He podido observar que al conectar un par de servos o más estos tienen muchas interferencias; es debido a que el arduino no les puede suministrar la corriente necesaria. Se soluciona conectandolos a una batería de 4.8V a 6V, y conectando la masa de esta a la masa del arduino.




#include <Servo.h> 
 
Servo struts;  // Los struts son las "patas", lo que comunmente se llama tren.
Servo compuertas_1; // Compuertas de las ruedas, estas se abren solo mientras se está subiendo bajanado el tren
Servo compuertas_2; // Compuertas de los struts, estas están abiertas mientra el tren está bajado.

static void tren_bajar();
static void tren_subir();
static void struts_bajar();
static void struts_subir();
static void compuertas_1_cerrar();
static void compuertas_1_abrir();
static void compuertas_2_cerrar();
static void compuertas_2_abrir();

// Ajustamos el recorrido de los servos para cada una de las acciones.
int struts_bajado = 70;
int struts_subido = 150;
int compuertas_1_cerradas = 70;
int compuertas_1_abiertas = 150;
int compuertas_2_cerradas = 70;
int compuertas_2_abiertas = 150;
int pos = 0;

void setup() 
{ 
  struts.attach(9);  // attaches the servo on pin 9 to the servo object 
  compuertas_1.attach(10);
  compuertas_2.attach(11);
  
  //Arrancamos con el tren bajado, que es su posición normal en tierra
  tren_bajar();
} 
 
 
void loop() 
{ 

  tren_bajar();
  delay(5000);
  tren_subir();
  delay(5000);  
} 

static void tren_bajar(){
  compuertas_2_abrir();
  compuertas_1_abrir();
  delay(1500);
  struts_bajar();
  delay(1500);
  compuertas_1_cerrar();
}

static void tren_subir(){
  compuertas_1_abrir();
  delay(1500);
  struts_subir();
  delay(1500);
  compuertas_1_cerrar();
  compuertas_2_cerrar();   
}

static void struts_bajar(){
  struts.write(struts_bajado);
}

static void struts_subir(){
  struts.write(struts_subido);
}

static void compuertas_1_cerrar(){
  for(pos = compuertas_1_abiertas; pos > compuertas_1_cerradas; pos--){                                
    compuertas_1.write(pos);             
    delay(15);                      
  } 
}

static void compuertas_1_abrir(){
  for(pos = compuertas_1_cerradas; pos < compuertas_1_abiertas; pos++){                                
    compuertas_1.write(pos);             
    delay(15);                      
  } 
}

static void compuertas_2_cerrar(){
  for(pos = compuertas_2_abiertas; pos > compuertas_2_cerradas; pos--){                                
    compuertas_2.write(pos);             
    delay(15);                      
  } 
}

static void compuertas_2_abrir(){
  for(pos = compuertas_2_cerradas; pos < compuertas_2_abiertas; pos++){                                
    compuertas_2.write(pos);             
    delay(15);                      
  } 
}

También he estado programando el loger para el gps y el pitot, el gps funciona a 1Hz pero el pitot lo hará a 10Hz. En cualquier caso ahora mismo solo lo envia a tierra ya que por ahora no tengo ningún sistema para guardar los datos en el aire.


2 comentarios de “Secuenciador de compuertas tren de aterrizaje y freno con Arduino”

  1. Muchas gracias por tu interés.
    Miré las válvulas de air power, que tienen buena pinta, pero no hacen todo lo que yo quiero, y son más de 600€, con lo que al final decidí hacermela yo mismo.

    Si tienes dudas sobre arduino o quieres compartir experiencias ya sabes donde estoy.

    Un saludo desde España !

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *