Herramientas de usuario

Herramientas del sitio


Barra lateral

Traducciones de esta página:

Página principal

Análisis y comparativas

Eventos Guías Herramientas Información de interés Proyectos > Usuarios Varios Wiki Privado

No hay páginas en esta sección.

old admin

No hay páginas en esta sección.

proyectos:exomars

ExoMars Rosalind Franklin BTL

Curiosity MSL
1. El rover Rosalind Franklin -anteriormente conocido como el rover ExoMars- es parte del programa internacional ExoMars (Exobiology on Mars), una misión espacial a Marte de astrobiología para la búsqueda de vida en ese planeta. Fuente: Wikipedia

ExoMars BTL (Bricolabs Technology Laboratory) es un proyecto para replicar a escala el rover Rosalind Franklin en un modelo imprimible y funcional. Toda la información necesaria para construirlo -mecánica y electrónica- y programarlo está en esta wiki y el respositorio de Github (enlaces abajo). Puedes verlo en movimiento en Youtube.

exomarsrover.jpg

Si quieres hacer un modelo del Curiosity o su gemelo Perseverance, también están en esta wiki. Por orden de complejidad, el más sencillo es Perseverance, el más complicado Curiosity, y ExoMars estaría en medio.

Mecánica

La parte mecánica es un mecanismo sencillo con tres balancines independientes anclados a tres puntos del chasis -dos laterales y uno posterior-, que garantizan que las seis ruedas estén siempre en el suelo. Todas ellas son motrices y directrices. El diseño está a escala 1:5 y al ser el original más pequeño que el Curiosity, su modelo a la misma escala también lo será.

Las piezas para imprimir están en este repositorio en formato .scad y .stl. Además hacen falta:

  • Dos placas rígidas de 150x170x3mm, yo ha utilizado un panel sandwich tipo Dibond o Alupanel.
  • Cuatro perfiles de aluminio de 100mm y sección 10×10 (estructura del chasis).
  • Tres tornillos M6x60 con 2 tuercas y 8 arandelas (ejes de los balancines).
  • Tornillos M2.5×10, M2.5×12, M2.5×16, M2.5×25 y tuercas M2.5.
  • Un tubo da alimunio de diámetro 8mm y longitud 150 (mástil de la cámara).

La parte baja del chasis se ensambla como en la figura. Aquí puedes verla orbitando en 3D

La parte alta monta los soportes desplebables de los paneles solares. La idea es montar unos pequeños paneles de prueba. No servirán para alimentar los 12 motores, pero sí para aprender cosas nuevas sobre su conexionado y la gestión de la energía. Para las pruebas los hemos conectado todos en serie y la salida común a un convertidor DC-DC buck-boost (step up/step down).

Cada rueda utiliza un motor N20 y un servo MG90 con engranajes metálicos (los plásticos son demasiado endebles para este proyecto). En el repositorio de partes impresas hay dos versiones: una rígida con dientes (más parecida al original) y otra con llanta rígida y cubierta flexible (más versátil en suelos no marcianos).

tyres_rosy.jpg

Electrónica

Para la electrónica hemos utilizado

  • Un Arduino MEGA, concretamente un clon con conexión USB-C y más potencia para los dispositivos conectados a él (hasta 2A). Además tiene conexiones directas para 6 servos.
  • Un driver de motores L298N.

foto_20-5-22_7_56_48.jpg

Las conexiones electrónicas son muy simples.

  • La conexión de los servos es directa al Arduino utilizando los pines PWM 2 a 7 en los tripletes señal-alimentación-masa que tiene preparados. También puedes usar un controlador de servos como el de Adafruit.
  • La conexión de los motores pasa por el driver, que utiliza los pines 8 a 13 como pines de control. Los motores de cada lado del chasis van conectados en paralelo, sólo hay que revisar que giran en el mismo sentido.
  • La alimentación -dos baterías recargables 18650 o similar- va al Arduino y a la entrada de alimentación del driver.

El radiocontrol es el mismo que utiliza Curiosity BTL y que explicamos aquí.

Programación

La programación va a serguir una serie de pasos paralelos al ensamblaje para hacer varias comprobaciones previas.

Montaje y comprobación de los servos

La librería servo de Arduino los mueve con valores entre 0 y 180, estando centrados en el valor 90 (si son servos de 180º coincidirá con grados de giro). El primer paso es girar todos los servos a la posición 90 y una vez allí colocar los brazos que soportan la ruedas de modo que estén alineados para avance recto.

foto_20-5-22_7_57_24.jpg

Como el ensamblaje del servo con el brazo se hace con un acoplamiento dentado, lo más probable es que no coincida exactamente con la posición de avance recto. Por eso después por software tendremos que ajustar esa posición.

Una vez comprobadas las posiciones de centrado, habrá que buscar las necesarias para que el rover pivote sobre sí mismo.

Los números podrían parecerse a estos:

void recto() {
  servo1.write(85);              // posición de avance recto. empezar con todos en 90 y corregir
  servo2.write(95);
  servo3.write(100);
  servo4.write(85);
  servo5.write(80);
  servo6.write(90);
}

void giro() {
  servo1.write(132);              // posicion de giro pivotando. Modificar los valores 1-3-4-6 y dejar igual que arriba 2-5
  servo2.write(95);
  servo3.write(45);
  servo4.write(140);
  servo5.write(80);
  servo6.write(40);
}

El programa para hacer estas comprobaciones es servo_test.ino.

Montaje y comprobación de los motores

Los motores de las ruedas de cada lado del rover se conectarán en paralelo y cada grupo se conectará a una salida del driver L298N. Puedes utilizar otros, pero este se ajusta bien a las necesidades. Una vez hechas las conexiones es necesario comprobar que la función diseñada para su uso lo hace correctamente, es decir, identificar cada tren de ruedas (izquierdo/derecho) e identificar en ellos el sentido de giro (adelante/atrás). En caso de que no coincida con los esperado podemos recablear o cambiar la asignación de pines en el programa. Si las ruedas de un lado no giran todas al unísono la única opción es hardware: recablear.

El programa para probar los motores es driver_test.ino.

#define ENA 8  // pines de conexión del driver, intercambiar si no funciona como se espera
#define IN1 9
#define IN2 10
#define IN3 11
#define IN4 12
#define ENB 13

void drive(int vel_L, int vel_R)
{
  vel_L=constrain(vel_L,-255,255);
  vel_R=constrain(vel_R,-255,255);

  digitalWrite(IN1, (vel_L<=0));
  digitalWrite(IN2, (vel_L>0));
  analogWrite(ENA, abs(vel_L));

  digitalWrite(IN3, (vel_R>0));
  digitalWrite(IN4, (vel_R<=0));
  analogWrite(ENB, abs(vel_R));
}

Lectura y comprobación de la emisora

Para leer la señal de una emisora de radio control con protocolo PPM vamos a usar lo que ya explicamos aquí.

int readppm()
{
  while(pulseIn(PPMpin, HIGH, 10000)<2000){} //espera al canal 0

  for(int i=0; i<chnum; i++)
  {
    chval[i]=pulseIn(PPMpin, HIGH, 10000); //lee los canales secuencialmente
  }

  return chval[chnum];  // devuelve el resultado
}

Prueba completa

Una vez que cada una de las tres partes anteriores -servos, motores y emisora- funcionan correctamente podemos ensamblar el sistema. El programa completo es este. Una vez todo funcionando puedes dejar los cables bien ordenados usando bridas.

Naturalmente puedes utilizar sensores de obstáculos, comunicación bluetooth, o bien utilizar otro controlador (Raspberry, ESP32…) o lo que quieras. Y si lo haces no olvides publicar los resultados.

Equipo

Enlaces

proyectos/exomars.txt · Última modificación: 2022/06/13 11:17 por Félix Sánchez-Tembleque