Problème de lecture des données transmises par la radio

Sylvie50120 Sylvie50120 6 Messages
Je possède déjà un drone, un DJI F450 avec un module NAZA Lite. Ca marche, mais on ne sait pas vraiment ce qu'il y a dans le module de conduite...
J'ai découvert la série d'articles sur la construction d'un drone à base d'arduino qui me passionne ! J'apprécie d'autant plus qu'à la lecture, j'apprends beaucoup de choses sur la programmation de l'arduino.

Bon si j'écris, c'est que j'ai un problème ! Voilà :
Je suis les articles les uns après les autres, j'en suis à tester le lien entre la radiocommande et l'arduino. Ma configuration est la suivante :
- Une radio TARANIS X9D+
- Un récepteur X6R
- Un arduino NANO
- Le câblage reste identique à celui proposé dans l'article 6.
Lorsque je reprends le sketch de teste de la liaison entre radio et arduino, j'obtiens des valeurs totalement incohérentes par rapport aux valeurs que l'on devrait obtenir, comprises entre 1000 et 2000 : Les valeurs lues varient même sans mouvements sur les manches de la radio, les valeurs lues dépassent 50000...

Je croyais que le NANO pouvait remplacer un UNO quasi au pied levé... Existe-t-il des différences qui expliquent ces écarts ?

Merci pour votre aide

Alain
Sylvie50120 Sylvie50120 6 Messages
J'apporte quelques précisions quant à mon problème, néanmoins cela ne m'aide vraiment pas à comprendre le problème que je rencontre.  On y va :
  1. J'ai vérifié le bind du récepteur X6R avec la radio Taranis : c'est OK, le voyant est vert.
  2. Le programme sur la radio est on ne peut plus simple : ROLL sur voie 1 à 100%, PITCH sur voie 2 à 100%, THROTTLE sur voie 3 à 100%, et YAW sur voie 4 à 100%, on ne peut pas faire plus simple dans la Taranis lorsqu'on crée un nouveau modèle...
  3. J'ai raccordé au récepteur 4 servos Tower Pro SG90, sur voies 1, 2, 3, 4.
  4. On met sous tension et là, tous les servos fonctionnent, MAIS aucun de fait 0°-180° : l'amplitude de rotation n'est que de 80° (la mesure est faite "à l'oeil"). N'empêche, c'est clair que le débattement n'est que la moitier de ce que j'attendais !!!
Ca vient de quoi : des servos ou de la radio ????
lobodol lobodol 863 Messages BIG BOSS
Salut Alain,

L'Aruino Uno et l'Arduino Nano utilisent le même microcontrôleur, à savoir le ATMega328. Le code du chapitre 6 est donc censé fonctionner sur ces deux cartes.

Les servomoteurs ont une fréquence de fonctionnement qui leur est propre. Si elle n'est pas la même que celle de ta radiocommande/récepteur, ça peut expliquer cette amplitude réduite.

Il serait intéressant de trouver la datasheet de ta radiocommande/récepteur pour voir la fréquence de fonctionnement et la durée des impulsions qui sont censées être comprises entre 1000µs et 2000µs.
Sylvie50120 Sylvie50120 6 Messages
Merci pour cette réponse.
Je reste vraiment dans l'expectative : la radio Taranis est assez compliquée à utiliser (pour moi en tous cas), mais je peux maintenant affirmer que la durée des impulsions est comprise entre 988µs et 2012µs (c'est affiché sur l'un des écrans de réglage de la radio...)....

Pour autant, je n'ai toujours aucun résultat probant !

Du point de vue montage :
  • l'arduino UNO ou NANO (j'ai essayé avec les deux types de cartes !) sont raccordés au PC en USB
  • Le récepteur radio est raccordé aux pins de l'arduino avec des fils de bread board. Le récepteur est alimenté par un bloc de 4 piles 1,5V. La masse de ce bloc de pile est relié au ground de l'arduino.
Bonne fin de week-end

Merci pour le temps que vous me consacrez !

Alain
Sylvie50120 Sylvie50120 6 Messages
Re bonsoir !

En fait, j'avais des doutes quant au fonctionnement du couple radio-récepteur... J'ai donc programmé un sketch utilisant pulseIn afin de lire ce qui passe sur les pins 8, 9, 10, 11.
Le sketch est le suivant :


ET CA MARCHE !!!!!!!!!!!!!!! : j'ai bien des valeurs comprises entre 990 et 1990... mais il faut 45 millisecondes pour lire les 4 voies....
Sylvie50120 Sylvie50120 6 Messages
Voici le code que j'essaye sans succès de faire tourner :

lobodol lobodol 863 Messages BIG BOSS
Salut Alain, il y a une erreur dans ton Interrupt Sub Routine, dans les else. Au lieu d'y faire une affectation avec =, tu fais une comparaison avec == :


au lieu de :

Et là ça devrait fonctionner :)
Vous devez être connecté pour pouvoir répondre à ce sujet.
Utilisation des données

Afin d'améliorer ton expérience utilisateur, nous utilisons des cookies 🍪