Análisis y comparativas
Eventos GuíasNo hay páginas en esta sección.
No hay páginas en esta sección.
Análisis y comparativas
Eventos GuíasNo hay páginas en esta sección.
No hay páginas en esta sección.
¡Esta es una revisión vieja del documento!
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 estará aquí.
Si quieres hacer un modelo del Curiosity (o su gemelo Perseverance), tenemos otro proyecto, aunque en su escala más grande (1:5) es un proyecto más complejo.
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/Perseverance, 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:
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.
Cada rueda utiliza un motor N20 y un servo SG90 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 una con cubierta flexible (más versátil en suelos no marcianos).
Para la electrónica he utilizado
Las conexiones electrónicas son muy simples.
El radiocontrol es el mismo que utiliza Curiosity BTL y que explicamos aquí.
La programación va a serguir una serie de pasos paralelos al ensamblaje para hacer vaira comprobaciones previas.
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.
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.
El programa para hacer estas comprobaciones es servo_test.ino.
Las ruedas de cada lado del rover se conectarán en paralelo y cada grupo se conectará a un 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ísolo 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 setup() { pinMode(ENA,OUTPUT); pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); pinMode(ENB,OUTPUT); } void loop() { drive(100,100); // velocidad de las ruedas de la izquierda / derecha } 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)); }
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 }
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. Naturalmente puedes utilizar otro modo de control con sensores de obstáculos, comunicación bluetooth, utilizar otro controlador (Raspberry, ESP32…) o lo que quieras. Y si lo haces no olvides publicar los resultados.