Le Blog du Coyotte

Tac-Tactac

ven 31 mai 2019 / OpenTx

Prologue

Lors de la dernière réunion SAM sur notre terrain de Haneffe, Victor, nouvellement acquis au monde d’OpenTX est venu me trouver avec une étincelle dans l’œil :

« OpenTX m’a l’air vraiment puissant mais j’ai un petit challenge à te soumettre. Te souviens-tu de mon boîtier qui permet de contrôler la direction d’un modèle avec un simple bouton ? Si j’appuie sur le bouton (Tac) le modèle tourne à gauche tant que je maintiens la pression… Si j’appuie d’abord brièvement sur le bouton (Tac-Tac), le modèle tourne à droite. Penses-tu qu’il soit possible de faire la même chose avec OpenTX ? »

Confiant dans les capacités d’OpenTX, j’ai bien évidemment répondu oui. Plus réservé quant aux miennes, j’ai demandé quelques jours de réflexion … Cependant, pris au jeu, j’ai immédiatement sorti ma Horus et me suis mis au calme dans le local. Vingt petites minutes plus tard, je suis allé retrouver mon poseur de défis :

« Victor, imagine que la voie 1 contrôle la direction et que SH soit ton bouton poussoir. Si je fais ‘Tac’, ton gouvernail tourne à gauche et si je fais ‘Tac-Tac’, il tourne à droite… Est-ce bien cela que tu veux ? »

Grand sourire de l’intéressé… et de votre serviteur.

Comment cela fonctionne-t-il ?

Comme à chaque fois, une petite réflexion préalable sur les objectifs à atteindre et les moyens disponibles s’impose. Dans le cas présent, il faut :

– Maintenir le gouvernail de direction au neutre en l’absence d’instruction.
– Détecter un appui long qui indique que nous désirons tourner.
– Détecter un appuis court préalable qui permet de changer la direction du virage.

Comment allons nous changer de direction ?

Dans OpenTX, il existe une notion très puissante qui est la Variable Globale.
Une variable globale est une zone de la mémoire de la radio dans laquelle il est possible de stocker une valeur. Cette valeur peut être utilisée ensuite pour paramétrer une fonctionnalité. Dans notre cas, nous l’utiliserons pour définir le déplacement du gouvernail.

Pour assigner une valeur à une variable globale, nous pouvons passer par les Fonctions Spéciales :

Image 1

Dans le cas présent, si L01 est actif, nous stockons -60 dans la variable globale GV1.
Si L02 est actif, c’est la valeur 60 que nous stockons dans GV1.
L01 et L02 sont deux interrupteurs logiques dont nous reparlerons plus tard.

Maintenir le gouvernail au neutre

Commençons par le plus facile (c’est gratifiant et cela met de bonne humeur pour la suite ???? )

Image 1

Il n’y a pas grand chose à expliquer ici : Nous faisons part à OpenTX de notre désir de voir la voie 1 être à 0 (0% de MAX = 0) en l’absence de toute action du pilote.

Détection d’un appui long

Presqu’aussi facile : nous allons détecter un appui long sur SH dans les Interrupteurs Logiques.

Image 1

Que dit cette ligne ?
Que L03 est actif_ si __SH vaut 100 pendant au moins 0.3 seconde.
(Pour rappel sous OpenTX, un interrupteur à 2 positions peut prendre les valeurs -100 et +100 alors qu’un interrupteur à 3 positions pourra prendre les valeurs -100, 0 et +100)

On modifie ensuite les mixages de la voie 1 comme suit :

Image 1

Que fait cette ligne ? Elle remplace (:=) la valeur de la voie 1 par GV1 % de MAX si l’Interrupteur Logique L03 est actif.
(Pour rappel, MAX est une constante qui vaut toujours 100)

Dès lors, si GV1 valait 60, nous aurions 60% de MAX soit 60_ et si __GV1 vaut -60, nous aurons -60% de MAX donc ... -60. (60 et -60 sont des valeurs à ajuster en fonction du taux de virage que vous souhaitez obtenir) Mais pour le moment GV1 vaut toujours 0. ???? Fichtre, diantre ! Notre avion file tout droit…

Détection de l’impulsion

Image 1

La Ligne L01 détecte une impulsion sur SH si elle est inférieure ou égale à 0.2 seconde.
Pour rappel, dans les fonctions spéciales, nous avons déclaré que si L01 est actif, GV1 prend la valeur -60… Et l’on tourne à gauche au prochain appui long … Bingo !

Ah ben oui… mais non ! Car maintenant, GV1 vaut toujours -60… On ne tourne plus qu’à gauche… « Caramba, encore raté ! » aurait dit Victor…

Tourner à droite

Le plus simple est de s’assurer que GV1 vaut toujours 60 sauf s’il y a eu une impulsion préalable. Mais comment faire ?

Nous pouvons réinitialiser la variable GV1 lorsque nous avons fini le virage, c-à-d lorsque SH n’est plus maintenu.
Oui, mais… Lorsque nous envoyons une impulsion, SH n’est plus maintenu entre la fin de l’impulsion et le début du virage.

Il faut donc que SH ne soit plus maintenu pendant une durée supérieure au temps alloué entre l’impulsion et la commande de direction.
Comme le temps de l’impulsion est de maximum 0.2 seconde, on considérera que si SH est relâché pour au moins 0.3 seconde, nous pouvons réinitialiser la direction du virage. La ligne L02 se charge de la détection :

Image 1

Souvenez-vous que nous avions défini une fonction spéciale FS02 qui assigne la valeur 60 à GV1 si L02 est actif. Voilà… Notre système fonctionne parfaitement. Et Victor est content !

Coyotte

Michel Baily

A propos de Michel Baily

Passionné d'informatique depuis l'adolescence avec un gros faible pour les logiciels libres. Plus de vingt années d'expérience deans le développement d'application orientée objets en langague Delphi