Software completo y esquema detallado (sketch)


Índice:

  1. Conceptos generales sobre drones. 
  2. Material necesario y montaje de los componentes hardware.
  3. Mando RC y receptor. Programación en Arduino (código).
  4. MPU6050 y su programación en Arduino (código).
  5. Batería LiPo (código).
  6. Control de estabilidad y PID.
  7. Motores, ESC y su programación en Arduino (código).
  8. Calibración de hélices y motores (código).
  9. → Software completo y esquema detallado (código).
  10. Probando el Software completo antes de volar.
  11. Como leer variables de Arduino en Matlab (código).
  12. Los mejores drones de 2018 | Comparativa y guía de compra.

En esta entrada vamos a ver como utilizar el software para hacer volar el drone que hemos construido utilizando la plataforma Arduino. Esta es la última entrada de la serie ‘Drone Arduino desde cero, por lo que si has llegado hasta significa que has leído y entendido las demás entradas. Si no es así, recomiendo empezar por la entrada número uno, dedicada a los conceptos generales sobre drones. Cada entrada analiza un componente básico del drone, por lo que es muy importante haber leído todas las entradas para tener claros los conceptos de funcionamiento.

Montaje Hardware del ‘Drone Arduino’

El montaje que necesitamos es el que hemos visto en la entrada correspondiente al montaje de los componentes hardware. Os dejo el esquema como recordatorio, y recordad seguir las recomendación que hemos mencionado en el citado articulo:

drone arduino | esquema hardware completo

Utilización del Software ‘Drone Arduino’

Podéis descargar el software completo en el siguiente enlace, archivo ‘SoftwarePrincipal_v1.01.ino‘.

Ir al archivo

Utilizar el software es muy sencillo. Simplemente cargad el software y seguid los pasos que os dejo en el siguiente vídeo. Podéis modificar el software y añadir todas las funcionalidad de que os ocurran, recordad que en el mundo de la programación vosotros ponéis los limites:

** Los parámetros de los controladores PID funcionan en mi drone, pero es probable que tengáis que ajustarlos vosotros mismos.

** Puede ser que cuando carguéis en software completo los motores giren un poco, o lo intenten, teniendo el throttle al mínimo. Si sucede esto, bajad el valor del parámetro PulsoMinPotencia hasta que dejen de hacerlo, por ejemplo, de 940 a 920. Con el stick de throttle al mínimo los motores han de esta completamente parados.



Continuar con la siguiente entrada:

  1. Conceptos generales sobre drones.
  2. Material necesario y montaje de los componentes hardware.
  3. Mando RC y receptor. Programación en Arduino (código).
  4. MPU6050 y su programación en Arduino (código).
  5. Batería LiPo (código).
  6. Control de estabilidad y PID.
  7. Motores, ESC y su programación en Arduino (código).
  8. Calibración de hélices y motores (código).
  9. Software completo y esquema detallado (código).
  10. → Probando el software completo antes de volar
  11. Como leer variables de Arduino en Matlab (código).
  12. Los mejores drones de 2018 | Comparativa y guía de compra.

40
Comentar

avatar
17 Comment threads
23 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
15 Comment authors
JorgeAngelarduprojectMisaelDavid 24 Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
paco
Guest
paco

Hola, ayer me llegó la batería del dron. Con la batería alimentando al dron con el código completo, cuando bajo el throttle del mándo al mínimo los motores deberían estar parados, pero en teoría hacen pequeños giros, y hacen el intento de girar pero no pueden, producen pequeñas vibraciones y hacen ruidillos,… ¿Qué parámetro tengo que tocar para corregir esto y en que parte del código se encuentra?

arduproject
Admin

Buenas Paco,

Perdón por la tardanza. Utiliza el mismo valor de ‘PulsoMinPotencia’ que usaste para girar los motores por primera vez una vez calibrados. Si no, prueba a reducirlo de 940 a 900, por ejemplo:

const int PulsoMinPotencia = 900;

Puede ser que haya calibrado los motores a 900us en el pulso de throttle mínimo, y que ahora en el código completo el mínimo esté a 940us, por lo que los motores girarán a pesar de tener la palanca de throttle al mínimo.

Ya me dirás si los has solucionado 😉

Un saludo!!

sergio
Guest
sergio

Hola, hace tiempo inicie el mismo proyecto de drone con arduino es muy similar pero con arduino uno, y otro código diferente, solo que lo tengo aparcado por el problema de las vibraciones, el drone vibra mucho y es inestable al volarlo. No se donde puede estar el fallo ya que esta bien calibrado de hélices y motor, creo que puede ser un mal ajuste de PID pero ya he probado a reajustarlo varias veces y nada. ¿Podría usar su código para ver si se resuelve el problema? El problema esta en que no es el mismo arduino ni mando… Read more »

ArduProject
Guest
ArduProject

Buenas Sergio 🙂 Tranquilo, es un problema muy común. Yo mismo estuve a punto de abandonar por esta razón. Pero no te desanimes. Hay luz después del túnel 😉 Las vibraciones de las que yo hablo son imperceptibles para nosotros, no se ven, pero el acelerómetro, que es muy sensible, las capta y alteran las estimaciones de la inclinación. Sobre el tema de vibraciones tengo una entrada, puedes buscarla en el índice -> ‘Calibración de hélices y motores (código)’. Si tus vibraciones están dentro del rango que se muestra ahí, puede que sea tema de ajustar los parámetros del PID.… Read more »

AA.P Ramirez
Guest
AA.P Ramirez

Mil gracias por tu gran trabajo… conseguí montarlo y hacerlo funcionar

ArduProject
Guest
ArduProject

Me alegra saberlo!! a darle caña 🙂

Daniel
Guest
Daniel

Muy buenas! Gran aporte! Voy a probar a realizarlo a ver si consigo hacerlo volar!

ArduProject
Guest
ArduProject

Animo!!! 😉

Daniel
Guest
Daniel

Tengo una duda respecto al mando RC. Tiene que ser ese modelo o se podría utilizar otro distinto? O incluso utilizar un par de simples joysticks conectados a un arduino y con un sensor de radiofrecuencia?

arduproject
Admin

Buenas Daniel,

Efectivamente podrías utilizar cualquier mando, o como bien dices, un par de joysticks y un radiotransmisor tipo nfr24l01… yo de hecho me los compré pensando en un futuro hacerme yo el mando y que fuera bidireccional, es decir, que el drone mandara datos también al mando, como por ejemplo la tensión de batería y visualizarlo en un LCD…

Mucho animo!!

Antonio
Guest
Antonio

Hola. Estoy esperando los componentes para montarlo. En cuanto al receptor, voy a transformar un viejo mando de PS2 con nRF24L01 +antena. En el drone también montaré otro nRF24L01 igual para algún día (intentar) transmitir telemetría. De momento será PWM, pero en un futuro quisiera implementar PPM (32 canales con sólo 2 cables) El chasis lo imprimiré en 3d, aunque será más pequeño (250mm) y motores 1804 2400kv. (si alguien cree que es una mala combinación, que lo diga, please). Utilizaré el imu MPU9255. Si todo funciona y no muere el proyecto en el intento… le añadiré gps, bme 280,… Read more »

arduproject
Admin

Suena genial!!
Yo también tengo pensado introducir mejoras, entre otras cosas, tenía en mente hacer exactamente lo mismo que propones. Eso si, en vez de BMP280, pensaba usar el MS5611, que es mas preciso.
Cunado saque tiempo me pondré a ello.
Un saludo y mucha suerte 😉

alfonso
Guest
alfonso

Buenas tardes, has probado ha ponerle una camara para hacer fpv ? seria muy interesante

arduproject
Admin

Se la voy ha poner en breves…
Un saludo!

José
Guest
José

Hola,

Entonces deberia de adjuntar todos los archivos en uno y cargarlo verdad?

arduproject
Admin

Buenas Jose,

No hace falta. Cundo abres cualquiera de los archivos .ino, verás que se abren todos en diferentes pestañas. Simplemente dale a cargar y se cargarán todos

Un saludo

Fran
Guest
Fran

Hola! Tengo problemas al cargar el programa… C:\Users\l***\Desktop\Programas\*****\drive-download-20190410T211822Z-001\SoftwarePrincipal_v1.01\SoftwarePrincipal_v1.01.ino: In function ‘void setup()’: SoftwarePrincipal_v1.01:64:16: error: ‘init_General’ was not declared in this scope SoftwarePrincipal_v1.01:65:16: error: ‘init_MPU6050’ was not declared in this scope SoftwarePrincipal_v1.01:66:13: error: ‘VbatCheck’ was not declared in this scope SoftwarePrincipal_v1.01:67:17: error: ‘Calib_MandoRC’ was not declared in this scope SoftwarePrincipal_v1.01:68:17: error: ‘Calib_MPU6050’ was not declared in this scope SoftwarePrincipal_v1.01:69:17: error: ‘Calib_Motores’ was not declared in this scope C:\Users\l***c\Desktop\Programas\*****\drive-download-20190410T211822Z-001\SoftwarePrincipal_v1.01\SoftwarePrincipal_v1.01.ino: In function ‘void loop()’: SoftwarePrincipal_v1.01:76:13: error: ‘ProcesMPU’ was not declared in this scope SoftwarePrincipal_v1.01:77:29: error: ‘PID_ang’ was not declared in this scope SoftwarePrincipal_v1.01:78:9: error: ‘PID_w’ was not declared in this scope SoftwarePrincipal_v1.01:79:13: error:… Read more »

arduproject
Admin

Hola Jose,

Tienes que copiarte la carpeta entera DroneNano_v7 en tu PC, abrir cualquiera de los .ino que hay dentro, y darle a cargar. Se subirán todos a la vez. Para compilarlo lo mismo.
Me parece que has generado una carpeta nueva y has metido el archivo principal no??
El archivo LiquidCrystal_I2C.h es una librería, descargatela de google:
https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Un saludo!!

Angel
Guest
Angel

En dónde se encuentra esa carpeta?
Cuando le pongo Ir a Archivo, solo aparecen archivos.ino, pero ninguna carpeta.

Daniel
Guest
Daniel

Muy buenas! Estoy tratando de compilar la solución para subirla a mi Arduino Nano. Como otro compañero ha dicho previamente, he tenido problemas al compilar por primera vez porque no encontraba la libería LiquidCrystal_I2C.h. He descargado la librería del enlace a github que has puesto y lo ha reconocido bien, pero ahora al compilar me da un error en el archivo init_comun diciendo lo siguiente: Arduino:1.8.9 (Windows 10), Tarjeta:”Arduino Nano, ATmega328P” Init_comun:4:7: error: ‘class LiquidCrystal_I2C’ has no member named ‘init’ lcd.init(); ^ exit status 1 ‘class LiquidCrystal_I2C’ has no member named ‘init’ Me he fijado en la librería y en… Read more »

arduproject
Admin

Buenas, que raro. Te he subido la librería que yo utilizo:
https://drive.google.com/drive/folders/1-OOmyK0BshskXw__zBbbLwD8kA_25rQA?usp=sharing

Prueba con esta si te da el mismo problema y me dices.

Suerte