Le Long-EZ
C’est un avion de construction amateur qui a été conçu par Burt Rutan. Il s’agit d’un avion de type « canard », c’est-à-dire possédant à l’avant un plan canard (une petite aile). Wikipédia en fournit une présentation synthétique.
S’il y a une petite aile à l’avant, c’est qu’il y en a une plus grande juste derrière (!), et c’est à elle qu’on va s’intéresser.
Le trim de roulis
Sur son Long-EZ, Walter a mis en place une petite palette située sur le bord de fuite de l’aile principale, similaire à celle prévue sur les plans du VariEze (merci à Mag pour l’info et [voir plus bas] pour son témoignage de l’utilité de la chose). Quand la palette est abaissée, elle monte. Et comme elle est située à droite, l’avion incline à gauche. Walter a mis en place un servomoteur utilisé en modélisme, qui permet avec la tringlerie qui va bien de faire monter ou descendre la palette, et donc, en vol, d’incliner l’avion à gauche ou à droite.
Voici une vue de dessous de l’ensemble. Le servomoteur est intégré dans l’aile, sous la plaque carrée.
On objectera que pour corriger le roulis il y a déjà un manche qui fait ça très bien, et qu’on pourrait caler les ailes bien à l’horizontale par des ressorts ou des élastiques de rappel. Certes, mais dans ce cas il faudrait piloter « à travers » le dispositif de rappel qui introduit une résistance mécanique, et si on veut ajouter un réglage possible en vol le dispositif se complique. Enfin, la palette introduit, par rapport à l’ensemble manche plus ailerons, une saine redondance qui a un jour permis à Mag de ramener son VariEze ailerons bloqués, en conjuguant le trim de roulis et les palonniers pour profiter du roulis induit.
Si on ajoute à ça des considérations aérodynamiques qui échappent à ma zone de compétence, on voit que la palette, c’est mieux. D’ailleurs on en trouve une sur la gouverne de profondeur de tous les avions d’aéroclub, et on l’actionne par une commande appelée trim de profondeur. Donc c’est décidé, on fait un trim de roulis.
L’électronique de commande
Le servomoteur est constitué d’un moteur électrique actionnant un levier qui peut parcourir « un certain angle ». Le notre est un modèle balayant un secteur angulaire de 180°. Le servo a été conçu pour exécuter directement des ordres transmis par une simple radio. L’idée (à une époque à laquelle on évitait d’envoyer des trames numériques avec un calcul de CRC) a été d’envoyer au servo des impulsions dont la largeur indique directement l’angle auquel doit se positionner le levier : par exemple, 0,5 ms -> 0°, 2,3 ms -> 180°, et entre les deux la relation est linéaire. L’impulsion de largeur ad hoc doit être renouvelée régulièrement (on indique toutes les 20ms, mais cette durée n’est pas critique). On aura noté au passage que les impulsions de commande transmises ont une durée de l’ordre de la ms et passent donc dans n’importe quelle radio pouvant transmettre des signaux audio.
Toujours sans électronique interne compliquée, le servo compare sa position actuelle à la consigne qu’il a reçue, et commande le moteur dans le sens qui va bien pour rattraper l’éventuel écart constaté.
Pour commander le servo, il suffit de générer les impulsions de la bonne largeur. J’ai choisi de le faire à l’aide d’un Arduino Mini qui fait ça très bien. D’autant que l’environnement de développement de l’Arduino propose une bibliothèque « Servo.h » qui permet de commander le servo en une instruction comme « mon_servo.write(angleServo) » avec angleServo en degrés, ou une instruction similaire spécifiant la largeur d’impulsion exprimée en microsecondes. Dans les deux cas, le servo se positionne à l’angle correspondant. Trop facile !
Voici l’Arduino Mini (effectivement pas gros) :
Il est placé dans un boitier d’une longueur de 65 mm, pattes de fixation comprises, et alimenté en 5V à partir de la batterie 12V, par un petit convertisseur dont le rendement dépasse 90%.
Ce boitier étant mis en place au niveau de l’emplanture de l’aile, son poids ne risque pas d’induire du roulis !
Une fois le boitier fermé, on a ce résultat…
… et pourtant je me suis appliqué pour les découpes.
Le points blancs servent de détrompage visuel pour les connecteurs.
- Le plus long connecteur sert au raccordement du servo (et permet aussi, en déconnectant le servo, de raccorder une inferface USB avec le PC afin de modifier le programme de l’Arduino).
- Celui sans point blanc sert à raccorder l’interrupteur de commande placé au tableau de bord.
- Et le plus petit sert au raccordement de l’alimentation 12V (batterie).
Les connecteurs sont simplement enfichés, et avant le premier vol, fixés par un point de silicone.
La commande au tableau de bord
Elle est en fait très simple : un interrupteur à levier, à 3 positions : gauche – neutre – droite
Evidemment le levier se manoeuvre horizontalement, avec la gauche à gauche et la droite à droite.
Dit comme ça c’est évident, mais entre le sens de montage du servo, la tringlerie, le choix des noms de paramètres dans le programme et la loi de Murphy, le premier essai part immanquablement à l’envers. Il faut donc pouvoir permuter les fils de l’interrupteur, raison pour laquelle son connecteur n’a pas de point blanc…
Seule la position centrale est stable, les positions latérales sont fugitives et nécessitent donc l’action continue du pilote. Ce qui tombe bien car c’est uniquement la durée de l’appui gauche ou droit qui détermine le comportement du trim.
Explication : le mouvement du servo est uniformément accéléré.
- De courtes impulsions successives permettent de positionner la palette très précisément, ce qui permet par exemple, lors des premiers essais, d’aller chercher le débattement maximum souhaité et de mémoriser en conséquence les paramètres correspondants dans le programme (« butées logicielles »). De même on peut mémoriser la position neutre telle que repérée par le pilote.
- Un appui long permet de rapidement apporter une correction significative puisque le débattement complet d’une butée à l’autre est obtenu en 1,3 s.
En vol, en enchainant des appuis de durée variable, on met rapidement le trim à sa bonne valeur. La maneuvre est intuitive et le résultat s’avère convaincant.
Schéma électronique et programme de l’Arduino
Sauf à vouloir adapter la présente réalisation à une application similaire, l’exposé du détail de l’électronique et du programme Arduino ne présentent pas d’intérêt particulier.
Particularités du programme
A part ce qui a été dit plus haut sur l’utilisation de la bibliothèque Servo.h, il a un truc dont je suis content (!) et qui peut resservir : l’utilisation de l’instruction switch au lieu d’empiler des if … then … else (jusque là, rien de nouveau puisque c’est fait pour ça), et surtout le fait d’utiliser cette instruction switch en association avec des tableaux récapitulant tous les cas possibles, et d’affecter à chaque case du tableau un « poids » qui lui est spécifique. C’est très économe en lignes de code parce que ça évite de répéter plusieurs fois tel ou tel test.
Une première application est la lecture des deux positions Up et Down (Up et Down parce que je ne travaille que sur le sens de variation de la durée d’impulsion) avec une temporisation d’anti-rebond.
Une autre application est l’interprétation de ces deux positions à travers l’étude du cas général de 2 boutons à 2 positions (ON et OFF). Cela fait 4 états possibles, et pour chacun de ces 4 états, on distingue s’il est nouveau ou inchangé, ce qui, en tout, fait 8 cas à traiter.
Le tableau des 8 cas possibles est très commode pour ça, y compris pour traiter les cas aberrants : en effet, les deux boutons poussoirs du cas général, étant en pratique réalisés à l’aide d’un interrupteur avec une position médiane de repos, il est mécaniquement impossible d’avoir les deux contacts à ON en même temps ; mais si ça se produit (deux fils dénudés qui se touchent, ou un parasite facétieux) on peut décider de faire quelque chose dans le sens de la sécurité, comme arrêter tout mouvement ou se caler sur une position prédéterminée. Mon souci est toujours que dans tous les cas, même ceux réputés impossibles, la machine sache quoi faire.