Arduino Micro Quadcopter: 6 étapes

Arduino Micro Quadcopter: 6 étapes

Table des matières:

Anonim

(Projet EN COURS, besoin actuellement de souder le circuit)

Il s'agit d'un projet de micro-quadricoptère imprimé en 3D basé sur Arduino pour les moteurs CC de 8,5 mm de diamètre. Toutefois, si vous avez de l'expérience (ou avez juste une heure de temps libre), vous pouvez adapter le design à des moteurs de tailles différentes.

Je le fais pendant mes temps libres alors que j'étudiais à l'université. Je pense donc que cela devrait prendre un certain temps (les examens approchent!).

J'ai décidé de contrôler le quadricoptère via Bluetooth à l'aide d'un téléphone / d'une tablette Android. À l'avenir, je pourrai peut-être modifier un peu la conception pour la contrôler via Wifi ou une communication radio. Je vais également écrire et publier une application Android pour le contrôle via Bluetooth.

Alors commençons @!

P.S. Le robot est dédié à M.O.N.T.E. (Eradicateur mobile de neutralisation et de terminaison omnidirectionnelle) robot tueur de La théorie du Big Bang: D

Provisions:

Étape 1: cadre et plastique

Je voulais que le cadre soit léger et solide, j'ai donc décidé d'utiliser une imprimante 3D. Cela m'a aussi fait gagner beaucoup de temps. Quelle imprimante utiliser, je vous laisse comme je ne possède pas d’imprimante 3D et utilise celle qui est à l’Université. Le poids total de la conception était d'environ 10 à 15 g (l'université n'avait pas d'échelle …) mais cela varie en fonction de l'imprimante et du plastique.

Pour la conception, j'ai utilisé un outil de conception Web gratuit, TinkerCAD, qui est probablement le meilleur outil de conception pour les débutants ou pour les petits projets.

J'ai ajouté les fichiers ici pour que vous puissiez aller les imprimer tout de suite. Toutefois, si vous souhaitez examiner le design sous tous les angles, visitez Thingiverse. De même, vous pouvez visiter TinkerCAD pour modifier ma conception précédente comme vous le souhaitez (modifier le nom du quadricoptère?).

Pour un seul quadricoptère, vous devez imprimer un Quadcopter_bottom_3.stl et un Quadcopter_top_2.stl. J'ai essayé d'imprimer tout moi-même et j'ai remarqué que l'imprimante que j'avais déjà imprimée n'imprimait pas très bien les vis (je ne pouvais pas insérer les vis dans les trous), je ne suggère donc même pas de les imprimer aussi … Vous pouvez bien sûr essayer de le faire qu'ainsi j'ajoute aussi Quadcopter_screw_2.stl si vous êtes curieux … J'ai redessiné la partie inférieure afin que vous puissiez coller dans la partie supérieure et ensuite vous pouvez simplement utiliser des liens en plastique pour tout tenir ensemble.

Étape 2: Le reste des pièces + Prix

Microcontrôleur

Nous avons besoin d’une petite carte à puce / microcontrôleur pour ce micro quadricoptère. Une option peu coûteuse consiste à utiliser Arduino Nano, qui coûte environ 1 à 2 livres sterling en Chine. De plus, pour réduire le poids, des alternatives pourraient être la puce Arduino Beetle ou Arduino USB, qui est une copie chinoise de la Beetle originale (moins chère, fonctionne (testé) de la même manière et les connecteurs sont plus faciles à souder). Vous pouvez également suivre ce tutoriel pour programmer des puces nues de ATMEL ATmega328 / 168, que vous pouvez obtenir gratuitement sur le site Web de ATMEL (si vous êtes étudiant, allez à Atmel -> échantillons -> commandez un échantillon) ou à eBay autrement. En ce qui concerne le prototypage, j'utiliserai Arduino Nano car il est plus facile à gérer. Je pense que la prochaine étape consisterait à utiliser une puce Atmel en métal nu ou à regarder dans Arduino Beetle BLE car vous pouvez également les trouver à moindre coût dans certains endroits, mais ils n’ont qu’une sortie 2xPWM; il est donc possible qu’il faille utiliser un registre à décalage. Le poids de chaque puce varie en fonction du microcontrôleur: Arduino Micro ~ 13g, Arduino Beetle ~ 5g, puce nue + cristal ~ 4-5g (?).

Moteurs

J'ai moi-même utilisé un peu plus cher des moteurs d'ici. Ils sont censés être beaucoup plus rapides que les moteurs Hubsan X4 d'origine. Je prévois d’utiliser du matériel sur mesure et j’ai donc besoin de moteurs rapides pour lever le poids. Si je devais acheter un nouveau jeu de moteurs maintenant, je les achèterais probablement dans le même magasin, mais ceux qui disent vitesse: fou. Il en existe aussi quelques types, alors choisissez ceux avec les meilleures critiques. La différence est assez importante avec la vitesse: insensé, car ils peuvent atteindre un maximum de 3,2 A au lieu de 2,75 A avec la vitesse: rapide (il est toujours dit que la poussée est de 40 g / moteur pour les deux types de moteur). Pour ceux qui n'ont pas les moyens d'acheter un moteur coûteux, il existe toujours une alternative à eBay ou même moins chère en provenance de Chine. Bien sûr, ils ne volent pas aussi vite, du moins, je suppose, à partir des courbes de performances. Je n'ai pas essayé moi-même, mais le courant maximal est de 1,85 A et la poussée est de 34g / moteur, ce qui est inférieur à celui des moteurs précédents. (Poids total ~ 20g)

Bluetooth

Pour le projet, j'ai utilisé le module Bluetooth HC-06 habituel. Cela ne fonctionne que comme esclave, ce dont nous avons besoin si nous voulons le contrôler à l'aide d'un téléphone intelligent. Comme vous pouvez le voir sur la photo ajoutée, j'ai plié les connecteurs puis les ai raccourcis. Je pourrais envisager une option permettant d'ajouter un module Bluetooth 4.0 ultérieurement, avec des connexions opposées, pour que vous n'ayez pas à le faire. (Poids total ~ 5g)

MPU

Pour le projet, j'ai utilisé le MPU6050 que j'avais déjà acheté il y a longtemps. Il possède un gyroscope à 3 axes et un accéléromètre à 3 axes uniquement. Dans les versions ultérieures, je pourrais utiliser un MPU plus coûteux, qui aurait un baromètre et un magnétomètre. (Poids total ~ 1,4 g)

Piles

Pour les moteurs et l’électronique, vous aurez besoin de deux batteries LiPo 1S 3,7V. L'un sert à alimenter les moteurs et l'autre uniquement les composants électroniques. Trouver une batterie pour l'électronique est facile. Choisissez simplement la plus petite batterie disponible sur le marché (par exemple, 3,7 V 100 mAh (3 g)). Vous pouvez également les acheter chez HobbyKing à peu de frais.

Obtenir une batterie pour les moteurs est plus délicat. Lors de l’achat, il convient de noter quelques points importants: la capacité (mAh), le débit maximum autorisé (C) et le débit moyen (C). Plus la capacité est grande, plus le quadricoptère fonctionnera longtemps avec une seule charge et plus le taux de décharge sera élevé, plus il sera capable de fournir de la puissance aux moteurs (courants plus importants pour des temps de pointe constants et constants). Il existe souvent une règle empirique voulant que la multiplication du taux de décharge et de la capacité donne le courant que les batteries peuvent fournir. Par exemple, vous avez une batterie avec 500 mAh et 10 C de décharge moyenne / constante. 500 mAh * 10 C = 5 A. Ainsi, en moyenne, une telle batterie peut fournir 5 A. Ensuite, ajoutez environ 20% de marge de sécurité et vous devriez être prêt à partir. Eh bien, cela pourrait fonctionner dans certains cas, mais nous avons des moteurs extrêmement puissants, donc le taux de décharge DOIT être beaucoup plus élevé que cela. J'ai déjà essayé Turnigy nano-tech 650mAh 1S 15c (13g) avec absolument pas de chance. Ils ont seulement réussi à alimenter complètement un seul moteur et n'ont même pas allumé un peu 4 moteurs, ce qui signifiait que le taux de décharge était tout simplement trop faible (la capacité était sûrement suffisante). J'ai ensuite examiné les piles Turnigy nano-tech 1s 260mAh 35-70C (14g). Ils ont réussi à alimenter les 4 moteurs, mais au moment où je les ai achetés, ils coûtaient la moitié du prix que vous voyez ici. Je suggère de rechercher dans HobbyKing des batteries similaires ou alternatives, par exemple. Turnigy nano-tech 300mah 1S 45 ~ 90C (9g) ou même Turnigy Graphene 600mAh 1S 65C (15g) qui semblent être très prometteurs. Si vous avez quelques dollars de plus, achetez des piles au graphène car elles sont plus légères que les piles alternatives de même capacité et offrent des taux de décharge beaucoup plus élevés (au moins sur le papier). Je ne les ai pas essayées moi-même, mais il serait très intéressant de voir comment elles se comparent dans la réalité, car je pense que le taux de décharge de 35 ° C actuellement fourni est également un peu faible.

Calculons combien de temps les piles dureront. Disons qu'en dehors des moteurs, le reste de l'électronique utilise environ 100 mA de courant en permanence. Courant total = 2,75 * 4 + 0,1 = 11,1 A = 11,1 * 1000 = 11 100 mAh. Les batteries que j'ai achetées ont une capacité de 260mAh, donc Time (min) = 260 * 60/11100 = 1,4 min. Ne semble pas du tout le faire? J'ai testé lorsque j'ai attaché le quadricoptère avec les fils au sol et il semble que les chiffres sont raisonnables, je ne pouvais vraiment pas tenir le quadricoptère dans les airs même 2min. Eh bien, pour des taux de vol plus longs, vous devrez soit ajouter des batteries plus grosses, utiliser des moteurs Hubsan X4 moins chers, ou réduire le poids de l'ensemble. (Poids total ~ 16 g)

Connecteurs de moteur

Les moteurs utilisent généralement des connecteurs de type mini JST. Il est donc nécessaire d’en obtenir (4 pièces) auprès de Farnell ou d’ebay pour pouvoir connecter les moteurs à l’ensemble du circuit. Assurez-vous d’acheter les connecteurs comme ceux de l’image. Il en existe de très similaires (par exemple, micro JST), mais ils sont différents.

Connecteurs de batterie

Beaucoup de batteries d'ebay et de HobbyKing utilisent des connecteurs micro JST. Le chargeur que j'ai utilisé (donné dans les sections suivantes) a un connecteur JST légèrement différent (je sais, un peu déroutant car tous portent le même nom), alors j'ai décidé de commander certains d'entre eux sur ebay et de les souder sur chaque batterie. Cela a également permis de connecter plus tard la batterie au circuit imprimé.

Les hélices

Beaucoup d'entre vous voudront peut-être utiliser les hélices Hubsan X4 et vous pourrez le faire si vous le souhaitez. Cependant, j'utiliserai les accessoires Walkera LadyBird. Ils sont un peu chers si vous les achetez au Royaume-Uni (environ 5 fois plus par rapport aux accessoires originaux de Hubsan X4), mais très bon marché en provenance de Chine. Si vous ne disposez pas encore d'accessoires, je vous recommanderais de les utiliser non plus - si je ne me trompe pas, je lis quelque part qu'ils fournissent plus de poussée, donnant ainsi à notre petite bête plus de vitesse (après tout, Walkera LadyBird est réputé pour être le meilleur micro quadricoptère à ce jour! Je me demande qui a testé cela mais permet de leur faire confiance pour le moment …) (Quelques grammes au total ~ 3-5g)

Transistors

Nous avons besoin de 4x transistors MOSFET et en choisir un pourrait être délicat. Premièrement, ils doivent résister à la puissance et au courant utilisés par les moteurs et deuxièmement, la tension de seuil doit être assez basse, sinon Arduino ne pourra pas les activer complètement (dans le cas d'un MOSFET de type N). Dans mon cas, le courant maximal est de 2,75 A avec une tension de 3,7 V. Cela signifie que j’ai besoin d’un MOSFET, qui résisterait au moins à environ 4 - 5 A au cas où (chauffera également moins). J'en ai commandé chez Farnell (transistor MOSFET, canal N, 6 A, 20 V), mais vous êtes libre d'examiner des alternatives telles que le transistor MOSFET, canal N, 8 A, 20 V (elles sont en fait identiques aux précédentes mais avoir des pattes supplémentaires à souder à la terre pour fonctionner en tant que dissipateur de chaleur. Ce n'est pas nécessaire, les précédentes ne chauffant pas du tout). Les deux avaient des tensions de seuil de 600 mV, ce qui est bien. Si vous devez rechercher des alternatives, essayez de ne pas dépasser 1V, mais si vous souhaitez utiliser le circuit imprimé fourni, assurez-vous que le dimensionnement est identique, et que les transistors donnés ici ont déjà une diode de roue libre à l'intérieur. permettra d'économiser de l'espace sur le PCB. (Poids total <1g).

Résistances

Pour le projet, j'avais besoin de résistances de 6x10 kOhm et de 2x56 kOhm (à décider, mais ce n'est pas nécessaire jusqu'à la fin), que vous pouvez trouver dans n'importe quel magasin d'électronique. (Poids total <1g)

Condensateurs

Un seul condensateur électrolytique sera utilisé pour lisser la tension de la batterie utilisée pour les moteurs de taille 47uF, 50V. Il peut être acheté dans n'importe quel magasin d'électronique. (Poids total <1g)

Chargeur

Vous avez peut-être déjà de bons chargeurs, mais dans le cas contraire, vous pouvez toujours obtenir quelque chose comme ça. Il utilise des connecteurs de type JST, vous devrez donc obtenir les connecteurs mentionnés précédemment. Alternativement, vous pourriez obtenir un module de chargeur à base de puce comme celui-ci. Cela pourrait être utile dans des projets ultérieurs car la puce pourrait alors faire partie du circuit.

Prix

Vous êtes probablement nombreux à vouloir connaître le prix du truc. Eh bien, calculons simplement cela en utilisant des calculs approximatifs car le prix dépendra du fournisseur:

Moteurs coûteux:

2 £ (Arduino) + 3 £ (MPU6050) + 20 £ (Moteurs) + 3 £ (Batterie moteur) + 2 £ (Batterie électronique) + 2 £ (Hélices) + 2 £ (MOSFET) + 5 £ (HC-06) + 2 £ (Le reste de l'électronique + plastique) + 1 £ (connecteurs) + 3 £ (chargeur) = £45 (en ajoutant uniquement les composants utilisés, lorsqu'ils sont achetés en multiples)

£45 - £15 = £30

Le prix global n’est pas si élevé et si vous avez les connecteurs et le chargeur, il diminuera considérablement! En utilisant une implémentation très rapide du moteur, j'ai réussi à entrer dans la fourchette de prix de 50 £ si toutes les pièces devaient être achetées.

Étape 3: Calculs de poids

Moteurs coûteux:

Pour que notre quadricoptère vole bien, il existe une règle générale qui veut que 50% de la poussée maximale des moteurs soit égale au poids du quadricoptère lui-même. Cela signifie donc que le quadricoptère sera à la hauteur constante lorsqu'il donnera 50% de sa puissance totale. Les moteurs que j'ai achetés ont 40g / moteur de poussée. Au total, cela fait 160g. 50% de cela est 80g. Ajoutons maintenant toute l'électronique et le cadre:

15g (cadre) + 20g (moteurs) + 23g (batterie) + 5g (module Bluetooth) + 5g (microcontrôleur) + 1,4g (MPU) + 2g (transistors) + 1g (diodes) + 1g (résistances) = 73,4g, c'est plus ou moins ce dont nous avons besoin! Bien sûr, il y aura un poids supplémentaire dû aux fils, etc., mais ils sont petits et au plus, ils vont augmenter le poids jusqu'à 75 g, ce qui est toujours 6% plus léger que ce que nous pouvions nous permettre.

Moteurs pas chers:

La poussée totale des moteurs est de 4 * 34g / moteur = 136g. 50% de cela est 68g. L'électronique totale sera plus ou moins la même chose, seule la batterie sera 10g plus légère, soit environ 65g au total avec tout, ce qui est encore plus léger que 50% de la poussée! En fait, il ne volera pas aussi bien qu'avec des moteurs plus rapides, mais bon, vous utilisez au moins 4 fois moins de moteurs!

Conclusion:

Le quadricoptère devrait voler! Avec des moteurs plus coûteux, il volera mieux / plus vite, mais les deux quadricoptères devraient quand même voler.

Étape 4: Schéma de circuit

J'ai quitté le circuit précédent en utilisant Arduino Beetle mais j'ai aussi ajouté des connexions Arduino nano. La plupart des choses devraient être les mêmes, juste en utilisant Beetle, j'ai trouvé plusieurs problèmes. Tout d'abord, il n'y a pas assez de broches dédiées. Ainsi, par exemple, certaines broches PWM sont utilisées en tant que I2C, il est donc difficile de décider laquelle des connexions doit être fixée à l'aide d'un code et laquelle à l'aide des broches fournies. De plus, je n'avais qu'une option: fabriquer un circuit imprimé simple face, il était donc difficile d'établir des connexions pour la carte Beetle. J'ai fini par utiliser Arduino Nano.

Arduino nano propose une solution à deux batteries, contrairement à Beetle. Ceci est très important car Bluetooth ne fonctionnera pas avec une seule batterie. De plus, si vous utilisez un panneau Beetle, utilisez deux batteries, un autre condensateur> 10uF doit être ajouté entre les broches positive et négative.

Au bas du circuit nano Arduino, j’ai ajouté les connexions alternatives pour le transistor qui était utilisé pour le circuit imprimé au lieu de celui qui établit les connexions.

Étape 5: PCB

Il est beaucoup plus facile de souder tous les composants sur un circuit imprimé déjà préparé. Malheureusement, il n’est pas toujours possible d’avoir accès à une machine. Nous en avions un à l’Université, j’ai donc conçu un circuit imprimé en utilisant Cible 3001! Logiciel. Pour ouvrir le fichier *.T3001, vous devez télécharger le logiciel Target 3001, qui n'est malheureusement compatible qu'avec Windows. Je pourrais exporter le projet vers Eagle plus tard. Ajout de Target3001,.xps,.tif et.src (exportation vers Eagle) pour ceux qui ont l’intention de fabriquer un circuit imprimé chez eux.

Le résultat imprimé et soudé ressemble à celui de l'image fournie. J'ai ajouté des cercles rouges montrant les transistors soudés, des cercles jaunes montrant les connecteurs JST pour les moteurs, un cercle vert indiquant les connecteurs de batterie, alimentant le moteur UNIQUEMENT et un cercle bleu indiquant les connecteurs de batterie, alimentant le reste des composants électroniques. (Arduino, MPU6050, etc.). Comme vous pouvez le constater, des corrections ont été apportées à côté des deux connecteurs d’alimentation. Vous n'avez pas besoin de le faire car le PCB a été mis à jour après la création du premier modèle de travail. Au fond, le problème était qu'au début, le circuit imprimé ne disposait que d'une seule source d'alimentation. Au cours des tests, il est apparu que le module Bluetooth continuait de se déconnecter du téléphone, la tension de la batterie tombant à des niveaux bas (<3 V). Non seulement cela, mais Arduino avait également des problèmes avec cela, qui ont été résolus en abaissant la tension de baisse de tension. Vous pouvez le faire vous-même facilement, car il suffit de modifier un seul fichier dans l'IDE Arduino. Toutefois, il s'agit davantage d'un hack, car plus la fréquence est élevée, plus la tension est élevée. En fin de compte, quelque chose d'autre pourrait tomber à l'avenir ou vous pourriez perdre toute la puissance disponible, etc. Quoi qu'il en soit, la mise en œuvre d'un système à deux batteries a bien fonctionné, en particulier si la batterie, alimentant l'électronique pesant seulement autour de 3g.

Lorsque vous soudez les connecteurs du moteur, assurez-vous qu'ils ont été soudés correctement! De chaque côté, l'un des connecteurs est orienté dans un sens et dans un autre. Soit vérifier ce qui est positif, ce qui est négatif ou connecter les moteurs avant la soudure et souder conformément à l'image (la couleur du fil rouge / blanc est positive et la borne noir / bleu est négative)

De l'autre côté du circuit imprimé, j'ai ajouté un carré vert indiquant les connecteurs 1x02 non obligatoires. J'ai pensé qu'il serait bien de pouvoir connecter quelque chose au quadcoptère à l'avenir. J'ai donc mis à disposition des broches PWM et Analogue facilement accessibles. J'ai également marqué le connecteur positif sur les deux batteries.

Étape 6: code

J'ai écrit une bibliothèque et un exemple de programme utilisant mbed pour un quadricoptère que vous pouvez trouver ici. Mbed est beaucoup plus rapide que Arduino et il a plus de mémoire, donc il pourrait être utilisé avec un quadricoptère plus grand. Ici, j'ai tout adapté à Arduino, plus utilisé les bibliothèques disponibles.

Lecture de la tension de la batterie

Comme point de référence, Arduino utilise la tension d’alimentation. Ainsi, si nous connections deux résistances en série entre l’alimentation et la masse et lisons la tension au milieu, celle-ci serait toujours constante. Nous utilisons ici un système à deux batteries. Il existe donc deux approches pour lire la tension sur la batterie du moteur.

1) Nous pouvons toujours garder la batterie chargée de l’électronique d’alimentation. Cela signifie que nous nous assurons toujours que la tension est autour de 4,2V. Cette approche nécessiterait de charger les deux batteries tout le temps. De plus, que se passerait-il si nous voulions également surveiller la batterie de l'électronique?

2) Utilisez la référence de tension d'intervalle. Ceci est égal à 1.1V sur Atmega328, cependant nous devons nous assurer que tout ce qui est connecté à A0 ne dépasse pas 1.1V. J'ai donc ajouté une résistance X kOhm en série avec une résistance Y kOhm pour créer un circuit diviseur de potentiel. Le code pour lire et lisser la tension de la batterie est:

#define ALPHA 0.1 #define MULTIPLIER 6.67 float motorBattery; void setup () {pinMode (A0, INPUT); analogReference (INTERNE); // Définition de la source de référence interne de 1,1V // float tmp = analogRead (A0) / 1023.0 * MULTIPLIER; // make units Voltage motorBattery = 5.0; } void loop () {motorBattery = smoothBattery (motorBattery, analogRead (A0) / 1023.0 * MULTIPLIER, ALPHA); } float smoothBattery (float prevEntry, float newEntry, float alpha) {return (1-alpha) * prevEntry + alpha * newEntry; }

MPU6050

La bibliothèque MPU6050 est disponible par Jeff Rowberg 2012. L'exemple de code fourni, MPU6050_DMP6, est utilisé comme code principal du projet.

Si vous avez décidé d'utiliser mon cadre et mes moteurs, vous n'aurez probablement plus besoin de modifier le code car le contrôleur PID était déjà configuré pour des performances plus ou moins bonnes. Toutefois, si vous utilisez un autre cadre, vous devrez définir de nouvelles valeurs pour le contrôleur PID. Cela prend un certain temps si vous le faites pour la première fois.

Moteurs stabilisateurs

Dans les systèmes de contrôle, un contrôleur PID est un moyen très répandu de stabiliser le système. Ici, nous voudrons stabiliser le pitch and roll du MPU6050. J'ai utilisé la bibliothèque PID_v1 à cette fin. Dans le code ci-dessous, je configurerai les moteurs et le contrôleur PID. Je vais ensuite ajouter une fonction pour stabiliser les moteurs en fonction de la vitesse requise.

#define FL_MOTOR 3 #define FR_MOTOR 9 #define BR_MOTOR 10 #define BL_MOTOR 11 // ------------------------------------ -PID ------------------------------------ // Définir les variables que nous allons connecter à double rollSetpoint, rollInput, rollOutput; double pitchSetpoint, pitchInput, pitchOutput; // Définir les paramètres de réglage agressif et conservateur

double consKp = 1, consKi = 0,05, consKd = 0,25; PID pitchPID (& rollInput, & rollOutput, & rollSetpoint, consKp, consKi, consKd, DIRECT); PID rollPID (& pitchInput, & pitchOutput, & pitchSetpoint, consKp, consKi, consKd, DIRECT); void setup () {// ------------------------------ PID ------------ ---------------------- pitchInput = 0.0; rollInput = 0.0; pitchSetpoint = 0.0; rollSetpoint = 0.0; // tourne le PID sur pitchPID.SetMode (AUTOMATIC); rollPID.SetMode (AUTOMATIC); pitchPID.SetOutputLimits (-20, 20); rollPID.SetOutputLimits (-20, 20); // ---------------------------------------------------- ------------------- pour (int i = 0; i <4; i ++) {targetSpeed ​​i = 0; } pinMode (FL_MOTOR, OUTPUT); pinMode (FR_MOTOR, OUTPUT); pinMode (BR_MOTOR, OUTPUT); pinMode (BL_MOTOR, OUTPUT); void loop () {pitchPID.Compute (); rollPID.Compute (); int actSpeed ​​4; stabiliser (targetSpeed, actSpeed, rollOutput, pitchOutput); // targetSpeed ​​= actSpeed; // cela doit-il être ici ou pas} void stabize (int * currSpeed, int * actSpeed, float rollDiff, float pitchDiff) {// la vitesse réelle est calculée comme suit + - half rollDiff + - half pitchDiff actSpeed ​​0 = (int) currSpeed ​​0 + (rollDiff / 2) - (pitchDiff / 2); actSpeed ​​1 = (int) currSpeed ​​1 + (rollDiff / 2) + (pitchDiff / 2); actSpeed ​​2 = (int) currSpeed ​​2 - (rollDiff / 2) + (pitchDiff / 2); actSpeed ​​3 = (int) currSpeed ​​3 - (rollDiff / 2) - (pitchDiff / 2); pour (int i = 0; i <4; i ++) {if (actSpeed ​​i <0) actSpeed ​​i = 0; }} void runIndividual (int * actSpeed) {analogWrite (FL_MOTOR, actSpeed ​​0); analogWrite (FR_MOTOR, actSpeed ​​1); analogWrite (BR_MOTOR, actSpeed ​​2); analogWrite (BL_MOTOR, actSpeed ​​3); }

Module Bluetooth

La communication entre le quadricoptère et le téléphone se fera par le biais du module Bluetooth HC-06. L’avantage, c’est qu’il n’est pas nécessaire de pirater quoi que ce soit, car le module utilise une communication série RS232 pour communiquer avec Arduino. Vous l’utiliserez donc de la même manière que la bibliothèque Arduino Serial. Pour cela, vous aurez besoin de la bibliothèque Arduino SoftwareSerial. Dans le code ci-dessous, je vous enverrai la vitesse qui doit être réglée pour tous les moteurs.

LogicielSerial mySerial (7, 8); // RX, TX void setup () {mySerial.begin (9600); } void loop () {if (mySerial.available ()) {myReading = mySerial.parseInt (); pour (int i = 0; i <4; i ++) {targetSpeed ​​i = myReading; } // effacer tout ce qui n'a pas été lu pendant (mySerial.available ()) mySerial.read (); }}

Ajout de bits ensemble

Pour tout le code, je travaille toujours dessus, j'ai donc décidé de ne pas l'ajouter ici. Vous pouvez trouver la dernière version du code dans GitHub. Je notifierai dans cet Instructable quand le code est fini. Pour le moment, je dois configurer les constantes PID correctes …