Herramientas de usuario

Herramientas del sitio


proyectos:exomars

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
proyectos:exomars [2022/06/13 08:17] – [Programación] Félix Sánchez-Temblequeproyectos:exomars [2022/06/13 11:17] (actual) – [ExoMars Rosalind Franklin BTL] Félix Sánchez-Tembleque
Línea 6: Línea 6:
 {{:proyectos:rover-exomars-2010.png}} {{:proyectos:rover-exomars-2010.png}}
  
-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í.+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 [[https://www.youtube.com/watch?v=89_sRUHTNaU|Youtube]].
  
-{{:proyectos:foto_22-5-22_20_03_27.jpg}}+{{:proyectos:exomarsrover.jpg|exomarsrover.jpg}} 
 + 
 +Si quieres hacer un modelo del [[https://bricolabs.cc/wiki/proyectos/curiosity_btl|Curiosity]] o su gemelo [[https://bricolabs.cc/wiki/proyectos/perseverance|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.
  
-Si quieres hacer un modelo del Curiosity (o su gemelo Perseverance), tenemos otro [[https://bricolabs.cc/wiki/proyectos/curiosity_btl|proyecto]], aunque en su escala más grande (1:5) es un proyecto más complejo. 
  
 ===== Mecánica ===== ===== 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/Perseverance, su modelo a la misma escala también lo será.+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 [[https://github.com/felixstdp/ExoMars/tree/master/3dprint|repositorio]] en formato .scad y .stl. Además hacen falta: Las piezas para imprimir están en este [[https://github.com/felixstdp/ExoMars/tree/master/3dprint|repositorio]] en formato .scad y .stl. Además hacen falta:
Línea 28: Línea 29:
 {{:proyectos:assembly_l.png}} {{:proyectos:assembly_l.png}}
  
-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.+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).
  
 {{:proyectos:sin_titulo.png}} {{:proyectos:sin_titulo.png}}
  
-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).+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).
  
-{{:proyectos:tyres_rosy.jpg}}+{{:proyectos:tyres_rosy.jpg|tyres_rosy.jpg}}
  
 ===== Electrónica ===== ===== Electrónica =====
  
-Para la electrónica he utilizado+Para la electrónica hemos utilizado
  
   * Un Arduino MEGA, concretamente un [[https://www.amazon.es/KEYESTUDIO-Placa-Control-Compatible-Arduino/dp/B09PV64D3Y|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 Arduino MEGA, concretamente un [[https://www.amazon.es/KEYESTUDIO-Placa-Control-Compatible-Arduino/dp/B09PV64D3Y|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 [[https://bricolabs.cc/wiki/guias/control_de_motores#l298n|L298N]].   * Un driver de motores [[https://bricolabs.cc/wiki/guias/control_de_motores#l298n|L298N]].
  
-{{:proyectos:foto_20-5-22_7_56_48.jpg}}+{{:proyectos:foto_20-5-22_7_56_48.jpg|foto_20-5-22_7_56_48.jpg}}
  
 Las conexiones electrónicas son muy simples. 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.+  * 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 [[https://www.adafruit.com/product/815|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 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.   * La alimentación -dos baterías recargables 18650 o similar- va al Arduino y a la entrada de alimentación del driver.
Línea 57: Línea 58:
 La programación va a serguir una serie de pasos paralelos al ensamblaje para hacer varias comprobaciones previas. La programación va a serguir una serie de pasos paralelos al ensamblaje para hacer varias comprobaciones previas.
  
-==== Montaje y comporbación de los servos ====+==== 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. 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.
  
-{{:proyectos:foto_20-5-22_7_57_24.jpg}}+{{:proyectos:foto_20-5-22_7_57_24.jpg|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. 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.
Línea 67: Línea 68:
 Una vez comprobadas las posiciones de centrado, habrá que buscar las necesarias para que el rover pivote sobre sí mismo. Una vez comprobadas las posiciones de centrado, habrá que buscar las necesarias para que el rover pivote sobre sí mismo.
  
-{{:proyectos:movimientos_rover.png|}}+{{:proyectos:movimientos_rover.png}} 
 + 
 +Los números podrían parecerse a estos: 
 +<code> 
 + 
 +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); 
 +
 + 
 +</code>
  
 El programa para hacer estas comprobaciones es [[https://github.com/felixstdp/ExoMars/blob/master/servo_test.ino|servo_test.ino]]. El programa para hacer estas comprobaciones es [[https://github.com/felixstdp/ExoMars/blob/master/servo_test.ino|servo_test.ino]].
  
-==== Montaje y comprobación de la rotación de las ruedas ==== 
  
-Las ruedas de cada lado del rover se conectarán en paralelo cada grupo se conectará a un [[https://bricolabs.cc/wiki/guias/control_de_motores#l298n|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.+==== Montaje comprobación de los motores ====
  
-El programa para probar los motores es [[https://github.com/felixstdp/ExoMars/blob/master/driver_test.ino|driver_test.ino]].+Los motores de las ruedas de cada lado del rover se conectarán en paralelo y cada grupo se conectará a una salida del [[https://bricolabs.cc/wiki/guias/control_de_motores#l298n|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 programaSi 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 [[https://github.com/felixstdp/ExoMars/blob/master/driver_test.ino|driver_test.ino]].
 <code> <code>
 +
 #define ENA 8  // pines de conexión del driver, intercambiar si no funciona como se espera #define ENA 8  // pines de conexión del driver, intercambiar si no funciona como se espera
 #define IN1 9 #define IN1 9
Línea 84: Línea 109:
 #define IN4 12 #define IN4 12
 #define ENB 13 #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) void drive(int vel_L, int vel_R)
Línea 104: Línea 114:
   vel_L=constrain(vel_L,-255,255);   vel_L=constrain(vel_L,-255,255);
   vel_R=constrain(vel_R,-255,255);   vel_R=constrain(vel_R,-255,255);
-    +
   digitalWrite(IN1, (vel_L<=0));   digitalWrite(IN1, (vel_L<=0));
   digitalWrite(IN2, (vel_L>0));   digitalWrite(IN2, (vel_L>0));
   analogWrite(ENA, abs(vel_L));   analogWrite(ENA, abs(vel_L));
-  +
   digitalWrite(IN3, (vel_R>0));   digitalWrite(IN3, (vel_R>0));
   digitalWrite(IN4, (vel_R<=0));   digitalWrite(IN4, (vel_R<=0));
   analogWrite(ENB, abs(vel_R));   analogWrite(ENB, abs(vel_R));
 } }
 +
 </code> </code>
 +
  
 ==== Lectura y comprobación de la emisora ==== ==== 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 [[https://bricolabs.cc/wiki/guias/leer_senales_ppm_rc|aquí]]. Para leer la señal de una emisora de radio control con protocolo PPM vamos a usar lo que ya explicamos [[https://bricolabs.cc/wiki/guias/leer_senales_ppm_rc|aquí]].
- 
 <code> <code>
 +
 int readppm() int readppm()
 { {
   while(pulseIn(PPMpin, HIGH, 10000)<2000){} //espera al canal 0   while(pulseIn(PPMpin, HIGH, 10000)<2000){} //espera al canal 0
-  +
   for(int i=0; i<chnum; i++)   for(int i=0; i<chnum; i++)
   {   {
     chval[i]=pulseIn(PPMpin, HIGH, 10000); //lee los canales secuencialmente     chval[i]=pulseIn(PPMpin, HIGH, 10000); //lee los canales secuencialmente
   }   }
-  +
   return chval[chnum];  // devuelve el resultado   return chval[chnum];  // devuelve el resultado
 } }
 +
 </code> </code>
  
 ==== Prueba completa ==== ==== 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 [[https://github.com/felixstdp/ExoMars/blob/master/exomars_turnigy.ino|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. +Una vez que cada una de las tres partes anteriores -servos, motores y emisora- funcionan correctamente podemos ensamblar el sistema. El programa completo es [[https://github.com/felixstdp/ExoMars/blob/master/exomars_turnigy.ino|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 ===== 
 + 
 +  * [[:user:felixstdp|Félix]] 
 + 
 +===== Enlaces =====
  
 +  * [[https://github.com/felixstdp/ExoMars|Repositorio del proyecto en Github (Félix)]]
  
  
proyectos/exomars.1655108223.txt.gz · Última modificación: 2022/06/13 08:17 por Félix Sánchez-Tembleque