Aller au contenu

Connecter votre radiocommande à une arduino

Connecter votre radiocommande à une arduino

Objectifs :  Lire les signaux provenant d'une radiocommande sur votre arduino en la connectant au récepteur radio ! 

Difficulté :  1/5

Temps d’exécution : 15 min

Matériel nécessaire : 

Optionnel :

Analyse des signaux du récepteur de la radiocommande :


Tout d'abord un peu de théorie : Analysons les signaux émis par la télécommande et reçus par le récepteur afin de savoir comment la arduino doit lire ces signaux.

Pour cela nous allons observer les signaux sur un oscilloscope. Pour l'exemple nous regardons la voie 1 du récepteur. (Nous branchons donc la sonde de l'oscilloscope sur la voie 1 et nous n'oublions pas de relier la masse de l’oscilloscope à la masse du récepteur).
On allume la radiocommande,  et on alimente le récepteur.

Comme vous avez pu normalement le constater par vos tests, la voie 1 du récepteur porte les informations du joystick droit de la télécommande pour les mouvement de gauche à droite. C'est donc ce mouvement que nous allons faire pour observer la réaction du signal.

Les signaux émis que l'ont observe sont de type PWM (Pulse Width Modulation), ce sont des signaux qui peuvent prendre deux états : l’état haut , 5V ou l’état bas 0V  et où l’information est modulée en fonction de la durée de ces états.

Puisqu'une image vaut mieux que 1000 mots : 

On observe ceci lorsque le joystick droit est en position tout à gauche:

et ceci quand le joystick droit est en position tout à droite :

La durée de l’impulsion est passée de 1ms à 2ms. l’information reçue par le récepteur est bien différente selon la position du joystick.

Par contre indépendamment de la durée de l'impulsion on observe que le signal se répète sur une durée ( période )  de 20 ms. 

La arduino doit donc tout simplement compter le temps que le signal passe à l'état haut pour savoir la valeur envoyée par la radiocommande ! 
Et cette valeur sera remise à jour toute les 20 ms ! 
Et pour le faire sur tous les channel rien de plus simple il suffit de le faire 6 fois sur si pins différents ! 

Voici une image montrant respectivement les canaux ch1 et ch2 du récepteur sur les voies 1 et 2 de l’oscilloscope.


Nous allons donc relier la broche signal de chaque voie du récepteur à une broche entrée/sortie numérique de la carte.

Affichage des données du récepteur sur le moniteur série :


L’image suivante illustre le montage où nous avons branché les voies 1 à 6 sur les pins 2 à 7 de l'arduino ! ( Nous avons sauté les pins 0 et 1 car ils s'agit des pins RX et TX utilisé pour afficher des textes dans le moniteur série ! )  et le récepteur est alimenté par la arduino, la arduino étant alimenté par le port USB.

Le but est de mesurer le temps à l'état haut sur ces pins. Pour cela il existe une fonction qui le fait pour vous : la fonction "pulseIn" .
Elle prend en paramètre 3 éléments : le numéro du pin  ( entre 2 et 7 dans notre cas ) le niveau logique à " compter " , puisque nous voulons compter l'état haut nous devrons mettre " HIGH " et une valeur maximum , un timeout = le délai maximal d’attente de l’impulsion en microseconde. Cette dernière valeur doit être plus grande que la période du signal qu'on veut lire. Nous pourrons mettre par exemple  25000 > 20000us = 20 ms.
La fonction retourne le temps ainsi mesuré et retourne 0 si aucun signal à l'état haut ne s'est déclenché dans le délais imparti indiqué en 3 ème paramètre. 

Normalement maintenant vous savez tout ce qu'il faut pour utiliser la fonction pulseIn, mais si vous voulez quand même chercher à en savoir plus sur la fonction vous pouvez vous référer à la documentation officielle anglaise

Voici un programme utilisant la fonction pulsIn permettant à la carte arduino de lire et d’afficher les données transmises.

Si vous avez besoin d'un peu de révision pour bien comprendre le programme ci dessus, n'hésitez pas à revoir certaine partie de l'ouvrage pour débuter avec arduino ! 

D'expérience il semble important de laisser une fonction “delay” entre chaque fonction “pulseIn” de manière à laisser le temps à la carte Arduino de lire les largeurs d’impulsions.


Après le téléversement du programme, le moniteur série doit afficher ça :

Si rien n’est affiché ou seulement des caractères spéciaux, vérifiez que le nombre de baud (en bas à droite) correspond bien à celui définit à la ligne « Serial.begin ».

Maintenant, allumez la télécommande et vérifiez que la led du récepteur s’allume.

Vous pouvez ensuite jouer avec les différents boutons de la manette pour trouver à quelle voie correspond chacun d’eux. Le moniteur devrait afficher des valeurs comprises entre 1000 et 2000 pour chaque voie.

Il ne vous reste désormais plus qu’à faire un programme qui réagit en fonction des informations reçues !

Par exemple, on peut utiliser un écran lcd muni du module I2C pour écran LCD.

Voici le programme qui permet l’affichage.

Et le résultat en image !

Si vous voulez un peu plus de détail sur l'utilisation de l'écran lcd, c'est par ici !