les projets - modélisme
emetteur & récepteur multivoies rc

acquisition des données de pilotage :
Ou avec quoi piloter notre modèle...

 

hobbytronics usb host :

Un shield ARDUINO que je viens de découvrir et qui va bien m'aider dans mes expérimentations ...
Encore des choses qui avancent...

Cette interface permet de faire l'acquisitions des données d'un port USB Host sur plusieurs supports.
HobbyTronics a choisi de personnaliser le support accueilli, clavier, souris, joystick, clef USB, Bluetooth, modem GSM...
Il n'y a pas de librairies à installer car les données son accessible, soit en RS232 au format TTL, soit en I2C...
Chaque module pouvant être chaînée sur une boucle I2C,.toute la structure communication pourrait être possible avec seulement 2 lignes (A5 + A6).

Les données sont transmises sous la forme :
$JOY,90,90,180,90,90,90,90,90,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,07B5,0316\r\n

En I2C, les registres transmis correspondent à :

Register Data

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

X Axis
Y Axis
Z Axis
RX Axis
RY Axis
RZ Axis
Slider
Dial
Wheel
HAT
Button 1
Button 2
Button 3
Button 4
Button 5
Button 6
Button 7
Button 8
Button 9
Button 10
Button 11
Button 12
Button 13
Vendor ID High Byte
Vendor ID Low Byte
Product ID High Byte
Product ID Low Byte

Les 4 derniers registres permettent d'identifier le fabricant et le modèle de la manette...

 

Premier essai :

Je dispose d'une manette de jeux, sans publicité, Logitech WingMan Extreme, récupéré pour quelques pièces de monnaie dans un vide grenier.
J'avais gardé ça sous le coude en espérant pouvoir la connecter en analogique car elle dispose d'une prise DB15, suivie par un adaptateur USB.

Je raccorde donc tout ce petit montage avec mon Aduino Nano en I2C et je prends le petit fichier d'exemple disponible sur le site.
Je lance le moniteur série, et j'obtiens toutes les valeurs dont j'ai besoin pour identifier chaque voies sans difficulté particulière.
Les voies analogiques : haut et bas, droite et gauche, pivotement droite et gauche de la manette, manette des gaz, en gris sur la gauche de l'image.
Une voie pseudo analogique : sur le dessus de la manette, le petit TouchPad du centre, je lis la valeur 8, en poussant en haut, j'obtiens 0, puis 1 jusqu'a 7 en rotation horaire.
Les voies numériques concernent la gachette de tir, les 4 boutons haut / bas du dessus de la manette, les deux boutons encadrés de rouge sur le socle.

 

Second essai :

Je ressort encore une fois des cartons une autre manette de jeux vidéo pour confirmer mon premier essai.

Et là, je m'aperçoit que la manette n'est pas analogique mais numérique...
Chaque voie me donne 0 / 1 pour chaque action...
Sauf que...
En appuyant sur chaque bouton, je constate que lorsque j'appuie sur la touche 'MODE du centre, la LED du dessous passe de Vert à Rouge...
Et dans ce mode, la manette deviens analogique...
Je trouve donc des valeurs proportionnelles sur les mouvements des deux JoyStick...
Si ce n'est que la progressivité est plutôt violente. Donc difficile d'usage pour du modélisme...
Il faudra, pour un usage ultérieur confirmer les valeurs des 4 derniers registres pour vérifier si je peux identifier le mode de fonctionnement.
Cela permettrait l'usage de deux fonctions en une.
Un usage pour piloter le modèle en analogique, et en basculant le mode de piloter d'autres fonctions annexes avec les mêmes commandes...

 

Branchement pour essai de pilotage :

Trois petits servomoteur 9G ont été raccordés sur respectivement les sorties PWM D9, D10 et D11.
Elles permettrons de visualiser la direction, la vitesse et par rotation de la manette une fonction propulsion d'étrave...
L'interface USB Host est raccordée en I2C, libérant D0 et D1 utilisé par l'interface de programmation et évitant l'utilisation de bibliothèque RS232 virtuelle.

Petite aparté :
Vous remarquerez les deux petites pinces crocodiles sur la gauche de l'image.
En effet, à l'usage, il s'est avéré que l'alimentation par l'USB du Nano ou par la régulation 12V de la platine n'était pas suffisante.
La consommation des trois petits servo et l'alimentation de la manette USB était trop importante.
Je perdais la synchro de l'interface USB, LED bleu qui s'éteignait avec un fonctionnement erratique des servo.
J'ai donc du fournir un petit surcroît de puissance par mon alimentation 5V externe.
Tout est rentré dans l'ordre et fonctionne correctement...

 

Paramétrage des voies analogiques :

Lors de l'acquisition dans le moniteur série

 

Le code :

Un premier jet en adaptant l'exemple fourni sur le site d'HobbyTronics

Le fichier INO a télécharger

Le soft n'est pas du tout optimisé. Mais il a le mérite de fonctionner pour la phase de test.
Vous pouvez décocher les commentaires pour la gestion du port série pour obtenir simultanément les données de la manette sur le moniteur série.
Il sera réécrit avec les bibliothèque modélisme asynchrone de Philippe LOUSSOUARN. Une page dédiée sera publiée prochainement...
Dans l'attente, allez gratter dans sa rubrique Arduino, vous y trouverez votre bonheur

 

Des questions, des commentaires en direct ?

© 06/07/2017 - Dernière modification : 21/08/2017 - F4CVM / Pascal