|
les projets - modélisme Lire et interpréter les données d'un récepteur de télécommande de modélisme...... |
PRÉSENTATION :
Après avoir fait quelques test avec l'Arduino pour lire la sortie d'un
récepteur de radiocommande, j'ai rencontré quelques déboires.
Un petit dessin valant mieux qu'un grand discours , je reprends les croquis du
fonctionnement d'un
servomoteur :
Vous pouvez remarquer que le servomoteur ne revoit ses instructions que
toutes les 20ms, soit 50 Hz.
De sont coté l'Arduino, à 16 Mhz, lit le port beaucoup, mais beaucoup plus
rapidement.
Donc, il lira la valeur des milliers de fois par secondes...
Les sorties du récepteur permettent de piloter directement des servomoteurs de modélisme ou un contrôleur de vitesse de moteur sur les sorties ch1, ch2...
La commande est un signal numérique de période constante 20
ms (50 Hz), codé en largeur d'impulsions (PPM).
1 ms high correspond à 0% (full brake, reverse)
1.5 ms correspond au point neutre (neutral throttle).
2 ms high correspond à 100% de commande (full throttle).
l'instruction analogRead() :
En lisant l'entrée analogique en permanence, nous lisons n'importe quoi.
Sur le chronogramme ci-dessus, nous constatons qu'une tension n'est présente que
toutes les 20ms.
Cette valeur numérique PWM 5V ne reflétant pas une valeur analogique...
Ça ne fonctionnera pas, car nous souhaitons lire la longueur du créneau, et non
son amplitude.
Au pire, si je lis au bon moment, je verrais du 5V, donc 1023 pour l'Arduino...
l'instruction pulsIn() :
C'est cette instruction qui va venir à notre secours.
Syntaxe : pulsIn (broche, valeur, timeout);
• broche =
le numéro de la broche que vous souhaitez lire, de type int
• valeur = type d'impulsion à lire,
High pour un front montant, Low pour un front descendant, type int
• timeout = optionnel, le temps
maximum à attendre pour lire le créneau complètement, par défaut fixé à 1s, type
unsigned long
Exemple d'utilisation :
Nous lirons donc l'état d'une entrée digitale.
Le résultat de la lecture est en µs.
Donc pour des données du récepteur comprises entre 1 et 2 ms, j'obtiens donc un
résultat compris entre 1000 à 2000 µs
lecture du récepteur RC :
Matériel nécessaire :
• Écran LCD 4
lignes / 20 caractères, pour ma part, ce sera de l'I²C
• Votre récepteur radio et son émetteur
• Quelques fils femelle / femelle pour
raccorder sur votre Arduino NANO, Si vous utilisez un UNO, prenez des fils male
/ femelle
Raccordement :
Servo 1 = Sortie PWM 5
Servo 2 = Sortie PWM 6
Voie 1 du récepteur = Entrée digitale 4
Voie 2 du récepteur = Entrée digitale 8
LCD = A4 et A5 pour l'I²C
Affichage de l'écran :
[Photo afficheur]
Un programme qui ne sert à rien :
Pas tout à fait...
Si ce n'est retranscrire tout ce qui rentre du récepteur radio pour le
retransmettre sur les servos.
Le fichier INO...
En interceptant les data du récepteur... Il va vous permettre d'extrapoler pour la suite :
Inversion d'un servo :
Rien n'empêche d'inverser un servo en modifiant la commande map (servo,
1000, 2000, 0,180) par map (servo, 1000, 2000, 180, 0).
Dans ce cas, le servo fonctionnera à l'envers pour le cas où la fonction
n'existerait pas sur l'émetteur (NOR / REV)
Deux servo sur ma même voies :
servo1. write (servo1);
servo2.write (servo1);
....
Mixer les deux :
Deux fonction map, une à l'endroit, l'autre à l'envers...
Un servo dans un sens, l'autre dans l'autre sens
La commande des deux par la même voie...
Et ce n'est qu'un début :
Maintenant que nous savons faire l'acquisition des signaux
délivrés par le récepteur, nous allons pouvoir les torturer.
Grâce à la voie AUX de la radio, nous allons pouvoir lancer des séquences
complètes automatisée par l'Arduino.
Pour ne prendre que quelques exemples
:
Mise à l'eau d'une annexe :
soulever le
treuil de l'annexe, lever la grue, la faire pivoter, mettre le bateau à l'eau,
le remonter le reposer.
Faire clignoter le ou les gyrophare pendant l'opération, etc... Allez, marrez vous, a
vos neurones, moussaillons
Sur nos bateaux pousseurs :
Automatisation d'une grue, effectuer des cycles de chargements sur le
bateau...
Sur les barges, piloter en proportionnel et en autonomie les propulseurs
d'étraves...
Sur les avions :
Avec une centrale inertielle, effectuer des corrections automatiques de
pilotage...
M'enfin, j'ai pas d'avions. Mais je vais fabriquer un aéroglisseur...
Je vais faire une correction d'assiette sur des volets horizontaux pour pas
qu'il lève ou pique trop du nez ou corrige une accélération trop brutale,
similaire à un anticouple.
J'en passes et des meilleurs...
Plus tard
Des questions, des commentaires en direct ?
© 20/07/2016 - Dernière modification : 21/08/2017 - F4CVM / Pascal