Probando el software completo
Índice:
- Conceptos generales sobre drones
- Material necesario y montaje de los componentes hardware
- Mando RC y receptor. Programación en Arduino
- MPU6050 y su programación en Arduino
- Batería LiPo
- Control de estabilidad y PID
- Motores, ESC y su programación en Arduino
- Calibración de hélices y motores
- Software completo y esquema detallado
- → Probando el software completo antes de volar
- Como leer variables de Arduino en Matlab
- Los mejores drones de 2018 | Comparativa y guía de compra
Introducción
Antes de volar el drone es necesario asegurar que el software completo funciona correctamente. En esta entrada vamos a ver cómo hacer estas comprobaciones de forma rápida y sencilla. Con estas pruebas garantizaremos que el montaje se ha hecho de forma correcta y que el software reacciona de forma lógica. Las variables que vamos a verificar son: la salida del sensor MPU6050, el mando RC y las cuatro salidas a los motores. Todas estas comprobaciones las haremos sin conectar la batería, únicamente alimentando la placa Arduino a través del cable USB.
En primer lugar, conviene recordar el convenio de signos que hemos tomado a la hora de construir y programar el drone. Recordad que la orientación en el frame del sensor MPU6050 define la parte delantera/trasera y la parte izquierda/derecha del drone, y también la numeración de los motores:
Si por la razón que sea vuestro hardware es diferente a este, es decir, si la numeración de los motores respecto a la orientación del sensor MPU6050 no se corresponde con la de la imagen, o si por error habéis conectado los motores a alguna salida digital diferente a la que se muestra, habrá que hacer algunas modificaciones en el código. Concretamente habrá que cambiar los signos de las siguientes ecuaciones:
// Modulador
ESC1_us = RC_Throttle_consigna + PID_W_Pitch_OUT - PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 1
ESC2_us = RC_Throttle_consigna + PID_W_Pitch_OUT + PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 2
ESC3_us = RC_Throttle_consigna - PID_W_Pitch_OUT + PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 3
ESC4_us = RC_Throttle_consigna - PID_W_Pitch_OUT - PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 4
Estas ecuaciones, que he llamado Modulador, son las encargadas de actuar sobre determinados motores en función de inclinación del drone. Si el control de estabilidad ordena acelerar o decelerar alguno de los motores para mantener el drone estable, pero esos motores están conectados donde no deberían (por ejemplo, en el brazo opuesto frame), el drone no podrá ni siquiera despegar, porque el motor que estamos acelerando estará en el lugar equivocado. En vez de contrarrestar la inclinación estaremos ayudando a que esta se acentúe, por lo que todo acabará en una vuelta de campana por parte del drone.
Para asegurarnos de que todo está bien antes de empezar a volar, vamos a realizar 3 sencillas pruebas. Si pasáis de forma satisfactoria la prueba número 3 que se muestra a continuación, el montaje y la integración con el software se ha hecho de forma correcta. Si no, habrá que modificar los algunos signos del código que os acabo de mencionar.
Si bien superando la prueba número 3 la 1 y la 2 quedan superadas de forma indirecta, recomiendo hacer las tres en el orden que se indica.
Comprobaciones
Después de mencionar esto, pasamos directamente a hacer las comprobaciones necesarias. Nos vamos a centrar en las tres comprobaciones mas críticas, sin las cuales no es posible volar el drone.
1.- Comprobación de montaje:
En primer lugar, asegurad que los motores giran en la dirección correcta y que las hélices están bien colocadas en función de la dirección de giro. Es muy importante. Tenéis mas información en en la entrada dedicada a la calibración de ESC y motores.
2.- Validación de sensor MPU6050
El primer lugar vamos a comprobar el funcionamiento del sensor MPU6050. Comprobaremos que la estimación del ángulo de inclinación (angulo_pitch y angulo_Roll) se hace de forma correcta y de que la orientación del sensor en el frame es el adecuado.
Para ello, cargamos el software principal y activamos el modo de visualizaciones:
bool visu = 1;
En este caso queremos visualizar la inclinación del drone:
int visu_select = 3; // 0: mando RC, 1: giro, 2: acc, 3: ang, 4: esc
En primer lugar, aseguraos de que la estimación de la inclinación se hace bien, que con el drone en una superficie plana el valor de las variables angulo_pitch y angulo_roll es de 0º, y que a medida que lo inclinamos la estimación calcula el ángulo de inclinación bien.
Después comprobaremos que los signos en función de a qué lado orientemos el drone son correctos. Si inclinamos el drone hacia adelante, es decir, en dirección a la ‘flecha Y’ del sensor MPU6050, la inclinación en ese eje tiene que ser negativa, mientras que, si lo inclinamos hacia atrás, la inclinación será positiva:
En el eje Roll en cambio, inclinando el drone a la derecha obtenemos un ángulo positivo en ese eje, mientras que si lo inclinamos a la izquierda obtenemos una estimación negativa. Si alguno de estos signos es diferente al aquí mencionado, habrá que modificar los signos en el software, cosa que no es tan evidente de hacer. Significará que no hemos orientado el sensor MPU6050 en el frame de forma adecuada. Mas adelante veremos cómo solucionarlo.
2.- Validación del mando RC
Comprobar el funcionamiento del mando RC es igual de importante. A continuación, vamos a testear las variables wPitchConsigna, wRollConsigna, wYawConsigna y PotenciaFilt.
int visu_select = 0; // 0: mando RC, 1: giro, 2: acc, 3: ang, 4: esc
Moved uno por uno los stick del mando y analizar los resultados por el monitor serie. Mas que en el valor final, fijaos en el signo (si es positivo o negativo). Si alguno de los signos es diferente al mencionado abajo, habrá que modificar la parte del código donde se declaran las variables de ese canal:
- Moviendo stick de Pitch hacia arriba, wPitchConsigna = -30º aprox.
- Moviendo stick de Pitch hacia abajo, wPitchConsigna = +30º aprox.
- Moviendo stick de Roll hacia la derecha, wRollConsigna = +30º aprox.
- Moviendo stick de Roll hacia la izquierda, wRollConsigna = -30º aprox.
- Moviendo stick de Yaw hacia la derecha, wYawConsigna = +30º aprox.
- Moviendo stick de Yaw hacia la izquierda, wYawConsigna = +30 aprox.
Modificar el código para solucionar este problema es tan fácil como invertir estos dos parámetros del canal que esté invertido. De esto:
const int us_max_Pitch_adj = -30; // <-- Si teneis la entrada Pitch invertido sustituid este valor
const int us_min_Pitch_adj = 30; // <-- por este y viceversa
A esto:
const int us_max_Pitch_adj = 30; // <-- Si teneis la entrada Pitch invertido sustituid este valor
const int us_min_Pitch_adj = -30; // <-- por este y viceversa
Las implicaciones de no hacer esta modificación no son tan graves, simplemente, cuando ordenáramos al drone ‘avanzar’, este retrocedería. Nada grave, pero conviene corregirlo.
Un punto muy importante para tener en cuenta en los canales Pitch, Roll y Yaw: hay que asegurar que con los sticks en tu posición central (sin moverlos), las variables RC_Pitch_consigna, RC_Roll_consigna yRC_Yaw_consigna son cero. Exactamente cero. Si no, el drone podría desplazarse hacia un lado sin que nosotros lo ordenáramos, simplemente porque con el stick en su posición central estamos leyendo valores diferentes de cero. Para asegurar que esto se cumple, he añadido estas líneas de código, para hacer forzar a cero la señal siempre que estemos dentro de un rango determinado:
// Si las lecturas son cercanas a 0, las forzamos a 0 para evitar inclinar el drone por error
if (RC_Pitch_consigna < 3 && RC_Pitch_consigna > -3)RC_Pitch_consigna = 0;
if (RC_Roll_consigna < 3 && RC_Roll_consigna > -3)RC_Roll_consigna = 0;
if (RC_Yaw_consigna < 3 && RC_Yaw_consigna > -3)RC_Yaw_consigna = 0;
El correcto ajuste del canal throttle es el mas importante de todos. Para la consigna de Throttle o RC_Throttle_consigna, hay que comprobar que con el stick al mínimo obtenemos valores cercanos a 950us y con el stick al máximo valores cercanos a 1800us (el valor de Throttle máximo está limitado a 1800us para dar margen al control de estabilidad):
Este si es un punto crítico. Hay que asegurar que con el stick al mínimo la señal de Throttle es cercano a 900-1000us. Si tuviéramos este canal invertido, es decir, si con el stick al mínimo obtuviéramos lecturas de 1800us, el drone despegaría a máxima potencia nada más entrar al loop principal, cosa que queremos evitar.
Si tenéis el canal invertido, corregirlo cambiando de orden los parámetros de entrada. De esto:
const float us_max_Throttle_raw = 2004; // <-- Si tenéis la entrada Throttle invertida sustituid este valor
const float us_min_Throttle_raw = 1116; // <-- por este y viceversa
A esto:
const float us_max_Throttle_raw = 1116; // <-- Si tenéis la entrada Throttle invertida sustituid este valor
const float us_min_Throttle_raw = 2004; // <-- por este y viceversa
Por ultimo, el software está preparado para evitar que la señal enviada a los motores con el Stick de throttle al mínimo sea inferior a un valor determinado. La señal mínima que enviamos a los motores viene definida por este valor, que tiene que ser menor al valor con el que hayamos calibrado los motores, si no, los motores girarán o intentarán girar con el stick de throttle al mínimo.
// Si lo motores giran con el stick de Throttle al mínimo, recudir este valor
if (ESC1_us < 1000) ESC1_us = 950;
if (ESC2_us < 1000) ESC2_us = 950;
if (ESC3_us < 1000) ESC3_us = 950;
if (ESC4_us < 1000) ESC4_us = 950;
Si al acabar las pruebas, cuando conectéis la batería, los motores giran un poco o intentan girar con el Stick de throttle al mínimo, reducir ese valor de 950 a 920, por ejemplo. Hay que conseguir que estén completamente parados.
3.- Validación control de estabilidad
Llegamos a la parte más importante. Si la estimación de la inclinación y la lectura del mando se hacen de forma correcta, vamos a comprobar que el control d estabilidad funciona de forma adecuada y de que las señales ESC1_us, ESC2_us, ESC3_us y ESC4_us se ajustan de forma correcta en función de la inclinación del drone. Para ello, es imprescindible haber cableado los motores a las salidas digitales correctamente. Es decir, que la señal ESC1_us actúe sobre el motor 1, la señal ESC2_us sobre el motor 2… De nada servirá hacer estas pruebas si después hemos cableado la señal esc1 al motor número 2 por error.
// Declarar motores
pinMode(pin_motor1, OUTPUT); //Motor 1
pinMode(pin_motor2, OUTPUT); //Motor 2
pinMode(pin_motor3, OUTPUT); //Motor 3
pinMode(pin_motor4, OUTPUT); //Motor 4
Es muy importante que tengáis identificado claramente cada motor y a que salida digital está cableado.
Para la primera fase no es necesario utilizar el mando RC, simplemente vamos a ir inclinando el drone en sus diferentes ángulos con la mano, y vamos a analizar las salidas ESC1_us, ESC2_us, ESC3_us y ESC4_us. No conectaremos la batería en ningún momento. Únicamente alimentaremos la placa Arduino con el cable USB. En este caso queremos visualizar las señales ESC1_us, ESC2_us, ESC3_us y ESC4_us:
int visu_select = 4; // 0: mando RC, 1: giro, 2: acc, 3: ang, 4: esc
Por seguridad, el control de estabilidad se activa solo cuando subimos el throttle por encima de los 1300us, por lo que para visualizar el comportamiento de ESC1_us, ESC2_us, ESC3_us y ESC4_us tendréis que subir la stick por encima de este valor.
El trabajo del control de estabilidad es mantener el drone siempre estable. Si inclinamos el drone hacia adelante, es decir, en dirección a la ‘flecha Y’ del sensor MPU6050, la consigna de los motores 1 y 2 tiene que aumentar, mientras que la de los motores 3 y 4 tiene que reducirse. Si accionáramos por error cualquier otro motor que no fueran estos, estaríamos ayudando a que continuara inclinándose, y perderíamos el control del done. Esta es la prueba más importante de todas:
Esta es la base del control de estabilidad y es una NORMA que hay que cumplir SIEMPRE: el sensor detecta inclinaciones, y el control las contrarresta ajustando las señales ESC1_us, ESC2_us, ESC3_us y ESC4_us.
Si en cambio movemos el drone hacia la ‘derecha’, la consigna de los motores 1 y 4 tiene que aumentar, mientras que la de los motores 2 y 3 a de reducirse:
Comprobad esto en todos los ejes y en todas direcciones. Como veis, es la fase final del control de estabilidad. Estamos comprobando que las señales ESC1_us, ESC2_us, ESC3_us y ESC4_us son ajustadas de forma correcta en función de la inclinación del drone.
En caso de no haber fijado la posición del sensor MPU6050 de forma correcta, o de haber empezado con el blog con el drone ya montado, en definitiva, si no hemos superado las pruebas que acabamos de hacer en este punto 3, será necesario modificar los signos de esas ecuaciones hasta hacer que la pruebas que hemos hecho más arriba se cumplan. Esto es imprescindible. Independientemente de como hayamos montado el hardware, siempre tendremos que comprobar esto y asegurarnos de que funciona correctamente. Las señales ESC1_us, ESC2_us, ESC3_us y ESC4_us siempre tienen que ajustarse de forma correcta en función de la inclinación del drone.
Modificar esta parte del software es bastante sencillo, pero hay que saber lo que se está haciendo. Si inclinando el drone en el eje Pitch hemos visto que se aceleran los motores que no deberían, habrá que modificar el signo del modular PID_W_Pitch_OUT. Si hemos visto que sucede en el eje Roll, los signos dl parámetro PID_W_Roll_OUT. Así hasta conseguir cumplir la NORMA del punto 3.
Si por ejemplo es el eje Pitch el que está dando problemas, invertimos los signos correspondientes a ese eje y volvemos a probar:
ESC1_us = RC_Throttle_consigna + PID_W_Pitch_OUT - PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 1
ESC2_us = RC_Throttle_consigna + PID_W_Pitch_OUT + PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 2
ESC3_us = RC_Throttle_consigna - PID_W_Pitch_OUT + PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 3
ESC4_us = RC_Throttle_consigna - PID_W_Pitch_OUT - PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 4
ESC1_us = RC_Throttle_consigna - PID_W_Pitch_OUT - PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 1
ESC2_us = RC_Throttle_consigna - PID_W_Pitch_OUT + PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 2
ESC3_us = RC_Throttle_consigna + PID_W_Pitch_OUT + PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 3
ESC4_us = RC_Throttle_consigna + PID_W_Pitch_OUT - PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 4
Realmente, la posición del sensor MPU6050 en el frame es indiferentes, siempre que consigamos que se cumplan las pruebas que acabamos de hacer en este punto 3. En este blog, en la entrada dedicada al sensor MPU6050, insistíamos en orientar el sensor de una forma determinada. Con esto conseguimos hacer más fácil la utilización del software principal y no tener que modificarlo. Simplemente, hemos fijado la posición del sensor en una orientación determinada para poder utilizar las ecuaciones que se incluyen en el Modulador del software principal sin modificarlas.
La misma lógica la vamos a utilizar para comprobar que el drone actúa según lo esperado ante las ordenes recibidas desde el mando RC. Para ello vamos a dejar el drone posado sobre una superficie plana y vamos a coger el mando RC.
Si movemos el stick del canal Pitch hacia arriba, estamos ordenando al drone avanzar (hacia adelante). Para ello, según el convenio de signos que hemos escogido, la consigna de los motores 3 y 4 tiene que aumentar, mientras que la de los motores 1 y 2 tiene que reducirse. De esta forma, el done se inclinará en el eje Pitch y avanzará en esa dirección:
Lo mismo sucede con el eje Roll. Si movemos el stick del canal Roll hacia la derecha, estamos ordenando al drone desplazarse en esa dirección. Para ello, según el convenio de signos que hemos escogido, la consigna de los motores 2 y 3 tiene que aumentar, mientras que la de los motores 1 y 4 tiene que reducirse. De esta forma, el done se inclinará en esa dirección en el eje Roll y avanzará en esa dirección:
Comprobad esto en todos los ejes y en todas direcciones.
El eje Yaw es más es algo mas complicado de comprender. Controlando el eje Yaw el drone no se desplaza, simplemente gira sobre su eje central. Por ello, recomiendo en un principio no hacer comprobaciones. Simplemente volad el drone. Si este empieza a rotar sobre su propio eje, los signos del eje Yaw estarán invertidos. Solucionarlo es muy sencillo. Simplemente tenéis que modificar los signos en el modulador. De esto:
ESC1_us = RC_Throttle_consigna + PID_W_Pitch_OUT - PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 1
ESC2_us = RC_Throttle_consigna + PID_W_Pitch_OUT + PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 2
ESC3_us = RC_Throttle_consigna - PID_W_Pitch_OUT + PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 3
ESC4_us = RC_Throttle_consigna - PID_W_Pitch_OUT - PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 4
A esto:
ESC1_us = RC_Throttle_consigna + PID_W_Pitch_OUT - PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 1
ESC2_us = RC_Throttle_consigna + PID_W_Pitch_OUT + PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 2
ESC3_us = RC_Throttle_consigna - PID_W_Pitch_OUT + PID_W_Roll_OUT + PID_W_Yaw_OUT; // Motor 3
ESC4_us = RC_Throttle_consigna - PID_W_Pitch_OUT - PID_W_Roll_OUT - PID_W_Yaw_OUT; // Motor 4
3.- Otras comprobaciones
El LED 13, que indica que la ejecución del código se hace dentro de los tiempos requeridos, nunca debería encenderse. Si se enciende, significa que el tiempo que necesita la placa Arduino para ejecutar el código es mayor que el tiempo de ciclo que hemos puesto (uCliclo). Si no habéis modificado el tiempo de ciclo ni añadido nada al código, esto no debería pasar nunca, el LED 13 estará siempre apagado.
Eso es todo… 🙂
Recomiendo dedicar algo de tiempo al tema de las comprobaciones y asegurar que todo funciona como es debido. A nadie le gusta estrellar el drone en la primera prueba de vuelo. Además de los puntos que hemos mencionado, se pueden comprobar otra serie de elementos menos críticos, como la lectura de tensión de la batería.
Un tema por el que muchos me preguntáis es el de ajustar los controladores PID. Desafortunadamente, es necesario hacer el ajuste a prueba y error mientras volamos. Para ajustar los valores de los controladores en base a simulación sería necesario conocer el modelo matemático completo del drone, cosa que es extremadamente complejo y que se escapa completamente del objetivo de este blog. Por lo que no queda otra que justar los parámetros on-line.
No hay una forma fija de configurar los parámetros de los PID. Estos dependen del tamaño, del peso, de la construcción… que hayamos llevado a cabo. Cada drone necesita unos parámetros específicos para volar de forma suave. Como consejo, recomendaría dividir entre dos los valores que utilizo yo e ir incrementando su valor poco a poco a medida que vamos haciendo pruebas de vuelo, hasta alcanzar el punto óptimo.
Los parámetros que tenéis que modificar son los siguientes (en el ejemplo solo se muestran los parámetros de uno de los PID pero hay que modificar todos):
float Pitch_W_Kp = 1.9, Pitch_W_Ki = 0.07, Pitch_W_Kd = 12;
Por último, cuando terminéis con las pruebas, recordad poner a cero la opción de visualizaciones:
bool visu = 0;
Vídeo de puesta en marcha:
Índice:
- Conceptos generales sobre drones
- Material necesario y montaje de los componentes hardware
- Mando RC y receptor. Programación en Arduino
- MPU6050 y su programación en Arduino
- Batería LiPo
- Control de estabilidad y PID
- Motores, ESC y su programación en Arduino
- Calibración de hélices y motores
- Software completo y esquema detallado
- Probando el software completo antes de volar
- → Como leer variables de Arduino en Matlab
🛫¡¡A VOLAR!!🛬
Espero que os haya gustado esta serie dedicada al montaje y programación de un drone utilizando Arduino. Espero que sepáis apreciar el esfuerzo que ha supuesto llevar este blog a cabo, ya que todo el contenido, incluyendo código e imágenes han sido generadas por mí.
¡A VOLAR AMIGOS!
¡NUEVO curso de diseño PCB ! Controlador de vuelo para drones 100% Arduino
NUEVO curso de diseño de tarjetas electrónicas (PCB) para principiantes, donde aprendemos a diseñar PCB complejos que cubran las necesidades de vuestros proyectos DIY. Para llegar a este objetivo, vamos a diseñar desde cero un PCB controlador de vuelo para drones basado 100% en Arduino, donde como punto final enviaremos el PCB a fabricar para recibirlo en casa completamente montado y listo para ser programado.
Hola! Ya tengo el dron construido y demás pero no echa a volar.. cuando le doy al stick de la Izquierda al máximo hacia arriba el dron se para y los esc emiten unos pitidos..
Buenas Carlos, has hecho todas las comprobaciones de esta entrada? creo que tu problema puede venir de los ESC, que no has configurado bien los ms con el stick hacia un lado.
Sigues con el problema?
Un saludo!
hola buenas! si los he comprobado y los he calibrado ydemas y si, funcionan menos uno el cual, despues de dos dias buscando la averia, he decidido sustituir el esc y parece que solucionado! solo que ahora estoy viendo a ver porque se me va para el lado! pero vaya, que ya lo tengo casi!
Buen día , disculpa arme un drone siguiendo tus tutoriales pero he modificado el código de lectura para refrescar los valores por Bluetooth en lugar de un mando ex.
Cuando enciendo el el drone voy acelerando en trouble para que los motores agarren fuerza …cuando llegó. 1320 este comienza a alzar vuelo lo hace de manera vertical pero sube demasiado alto y como dependo del bluethoot no lo dejo pues perderé la señal si va mas de 5m de mi.
Pensaba que trouble =altura y que para un trouble exacto el drone se mantendría a cierta altura.
Buenas Jhonle. mmmmm si y no. En condiciones estables throttle debería equivaler a una altitud maso menos constante, peeeero en la realidad el control de estabilidad acelera/desacelera los motores continuamente para mantener el drone horizontal. Esto hace que haya que controlar la altitud de forma manual ajustando el throttle
Solución: implementar un control de altitud basado en MS5611:
https://arduproject.es/ms5611-modulo-presion-atmosferica-arduino/
Te ves capaz de hacerlo?? 😉
Un saludo!!
Hola! Como se sube el programa principal a la tarjeta nano ??
Ayúdame por favor
Buenas Alexis, simplemente conecta la placa Arduino a tu PC, y en el IDE verifica que tienes el puerto COM y la placa bien seleccionados. Finalmente pulsa el botón subir.
Suerte!
Hola buenas, me gustaría saber por qué en el momento de visualizar las señales esc1, esc2, esc3, esc4, pones a 0(cero) las constantes integrales de los pid de los lazos de velocidad y de inclinación. Es decir:
if (VisuSelect == 4) {
Ki_pitch_w = 0;
Ki_roll_w = 0;
Ki_yaw_w = 0;
Ki_pitch_ang = 0;
Ki_roll_ang = 0;
}
Saludos 🙂
Buenas Antony 🙂
Lo hago para ver las señales esc1, esc2, esc3 y esc4 mas claro al movel el drone, ya que la parte integral crece muy rápido al mover el drone con la mano, y no queda tan claro si las señales se comportan como deberían.
Al hacer la parte integral = 0, me quedo solo con la parte proporcional y se ve mas claro hacia donde van las señales.
Un saludo
Muchas gracias crack 🙂 y buen trabajo!.
🙂
Hola muy buenas tardes , mis felicitaciones por tu buen trabajo , quisera hacerle una consulta, como hago para pasar del modo acro al estable, cuando cargue el codigo me aparece el acro. y quiero pasarle al estable
Buenas Gabriel,
Para activar el modo estable:
int mEstable = 1; // Modo estable
int mAcro = 0; // Modo acrobático
Un saludo! 😉
Hola buenas tardes. Quiero agradecerte infinitamente todo el trabajo que te ha llevado el hacer esta pagina. Es una gran satisfacción realizar un proyecto que se tiene en mente y en el corazón y gracias a esta pagina lo he logrado. Como bien dices en los comentarios iniciales, si quieres puedes y no te detengas. Gracias a ello, solo a complete la lista de materiales necesarios tal y como tu lo has sugerido y en unos días de trabajo bien dedicado, lo he logrado armar con muy pocos percances. Soy un técnico profesional en electrónica por lo que se me facilito el armado, aunque de Arduino no conocía nada, ahora es mi pasatiempo favorito y apasionante. Agradezco infinitamente el aporte de tus conocimientos y la facilidad otorgada para este tu proyecto. Ahora veré que mas puedo complementar para acondicionarlo mejor como lo han sugerido algunos de los participantes en los comentarios. muy agradecido.
por favor pudierars agregar el lin del codigo completo gracias no lo encuentro
HABIA UN BOTON DE DESCARGAR CODIGO YA NO LO ENCUENTRO POR FAVOR PODRIAS PONERLO GRACIAS NO LO ENCUENTRO GRACIAS
Buenas Leopoldo,
Lo tienes en el apartado ‘Software completo y esquema detallado (código).’ 😉
buenas noches, maravilloso tu proyecto, solamente me salta una duda como es el tema de la alimentación del arduino nano en los esquemas veo que le entran los 11.1 voltios, no trabaja con 5 voltios?, de donde se tomarían?
Buenas Enrique,
El Arduino trabaja con 5V pero tiene un regulador interno que permite alimentarlo a través del pin Vin a tensiones superior. Este regulador reduce la tensión a los 5V que necesita el chip.
Un saludo!
hola, como podria añadirle una camara al drone?
Hola, muchas gracias por tu proyecto. Armé el dron, descargué el código y lo subi a arduino nano pero cuando quiero iniciar la comprobación no se por qué no me aparece el primer gráfico para analizar pitch y roll. Desde ya muchas gracias.
Fantástico trabajo, muchísimas gracias por compartir.
Conseguí armar tl dron y el mando con otro arduino nano, y el primer vuelo, después de horas y horas probando y ajustando, fue bastante bien.
Ahora quiero implementar el barómetro MS5611 y tengo estas dudas:
– que es el número 723800.3??
– he intentado calcular la ecuación de la resolución a 0,012mb y honestamente no me da el resultado de 8,8cm
Y por último una vez subido su código, magnífico trabajo, la altura se va incrementado.
Muchas gracias nuevamente por compartir su magnífico trabajo. El mejor que he visto
Fantástico trabajo!
Empecé a seguir los pasos después de regalarme para reyes todo el material. Lo monté con algunas pequeñas modificaciones y no lo probé hasta hace unos días.
Al principio la cosa era muy inestable, pero supongo que se debía a la poca práctica con el mando, que es super sensible. Ahora ya volamos, para adelante, atrás, a los lados, giro sobre sí mismo. Sólo nos queda que al levantarse lo haga sobre la vertical, supongo que con los ajustes del mando será suficiente.
Antes de volar más o menos estable, hemos roto unas cuantas hélices… al final he comprado unos protectores que van muy bien, porqué siempre hay alguna que otra caída no contemplada o un mal aterrizaje.
Solo me queda la duda de las constantes k, de momento mantengo las que tenías tu, pero no sé porqué son estos valores.
En fin, muchas gracias por el post.
Buenas Joan. Los valores Kp, Ki y Kd hay que ajustarlos en vuelo, es la forma más fácil de hacerlo. Se podría hacer vía simulación, pero para ello sería necesario modelar la planta o modelo matemático del drone, cosa muy compleja.
Un saludo
Hola. Como estas? Estuve viendo en github y no está el código completo. Por alguna razón? Me lo podrias mandar por email a la carpeta completa? Por favor. Le dejo mi email.
Sebastianhectormanassero@gmail.com
Muchas gracias
Buenas, ya está subido 😉
Muy buena Guía dsiculpe al cargar el código SOFTWARE PRINCIPAL el sistema no responde con el receptor no se conecta con el control.
Buenas!
Ya he acabado el dron, he hecho las comprobaciones finales i todo OK. Pero tengo un problema. No he usado el mismo mando que tú, he usado un Radiolink T8FB, el qual en teoria es apto para drones, y lo tengo configurada para funcionar mediante PWM y no PPM. El caso esque el mando se comunica correctamente, és decir, puede visualizar los cambios por canal serial monitor correctamente, però los motores no se mueven en el roll, el yaw y el pitch, solo cuando acciono el stick relacionado al throttle.
¿Tienes idea de que puede estar ocurriendo?
Muchas gracias 🙂
buenas, que tal?
estoy teniendo un problema, el giroscopio o el arduino tienen una respuesta lenta ante la inclinacion. vi tus videos sobre el mpu, pero no logre solucionarlo.
me echarias una mano, pofas?