Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
17 mai 2012 4 17 /05 /mai /2012 18:57

 

Video de démo  (mise à jour du 01.06.2012)

RC_STROKES MODE D'EMPLOI  mise à jour le 18.05.2012

Gridstick-Arduino.jpg

Ce programme pour Arduino Uno est destiné à être utilisé conjointement avec le module Gridstick décrit par ailleurs, qui vient se connecter sur l' Arduino et sert d'interface entre celui-ci et un récepteur de radiocommande standard.

Ce module utilise trois voies ( trois sorties du récepteur) et permet de disposer d'un nombre virtuellement illimité de commandes à partir de ces trois voies.

 

gridstroke.jpg

 

 Le principe retenu  est celui des "strokes" ("gestes"), concept développé initialement par Scott Gray sur le site Astromech.net et dont voici la description: un des deux manches ("sticks") de l'émetteur est réservé à la saisie des "strokes". Ce manche utilise 2 voies de l'émetteur, une pour le déplacement horizontal et une pour le sens vertical. Une 3e voie Tout ou Rien (TOR)  est utilisée comme interrupteur de validation: En manoeuvrant cet interrupteur (ou en appuyant sur ce bouton) on indique le début de la saisie, en le relâchant on valide la saisie. 

On peut diviser  le carré représentant les différentes positions possibles du manche en 9 "zones" à chacune desquelles on attribue un nombre entre 1 et 9. Un stroke est constitué d'un trajet du manche à travers ces différentes zones, qui sera traduit en une suite de chiffres représentant les zones parcourues pendant ce trajet. Il suffit de mémoriser et d''attribuer une fonction à chacun de ces trajets pour disposer d'une liste de commandes aussi longue qu'on le désire. De plus, la forme du trajet obtenu peut constituer un moyen mnémotechnique pour retenir facilement telle ou telle fonction. Par exemple, dessiner un "S" pour commander la carte son, "L" pour les lumières, etc...

stroke--L.JPG

 

EXEMPLE: STROKE = "74123"

 

NB: Avec ce sketch, si la saisie démarre alors que le joystick est en position centrale, le point de départ (5) ne fera pas partie du stroke: vous pouvez donc basculer l'inter avant ou après avoir joint le point de départ (mais pour les points situés dans les angles, je trouve plus facile de basculer l'inter après, car le système de ressorts de rappel de la plupart des manches d'émetteur rend le trajet en diagonale assez aléatoire) 

 

Avec le programme proposé, la détermination de la position du joystick est confiée au module Gridstick, à base de PIC 16F628A, qui se charge de la traduction des temps de voies (les sorties du récepteur sont en fait des trains  d'impulsions de durée variable entre 1 et 2 millisecondes, répétés toutes les 20 millisecondes) en un nombre correspondant à la position sur la grille 3x3. L'intérêt de faire appel à un circuit spécialisé plutôt qu'à l' Arduino pour faire la conversion, c'est que celui-ci est déchargé de la partie critique du "timing", il lui suffit de venir lire les entrées logiques sur lesquelles la valeur de la position sur la grille est directement disponible à n'importe quel moment. 

L' ensemble est de ce fait plus réactif, le système est très fiable et les strokes facilement reproductibles. 

Le programme permet l'acquisition, la  reconnaissance et la suppression de strokes. La longueur maximale de ceux-ci (modifiable dans le programme) est de 20 caractères (20 déplacements consécutifs dans la grille), leur nombre maximal est fixé à 30. On peut en définir plus si nécessaire en changeant le paramètre MAXSTROKES, mais il ne faut pas oublier qu'il faudra les mémoriser !

De plus, la sauvegarde se fait dans la mémoire non volatile de l'Arduino (EEPROM) et on est donc limité à 1K (ce qui correspond à environ 50 strokes de 20 caractères).( Il est toujours possible d'étendre la mémoire au moyen d'une EEPROM externe le cas échéant).

Le logiciel prévoit également une fonction "autorepeat" commode: celle-ci permet en manoeuvrant l'inter de validation (aller-retour) sans déplacer le manche de répéter la dernière commande. Cette fonction peut être désactivée ou réactivée à tout moment.

 

Pour la mise au point et la création des strokes, il faut ouvrir le "Serial Monitor" dans le menu Tools de l'éditeur de scripts Arduino.

Un exemple de copie d'écran  du moniteur ci-dessous montre quelques messages obtenus.

 

ARDUINO STROKE CONTROLLER V1.0 (c) THX-1138 2012

CHARGEMENT DES STROKES EN EEPROM...

OK

7412365

8745

874123

741232147

STROKE DETECTE: 1

*********** LISTE DES STROKES *********

0: 987456321

1: 741232147

2: 4569874123

3: 14789

4: 6565

5: 2525

6: 74123

8: 858585858585

9: 45454545

10: 454545

******************************************

6565

STROKE DETECTE: 4

*** AUTOREPEAT ACTIVE ***

74123

STROKE DETECTE: 6

REEXECUTION STROKE 6

987456321

STROKE DETECTE: 0

********* CREER NOUVEAU STROKE *********

- CE STROKE EXISTE DEJA: NUMERO 6

     VOULEZ-VOUS L'EFFACER ?

 STICK EN BAS: OUI, A GAUCHE: NON

 -------------- ANNULE -------------------

858585858585

STROKE DETECTE: 8

6565

STROKE DETECTE: 4

*** AUTOREPEAT DESACTIVE ***

  


 

Les commandes de base sont au nombre de 5, elles sont accessibles elles aussi au moyen de strokes prédéfinis:

Après chaque entrée de stroke reconnu, la LED présente sur la carte de l'Arduino (en sortie 13) clignote 3 fois pour indiquer que le stroke est valide.

Une fois l'Arduino déconnecté de l'ordinateur, cette LED permet de constater la bonne réception d'un stroke (en l'absence d'autres dispositifs - il est très facile d'adapter un afficheur LCD 2x16 série par exemple en lieu et place du moniteur série...)

Il est possible de revenir aux "réglages d'usine" c'est-à-dire à la configuration initiale des 5 strokes de base uniquement, en maintenant le manche dans une position latérale quelconque (pas au centre) et de redémarrer l"Arduino (en appuyant sur le bouton reset de la carte Arduino).

 

1-STROKE "S": CREATION D'UN NOUVEAU STROKE 

 

Saisie:

- amener le joystick en haut à droite (position 9)

- basculer l'inter de validation de début de saisie

- déplacer le manche suivant un "S": coin en haut à gauche, puis à gauche rangée du milieu, puis à droite rangée du milieu, puis en  bas à droite, puis en bas à gauche. (ça a l'air compliqué comme ça, mais c'est très facile et rapide à éxécuter)

- rebasculer l'inter de validation (fin de saisie)

 

stroke-S.JPG 

STROKE="987456321"

 

Fonction: Le programme attend que vous saisissiez un nouveau stroke; Dès que la saisie est terminée (inter de validation revenu à sa position de repos), celui-ci affiche le stroke (la suite de chiffres) et son numéro d'enregistrement. C'est ce numéro qui permettra de déclencher les actions  programmées (voir ci-dessous).

Si ce stroke existe déjà, le logiciel vous le signale et demande si vous souhaitez le supprimer (la réponse se fait avec le joystick)

 

 

2-STROKE double "L": LISTE DES STROKES

 

Saisie:

- amener le stick en haut à gauche

- basculer l'inter de validation

- déplacer le stick en bas à gauche, puisn en bas à droite. 

- refaire le chemin inverse: en bas à gauche, puis en haut à gauche.

- replacer l'inter de validation au repos.

 

 

stroke LL

STROKE="741232147"

 

Fonction: Le moniteur série affiche la liste des strokes en mémoire avec leur numéro.

  Une fois tous vos strokes créés, imprimer cette liste pour pouvoir s'y référer et programmer les actions correspondantes.

 

 

3-STROKE "e": éCRITURE en EEPROM

Saisie:

- amener le stick à gauche ligne du milieu

- actionner l'inter de saisie

- déplacer le stick à droite ligne du milieu

- stick en haut à droite

- en haut à gauche

- en bas à gauche

- en bas à droite

- rebasculer l'inter

 stroke-e.JPG

STROKE="4569874123"

 

Fonction: Ecrit l'ensemble des strokes en EEPROM.

 

 

4-STROKE "r" rELECTURE EEPROM

 

Saisie: -amener le stick en bas à gauche

-activer l'inter

-stick en haut à gauche

-stick en haut à droite

-relâcher l'inter

 stroke-r.JPG

STROKE="14789"

 

Fonction: Recharge les strokes de l' EEPROM

 

 

5-STROKE "AUTOREPEAT ON/OFF"

 

Saisie: - basculer l'inter de saisie

- déplacer deux fois le stick à droite ligne du milieu (avec retour au centre)

- rebasculer l'inter

 

 stroke-ar.JPG

STROKE="6565"

 

Fonction: Active / désactive la fonction autorepeat:

Cette fonction permet de réactiver le dernier stroke valide sans avoir à le saisir à nouveau (par exemple: déclenchement d'un son aléatoire): Il suffit pour cela de 

faire un aller-retour avec l'inter de saisie sans toucher au joystick.

 

 

PROGRAMMATION DES ACTIONS A EFFECTUER:

 

C'est bien beau tout ça, me direz-vous, mais comment c'est-y que je commande mon périscope, et que je fais clignoter mes lumières avec ton truc ? Eh bien vous répondrai-je, rien de plus facile ! Il suffit d'aller en fin de programme, vous verrez une suite d'instructions "CASE" suivies d'un nombre, ce nombre représente le numéro du stroke, il vous suffit d'insérer les instructions correspondant à ce que vous voulez faire entre le "CASE" et le "BREAK": par exemple, vous pouvez envoyer des commandes I2C pour piloter une carte son, ou un Logic Display, ou une carte de commande moteurs, ou des ordres pour piloter des servomoteurs, ou une carte à relais, ou même un autre Arduino...

Vous pouvez aussi créer de véritables sous-programmes qui réagiront à la position du joystick en utilisant la fonction "stickpos()" qui retourne la position du manche dans la grille 3x3, les possibilités ne sont limitées que par la taille de la mémoire programme et celle de l'EEPROM. A vous de jouer !

 

Ce programme ne doit pas être considéré comme un aboutissement, c'est plutôt un "squelette" appellé à évoluer et à s'etoffer, mais tel qu'il est, je pense qu'il peut déjà rendre pas mal de services, c'est ce qui m'a poussé à vous le proposer. Vos remarques et suggestions seront les bienvenues ...

Télécharger le sketch Arduino:

RC_Strokes_fr  version en français

RC_Strokes_en english version

 

Olivier LANVIN (THX-1138 sur www.r2builders.fr) 2012

Partager cet article
Repost0

commentaires