Video de démo (mise à jour du 01.06.2012)
RC_STROKES MODE D'EMPLOI mise à jour le 18.05.2012
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.
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...
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="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="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="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="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="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