Page 1 sur 1

Utiliser un arduino pour autopiloter mon contrôleur

Posté : lun. 31 juil. 2017 14:38
par crtleroy
Salut tout le monde,


Je bosse sur un octocopter, que je voudrais faire contrôler par un arduino. Mon idée est donc de ne pas utiliser une radiocommande mais d'embarquer mon arduino mega 2560 dans mon drone, et de le faire "passer" pour un recepteur RC ! Je précise que mon flight controller est un SP Racing F3 et j'utilise cleanflight.


Donc, plus précisément, je voudrais que mon arduino imite un récepteur en envoyant des signaux PWM dans les entrées RC de mon contrôleur de vol. Le premier truc à faire est donc déjà de connaître la nature des signaux PWM à la sortie d'un récepteur classique, chose que j'ai trouvée ici : http://diydrones.com/forum/topics/pwm-o ... m-receiver" onclick="window.open(this.href);return false;
A priori la commande PWM va de 1ms à 2ms sur une période totale de 20ms, pour un récepteur Spektrum classique. Je suppose donc qu'il me suffit de générer le même signal pour simuler une radiocommande. Ce qui me rassure pour la forme de l'onde c'est la nature de la commande sur cleanflight, qui va de 1000 à 2000 : il s'agit donc de 1000μs à 2000μs, c'est sûrement ça.

Donc, je génère un signal PWM de cette nature avec ce code Arduino très très simple :


void setup()
{
pinMode(13, OUTPUT);
}

void loop()
{
digitalWrite(13, HIGH);
delayMicroseconds(1300);
digitalWrite(13, LOW);
delayMicroseconds(20000 - 1300);
}

et je connecte la masse de l'arduino à l'entrée masse du récepteur (pin 1 de la broche IO-1 sur le SP F3) et la pin 13 de l'arduino sur n'importe laquelle des chaînes RC du contrôleur (j'ai tout essayé, pin 3, 4, etc, c'est à dire le throttle, les AUX, tout).

Bref, là, a priori j'envoie un signal PWM comme le récepteur est censé le faire. J'ouvre cleanflight et je regarde la commande sur les chaîne et rien du tout :( Elles sont toutes bloquées à 1500 comme d'hab. pourtant je pense avoir envoyé un signal de 1300...

Alors voilà, est ce que quelqu'un s'est déjà amusé à faire ça ? Ou s'y connaitrait un peu mieux que moi en PWM ou en communciation RC ? Je ne sais plus trop quoi faire :(

Votre soutien sera le bienvenu :) Merci d'avance !

Corentin

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : lun. 31 juil. 2017 14:55
par Crisssss
Un signal pwm sert a controler une seule voie il me semble..
C'est plutot un signal ibus ou sbus que tu devrais generer ;)

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : lun. 31 juil. 2017 20:19
par furynick
Utilises les pin PWM de ton arduino, ça sera déjà beaucoup plus pratique à coder.
Ensuite, la pin13 c'est la LED, mieux vaut éviter de l'utiliser.
Enfin, c'est particulièrement scabreux comme projet ... autant programmer directement le vol automatique sur le contrôleur sans quoi il te faudra coder le support d'une centrale inertielle tout comme un FC. Tu te retrouverais donc avec un FC complet qui pilote un FC.

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : mar. 1 août 2017 12:18
par crtleroy
furynick a écrit :autant programmer directement le vol automatique sur le contrôleur sans quoi il te faudra coder le support d'une centrale inertielle tout comme un FC. Tu te retrouverais donc avec un FC complet qui pilote un FC.
Alors non en fait, je ne compte pas remplacer mon contrôleur de vol, je me rends bien compte que ce serait tordu. Non, ce que je veux faire c'est juste remplacer la radiocommande par une commande externe automatisée et embarquée. Par exemple, pour écrire une chorégraphie, actionner les servos au bon moment, et plus généralement robotiser le drone.

A vrai dire je compte aller encore plus loin puisque je voudrais en fait effectivement avoir une radiocommande, mais dont le récepteur est branché sur l'arduino. Ce qui me permet de piloter directement en bypassant les informations ou d'actionner à tout moment un pilote automatique programmable à souhait. Finalement le contrôleur de vol reste toujours le pilote, mais l'arduino est un copilote.

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : mar. 1 août 2017 12:29
par crtleroy
furynick a écrit :Ensuite, la pin13 c'est la LED, mieux vaut éviter de l'utiliser.
Oh et effectivement sur les arduino les pins à utiliser de préférence sont les 3, 5, 6, 9, 10, et 11;
Mais là je travaille avec un arduino Mega donc ça devrait fonctionner de la pin 2 à 13 et 44 à 46 :) (https://www.arduino.cc/en/Reference/AnalogWrite)

Bon en revanche , je me suis rendu compte que j'utilisais digitalwrite() au lieu d'analogwrite()... Donc voilà j'ai de quoi réessayer ce soir j'espère que ça fonctionnera :)

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : mar. 1 août 2017 12:31
par crtleroy
Crisssss a écrit :Un signal pwm sert a controler une seule voie il me semble..
Alors oui, et pour l'instant ce que j'essaye de faire c'est de générer plusieurs PWM pour contrôler tous mes canaux.

Mais effectivement je considère carrément l'idée de générer un signal PPM, qui pourra contrôler mes 8 canaux avec une seule voie :).

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : mar. 1 août 2017 23:00
par furynick
Je ne pense pas que tu puisses piloter un FC en pré-programmant des séquences de commande pour la simple et bonne raison que le milieu dans lequel l'appareil évolue et totalement instable.

Actionner la commande de roulis de 15% pendant 1s n'aura jamais le même effet.

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : mer. 2 août 2017 10:57
par crtleroy
Je suis bien d'accord ! L'idée n'est pas vraiment de donner toute la main à un arduino pour le pilotage. C'est d'utiliser l'arduino, avec davantage de capteurs, pour réaliser des séquences plus compliquées. Par exemple pour larguer un colis, arrivé proche de la cible, l'arduino prend le relais, pour un atterrissage difficile, il prend le relais, pour une manoeuvre d'évitement automatique s'il y a un obstacle, il prend le relais, etc :) A côté de ça c'est la possibilité d'activer des modes de vols via l'arduino, ou même d'armer/désarmer via arduino, donc ça veut dire que je peux l'armer avec mon téléphone aussi (ce n'est qu'un exemple pour montrer l'ouverture que ça apporte)

Je note que l'implémentation de lois de commande et de correcteurs pour une stabilisation externe du drone ne me fait pas vraiment peur (et non, ce n'est pas une stabilisation en "plus" de celle du correcteur de vol, c'est simplement celle que l'on fait avec nos mains quand on pilote par exemple. notre cerveau dirige naturellement nos pouces pour stabiliser le drone, même s'il est déjà censé être stable)

Bref, et quoi qu'il en soit j'ai réussi hier soir à générer du PPM pour contrôler 8 canaux avec une seule voie :). Du coup j'ai le contrôle sur 8 canaux directement depuis l'arduino. Je le mettrai en bypass pour piloter à la main et je m'occuperai d'implementer d'autres choses plus tard ! ais bon en tout cas ça a marché, c'est bon ;)

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : lun. 4 déc. 2017 22:28
par bruno
Y-a sylvain qui avait fait un gros travail déjà viewtopic.php?f=80&t=14875

Les modos: Désolé pour le déterrage ... mais Bruno is back :33:

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : lun. 4 déc. 2017 22:38
par Dehas
Et content de te revoir [yahoo.gif]

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : mar. 5 déc. 2017 14:59
par klmnl
crtLeroy bonjour.
Va voir ici
viewtopic.php?f=10&t=22444
Ne concerne qu'un seul canal.
Mais éducatif tout de même.
Larguer un colis (une grenade par exemple), c'est facile : interruption de l'alimentation d'un électro aimant.
Éviter un obstacle, c'est plus dur. Furynic a déjà abordé le chapitre difficulté.
Arduino embarqué te permettra des choses simples, mais va probablement nécessiter son alimentation séparée.
Cdlt
PS va voir un site qui s'appelle locoduino (loco, comme locomotive) : un passionné d’Arduino et de modélisme ferroviaire. Beaucoup de choses à apprendre y compris des trucs un peu hard comme les timers.

Re: Utiliser un arduino pour autopiloter mon contrôleur

Posté : dim. 11 févr. 2018 21:29
par azbloc
content de te lire ici Bruno ;)