les projets - modélisme
acquisition des données d'un récepteur de télécommande

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