Drone basé sur Arduino

Salut à tous,
J'ai quelque question concernant la programmation demon drone, sous arduino UNO. Tout d'abord, je précise que je reçoit les données d'une centrale inertielle GY-87 (une MPU 6050 avec un magnétomètre et un capteur de pression). Après avoir extrait ces données, j'ai besoin d'envoyer des instructions aux moteurs, en fonction de ces données pour stabiliser le drone. Pour ce faire, je sais que j'ai besoin d'un PID (j'ai trouvé un code sur internet : Improving the Beginner’s PID – Introduction « Project Blog mais bon, si quelqu'un a le courage de m'expliquer, je veux bien :p). Ensuite, j'ai besoin d'envoyer la sortie du PID aux moteurs, et là, je ne sais pas comment faire (je sais faire tourner les moteurs, qui sont des moteurs brushless, via la librairie Servo.h)
Voilà, je vous remercie d'avance pour vos réponse,
Bon bidouillage :stuck_out_tongue:

Bonjour;
La librairie "Servo.h" envoie une consigne pour des servo-moteurs qui ont pour fonction de se positionner a un angle bien précis.
La librairie "Servo.h" n'est pas ce qu'il te faut.

Si j’interprète ce que tu as fait tu a simplement envoyer une valeur de donnée qui a modulé la tension (a la sortie que tu lui a assigner) pour commander une position mais le moteur la reçois comme une tension et ce met a tourner => Mais pas à la bonne vitesse.

Pour contrôler la puissance de tes moteurs tu a juste besoin de moduler (faire varier) la tension appliquée à ces derniers.

Comment contrôle tu la puissance de tes moteurs? La platine ne peut pas délivrer suffisamment de courant pour des moteurs de ce type. Il te faut surtout (si tu veux pas tout griller) passer par un "sheeld-moteur" ou un "MOFSET" qui va gérer la puissance à appliquer en fonction de la modulation de tension que tu lui envoie sur sa broche de contrôle (ou commande) depuis l'Arduino.

Quelle tension est appliqué à tes moteurs?

A plus!

Petit complément !!

Le "sheeld" ou le "MOFSET" doivent être alimenter par un source de courant externe.

A plus!

Salut à toi, merci pour ta réponse :slight_smile:
La partie contrôle des moteurs ne pose pas de problème (la librairie Servo.h marche très bien pour contrôler des ESC qui eux même contrôle mes moteurs brushless). Le véritable problème c'est le PID : comment relier les données extraites de mes capteur (GY 87) à mes moteurs afin de stabiliser mon drone.
En gros, pour des moteurs brushless, le MOSFET est l'équivalent des quatres ESC (un pour chaque moteurs, alimenté par une batterie externe)

La librairie servo est optimiser pour des servo et non pour des brushless.

Cela reviens à dire que l'on peut coupé du gâteau à la tronçonneuse, oui ça marche mais ce n'est pas prévu à cet effet.

Bonsoir;

On ne juge pas des tes erreur mais t'apporte nos connaissances.!!
Tu vas rencontrer des problèmes avec tes moteurs si tu les gèrent par la librairie "Servo.h" !!
De plus il est plus facile de gérer des moteur par une simple modulation de la tension à la sortie pour le pilotage de la puissance.

C'est toi qui vois !!

C'est quoi un ESC ? Je n'ai pas de divinateur d'abréviations.

Pour le traitement de la consigne retourné par ton module "gyroscopique".
Ce dernier vas te retourner des données = longitude+latitude+hauteur? => transmission via la communication (SPI-I2C ou autre??)=> C'est ces données que tu dois récupérer et utiliser dans ton programme.

Comme tu "maitrise" le contrôle de "Servo.h" => Quant tu souhaite piloter tes moteurs tu indique manuellement une consigne dans la fonction => Exemple moteurServo_1.write(1500); 1500 est ta consigne donc tu devra crée une variable (avec le bon type) et l’intégré a cette endroit.

A tu déjà crée la fonction qui vas géré tes moteurs en fonction de l'inclinaison pour stabiliser.
Suggestion=> Avec un potar. il est possible de simuler un balancement de consigne de l'un vers l'autre sur un axe.

J'attends moi même un module IMU.

A plus!

Hello

Désolé mais Quentin à raison.
Les ESC son des contrôleurs de moteurs brushless qui sont pilotés par le signal disponible à la sortie d'un récepteur.
La longueur d'impulsion détermine la vitesse de rotation.
Donc la librairie Servo est tout à fait appropriée pour ce faire.
(De plus, un moteur brushless se pilote en alimentant dans le bon ordre les bobines dont une simple modulaiton de tension n'est pas une solution.

Pour le PID, je ne suis pas spécialiste mais en gros, tu définis une consigne (par exemple pour avancer stabiliser le drone tu souhaites une accélération verticale de 1G (la gravité par défaut).
Puis tu mesures la valeur réelle.
Si ton drone descend, l'accélération diminue donc il faut augmenter la rotation de moteurs.
Si elle augmente il faut réduire la vitesse.
Ca, c'est pour un axe. Il y en a 3 à stabiliser. :o
Ensuite, il faut permettre le déplacement (et donc changer les consignes en fonction de la position des manches)

Si je me souviens bien, il faut aussi filtrer les valeurs renvoyées par les accéléromètres (filtre de Kalman je pense) sauf si cette fonctionnalité est déjà implémentée sur ta centrale inertielle...

Il y a donc du boulot :slight_smile:
La bonne nouvelle c'est qu'il existe pas mal de littérature à ce sujet.

Ce ne sont que quelques pistes... Désolé de ne pouvoir être plus précis.

Coyotte

Merci; coyotte !!

Ne connaissant pas à quoi j'avais à faire !!J' admet avoir fait fausse route par !
Sa veut dire quoi ESC ?

Pourriez vous me communiquer les références de ces moteurs?

Ça me servira de leçon !!

Merci ! et excuse Quentin92s !!

(j'ose) De souvenir PID = Proportionnel Intégral Dérive. En gros c'est une façon de réguler le comportement d'un équipements suivant ces réactions type. Ajuster au plus juste le retour d'un signale par rapport a la consigne. (proportionnel = Accélération a l'approche de la consigne +> intégral = anticipation à la correction au point de consigne).
La dérivé est souvent négligé (=1) => mais utile pour des éléments a fort inertie.(T°four)

A plus!

Hello manu,
ESC : Electronic Speed Controler
Tu en trouveras quantité chez HobbyKing
(ici par exemple : Radio Control Planes, Drones, Cars, FPV, Quadcopters and more - Hobbyking )

En plus, ils sont souvent fournis avec un BEC (Battery Elimination Circuit) qui permet, à partir d'un accus Lipo S (+- 12v) de fournir une tension de 5v pour alimenter le récepteur et les servos.
C'est donc également intéressant pour alimenter nos arduinos...

A ce titre, Quentin, si tu utilises plusieurs ESC avec BEC, il faut veiller à n'en utiliser qu'un seul pour l'alimentation 5V. (isoler ou couper le fil rouge sur les connecteurs de servos. )

Ça me servira de leçon !!

Comme je dis toujours, "on ne peut pas reprocher à quelqu'un de ne pas savoir"
et j'ajoute "Mais on peut lui reprocher de ne pas vouloir apprendre" (ce qui ne te concerne pas, justement :slight_smile: )

Voilà voilà ...

Coyotte

Bonsoir tous;

Merci Coyotte;

Je découvre un nouveaux moteurs.
Si je comprend bien la régulation de la puissance se fait en interne du moteur via la consigne PWM.

En gros un servo s'en sert pour ce positionner et ceci pour gérer leurs vitesse de rotation.

A plus !! Et encor merci !

Hello Manu,

Non, la régulation est effectuée par l'ESC.
C'est lui qui transforme la largeur d'impulsion du servo en une séquence d'alimentation des bobines à la vitesse adhoc.

Le moteur n'as pas de régulation interne.
La grosse différence est que c'est le stator qui porte les bobines et que le rotor porte les aimants. Dès lors, plus de balais (brushless) et un rendement bien meilleur.

Coyotte

Salut coyotte!

Bon cette fois c'est la bonne ; j'ai compris.
Je comprend vite mais faut m'expliquer longtemps !! lol

J'essaie aussi de gérer un drone avec l'arduino, je te donne un lien assez pratique qui explique comment s'y prendre en théorie.
http://owenson.me/build-your-own-quadcopter-autopilot/

Merci de toute vos réponses :slight_smile:
Pour ce qui est des ESC, j'ai connecté les 4 bec à une batterie LIPO. J'ai connecté les pins de "contrôle" des ESC à l'arduino, les GND relié ensemble au GND de l'arduino, et une des alimentations au 5V.
Ensuite, pour le PID, je ne comprend toujours pas :stuck_out_tongue: je n'ai aucune idée de comment ça marche, comment le programmer et comment récupérer les valeurs ressorties pour corriger la trajectoire
Merci d'avance pour vos réponses :slight_smile:

Hello Quentin,

Ce lien t'enverra vers une page expliquant le principe du PID.
Ce n'est pas un drone volant mais cela explique bien le principe du PID.
Evidemment, comme tu n'as pas choisi la facilité, il va falloir intégrer les 3 axes et les 4 moteurs...

Je crois qu'il faut vraiment y aller par étape...

Coyotte

Merci à toi :slight_smile:
Aucun site en français n'explique bien le principe du PID ? Je parle bien anglais mais je n'ai pas envie de louper des infos/mal comprendre ...

EDIT : J'ai trouvé un site en français qui explique bien et en plus pour un drone Document sans nom
Il ne me manque plus qu'à trouver comment programmer le PID et à résoudre mon problème de gyro ( Erreur GY 87 - Français - Arduino Forum )

J'ai trouvé un exemple d'implémentation simple à comprendre
http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/

Salut a tous!

Justement coyotte c'est sur ce genre de projet que je compte me lancé. Et j'avoue que le PID vas être un gros casse tête a mettre en programme.

Salut merci pour le lien sa donne une visu du PID pour ce robot

J'aime bien celui la !!

Salut !!