25 julio, 2020

Aerodeslizador

Es esta entrada os vamos a contar cómo hemos realizado un aerodeslizador (hovercraft) con Arduino.

Los aerodeslizadores son vehículos que generan un colchón de aire que les permite desplazarse sobre múltiples superfícies sin apenas rozamiento. Son capaces de moverse sobre casi cualquier superfície plana (tierra, agua, nieve, zonas pantanosas, arena, hielo…).

Así, un aerodeslizador necesita dos motores: uno para generar el colchón de aire, otro para impulsarse. Necesita también un timón que permita dirigir el chorro de aire de impulsión y poder, así, cambiar de dirección.

En nuestro diseño vamos a intentar usar materiales fácilmente accesibles y de bajo coste.

¿Te animas a hacer el tuyo? En ese caso, por favor, envíanos fotos/videos, nos encantaría ver cómo lo mejoras y lo disfrutas. ¡A por ello!

1. Chasis

El chasis lo realizamos con una caja de corcho blanco (poliestireno expandido, porexpan, poliexpan…), material ligero, con resistencia suficiente para nuestro proyecto y, sobretodo, fácil de trabajar. Aquí el peso es importante, cuanto más peso más potencia y consumo.

Chasis del aerodeslizador, vista general
Chasis del aerodeslizador
Chasis del aerodeslizador, vista inferior

Además, hemos aprovechado trozos sobrantes del corcho para hacer el anclaje de los motores y la estructura posterior de soporte del motor de propulsion y timón.

Estructura de soporte realizada en corcho blanco pegado. Poco sofisticado, pero fácil de trabajar.

Las distintas piezas de corcho blanco se pegan bien entre ellas usando una pistola de pegamento caliente, siempre que tengamos la precaución de esperar a que se enfríe, lo que en el caso del corcho tarda un poco, pues es aislante térmico.

2. Motores y hélices

Los motores escogidos han sido Brushless (BLDC) A2212 1000kV, el de sustentación con una hélice 1045, el de propulsión con una T5046 (sobretodo por cuestión de tamaño, la 1045 era excesiva). Estos motores necesitan un ESC para su control, que añadimos al sistema.

Motor de la hélice de sustentación
ESC (elementos amarillos) para los motores BLDC

Los motores se han atornillado sobre el corcho blanco usado para la estrcutura. No es un anclaje muy rígido, pero se revela suficiente, barato y sencillo para esta aplicación. En el caso del motor de impulsión fue necesario incluir un refuerzo de cartón para el atornillado del motor. Esta placa de cartón fue pegada con pegamento caliente a la estructura de corcho blanco.

Motor y hélice de propulsión, anclado sobre cartón y pegado al corcho. ¡Fácil!

Por seguridad siempre que trabajemos con hélices debemos intentar que estén protegidas (más bien que nuestros dedos estén protegidos de elllas). En caso de este diseño hemos protegido la hélice de sustentación (de gran tamaño) con una rejilla, por el riesgo que supone tanto si alguien mete un dedo como por proyección de fragmentos si choca con algún objeto del suelo y rompe.

Rejilla de protección

3. Timón

El timón se ha realizado con cartón y un servo SG90 (ligero y de bajo coste). La lámina de cartón que hace de timón se ha pegado con pegamento caliente a la estructura principal. Se ha usado una lámina de cartón ondulado doble, por lo que tiene en su sección 3 láminas de papel (que cubren las ondulaciones). Para generar la «articulación» se han cortado las láminas exteriores, dejando la interior intacta, a la altura del eje de giro del servo.

Vista lateral del timón
Sujeción del servo al timón. ¡Viva el pegamento caliente! Observa también la ranura realizada para facilitar que se doble.
Timón en posición extrema

El servo se ha unido con pegamento caliente a la estructura y al timón.

Servo de manejo del timón, anclaje a la estructura

4. Faldón

Aunque en suelos muy lisos no es estrictamente necesario, hemos decidido dotar al aerodeslizador de un faldón de goma. Por dos motivos:

  • Mejora el funcionamiento sobre suelos con rugosidad (por ejemplo la acera, el asfalto…)
  • Porque mola, ¿dónde se ha visto un aerodeslizador sin faldón?

El faldón que confina el colchón de aire lo hemos hecho con una cámara de bicicleta pegada en el contorno de nuestro chasis. Para ello recurrimos de nuevo a la pistola de pegamento caliente. Al pegarla dejaremos 1-2 cm de goma sobresaliendo por debajo, que serán nuestro faldón de goma.

Detalle del faldón de goma, en la parte inferior del aerodeslizador

Truco: en los primeros pilotajes ajusta la potencia del motor de sustentación a valores reducidos, de manera que el faldón te proporcione cierto rozamiento con el suelo, incluso en suelos muy lisos. Será más fácil de pilotar. A medida que cojas práctica ves aumentando la potencia de sustentación y disfruta de velocidades realmente elevadas.

5. Controlador

Hemos usado lo que, a nuestro juicio, es uno de los mejores mandos de la historia: el mando inalámbrico de la PS2. Lo conectamos a nuestro Arduino y podemos disfrutar de una ergonomía genial, al tiempo que tenemos joysticks analógicos y un montón de botones.

Controlador compatible PS2 inalámbrico
Receptor del controlador PS2

En exteriores el alcance que hemos experimentado sin problemas ha sido de 13m. ¡Más que suficiente!

6. Arduino y otra electrónica

Puedes usar el Arduino que desees, aunque nosotros hemos elegido el UNO, por ser el más extendido.

Adicionalmente al UNO, usamos un sensor shield (facilita el conexionado) y un level-shifter para la conexión del receptor del mando (pues funciona a 3,3V, en vez de la 5V).

UNO con Sensor Shield
Importante: deja ell conector USB accesible, para poder reprogramarlo fácilmente

7. Conexionado

El conexionado deberá realizarse como en la figura siguiente. Destacar que la alimentación del Arduino se realiza a través del convertidor de 5V interno de los ESC, por lo que no se requiere conexión alguna adicional para ello.

8. Código Arduino

El código que se muestra a continuación realiza las siguientes funciones:

  • Potencia del motor de sustentación: se aumenta con la flecha superior, se reduce con la inferior. Ajuste manual en el arranque al nivel deseado. La potencia de este motor se ha limitado desde una constante en el código, para impedir que «vuele».
  • Joystick izquierdo: Potencia del motor de propulsión. El ESC usado no tiene marcha atrás, así que 0-100%.
  • Joystick derecho: Timón. Los valores máximo y mínimo han sido calibrados en función del montaje realizado.
  • Botón X: apaga los motores, para que el aerodeslizador se detenga rápidamente.
#include<Servo.h>
#include <PS2X_lib.h>
#include "Wire.h"
#include "I2Cdev.h"

#define ESC_MIN 1000
#define ESC_MAX 2000
#define ESC_LIM_1 1800  // Límite para el motor de suspensión (colchón de aire)
#define TIMON_IZQ 1600
#define TIMON_DCH 900
#define TIMON_CTR 1250
#define ERROR_MAX 5
 
PS2X ps2x;
Servo ESC1; //Crear un objeto de clase servo
Servo ESC2;
Servo TIMON;
 
int vel = 1000; //amplitud del pulso ESC
int power_esc1 = 1000;
int power_esc2 = 1000;
int posic_timon = 1500;
int incremento = 0;
 
void setup()
{
  //Iniciar puerto serial
  Serial.begin(9600);
  Serial.setTimeout(10);
  //Asignar un pin al ESC
  ESC1.attach(3);
  ESC2.attach(6);
  TIMON.attach(5)
  TIMON.write(TIMON_CTR);
  //Activar el ESC
  Serial.println("Iniciando ESC");
  ESC1.writeMicroseconds(1000); //1000 = 1ms
  ESC2.writeMicroseconds(1000);
  delay(1000);
  ESC2.writeMicroseconds(2000);
  delay(1000);
  ESC2.writeMicroseconds(1000);
  Serial.println("Iniciado");

  delay(2000);
  ps2x.config_gamepad(13,12,10,11, true, true);   //setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
  ESC1.writeMicroseconds(1000); //1000 = 1ms
  ESC2.writeMicroseconds(1000);
}
 
void loop()
{
ps2x.read_gamepad(false, 0);  //Lectura del estado
// ESC propulsion
  power_esc2 = ps2x.Analog(PSS_LY);
  power_esc2 = map(power_esc2, 127, 0, ESC_MIN, ESC_MAX);
  if (power_esc2 < ESC_MIN) power_esc2 = ESC_MIN;
  if (power_esc2 > ESC_MAX) power_esc2 = ESC_MAX;
  ESC2.write(power_esc2);

posic_timon = ps2x.Analog(PSS_RX);
   posic_timon = map(posic_timon, 0, 255, TIMON_IZQ, TIMON_DCH);
   TIMON.write(posic_timon);

// ESC Colchón aire
   if(ps2x.Button(PSB_PAD_UP))   power_esc1+=5;
   if(ps2x.Button(PSB_PAD_DOWN)) power_esc1-=5;
   if (power_esc1 < ESC_MIN) power_esc1 = ESC_MIN;
   if (power_esc1 > ESC_LIM_1) power_esc1 = ESC_LIM_1;
   ESC1.write(power_esc1);

// Aerodeslizador al suelo (Emergencia y parada)
if(ps2x.Button(PSB_BLUE)) {
  power_esc1 = ESC_MIN;   ESC1.write(power_esc1);
  power_esc2 = ESC_MIN;   ESC2.write(power_esc2);
  TIMON.write(TIMON_CTR);
}
  delay(50);
}

9. Video de funcionamiento

Con especial agradecimiento a la persona que graba, de 6 añitos, que se lo curra un montón.

10. Más fotos

Deja una respuesta

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