Voici donc la phase 1 de ce projet, réalisée avec ce que j'avais en stock en attendant les pièces pour la phase 2.

Fonctions de base du char

telecommande.jpg

A la base, le char dispose d'une télécommande 4 voies permettant de gérer le déplacement, la rotation de la tourelle, l'élévation du canon et le tir. Le char tire des billes de 6mm grâce à un système à air comprimé de type softgun.

La manette de droite est utilisée pour le déplacement (avant - arrière - à gauche - à droite) avec une certaine proportionnalité des commandes.

La manette de gauche fonctionne en tout ou rien et sert à faire tourner la tourelle (manette à gauche - droite), faire varier l'élévation du canon alternativement de haut en bas (manette en arrière) et actionner le moteur de tir (manette en avant).

En plus, la télécommande dispose de trois boutons :

  • un pour "démarrer le moteur" avec le son assorti, vraoum pout-pout ;
  • un pour simuler la mitrailleuse (bouton G) avec bruitage également et, ce qui nous intéresse plus particulièrement, clignotement d'une Led si le char en est pourvu (ce qui n'est pas le cas du mien, mais le signal existe tout de même) ;
  • un pour simuler un tir de canon (bouton K) avec bruitage et simulation du recul par un mouvement sec d'avant en arrière des moteurs de propulsion et, là encore, activation d'une Led infrarouge, élément d'un système d’émission-réception de simulation de combat si le char en est équipé.

Les deux principales limitations des commandes sont donc l'élévation du canon qui se fait en mode oscillant continu et le pointage de la tourelle assez violent en tout ou rien. De plus, viser au jugé à distance fait qu'il est difficile d'atteindre une cible plus petite qu'un éléphant au-delà de trois mètres.

Let's hack.

Et voici Charduino

IMGP5056blog.jpg

L'intégration de l'Arduino vient en complément du module de télécommande d'origine dont on récupère un certain nombre de signaux, elle ne le remplace pas. Sur la photo (cliquez dessus pour l'agrandir) on peut voir l'Arduino et la carte électronique maison à l'arrière du char ainsi qu'une partie des câblages.

Pour cette phase 1, le plan général est le suivant :

  • déclencher le tir du canon avec le bouton K (ce qui permet de libérer la commande "manette gauche en avant" pour la phase 2) ;
  • ajouter un pointeur laser pour disposer d'une véritable visée.

Pour m'aider dans cette tâche, je me suis inspiré des schémas électriques du module de télécommande disponibles ici et .

Bouton de tir

Pour activer le tir avec le bouton K, il fallait faire deux choses :

  • récupérer le signal du dit bouton
  • désactiver la simulation de recul qui nuit grandement à la précision.

Pour cela, j'ai récupéré sur la platine de la télécommande le signal envoyé à la Led infarouge du simulateur de combat. Si on regarde les schémas électriques, on se rend compte que le signal en question est simplement une mise à la masse du pin connecté à la branche (-) de la Led. C'est donc très simple à récupérer, il suffit de connecter le pin en question à un des pins de l'Arduino et de surveiller le passage de ce dernier de HIGH à LOW.

Lorsque le pressage du bouton est détecté, deux actions simultanées ont lieu:

  • un pin de l'Arduino envoie un signal HIGH au moteur d'activation du canon via un MOSFET pendant 1,8 secondes, délai nécessaire à l'armement du piston et tir ;
  • un autre pin envoie un signal HIGH à deux relais qui coupent l'alimentation des moteurs de propulsion (les petits boîtiers bleus visibles entre les moteurs sur la photo ci-dessus), désactivant la simulation de recul. J'ai trouvé cette idée , la suppression de cet affreux simulacre faisant apparemment l'objet d'un consensus général.

Je n'ai pas utilisé d'interruption sur l'Arduino pour détecter le signal de la Led : comme celle-ci envoie un signal haute fréquence sensé être décodé par un récepteur, l'interruption le détecte de multiples fois si bien que c'est très compliqué à gérer. Dans la configuration retenue, avec une détection "classique" dans la boucle du programme, les actions sont déclenchées dès le premier signal et la Led a fini de clignoter depuis longtemps à la fin de la séquence de tir.

Viseur laser

IMGP5077blog.jpg

Le pointeur laser est un module vert de 5 mW. Il est TRES brillant, il faut faire très attention à ne pas se le mettre dans les yeux. C'est un peu le minimum pour être visible en extérieur, les classiques lasers rouges de 1 mW étant quasi invisibles. On peut par ailleurs choisir la puissance du laser via l'interrupteur qui servait anciennement à désactiver le canon à air comprimé, en faisant passer le courant d'alimentation en direct ou par une résistance de 4,5 ohms.

Le laser est monté en parallèle au canon, peut être allumé ou éteint à distance. Pour ce faire, j'ai utilisé le bouton assigné à la mitrailleuse (bouton G). Le montage du laser à la Patafix est provisoire en attendant la suite.

La séquence des modes et la suivante :

  • mode 0, "normal" : pointeur laser éteint ;
  • mode 1, "visée" : pointeur laser allumé.
  • retour au mode 0.

Pour passer d'un mode à l'autre, il fallait détecter l'appui sur le bouton G. Là encore, c'est le signal envoyé à la Led de la mitrailleuse qui est récupéré. Par contre ici, pas de masse commune avec le reste, j'ai même court-circuité la batterie en la cherchant... Il y a juste une tension de 5v envoyée à la Led. Je suis donc passé par un optocoupleur pour récupérer ce signal. D'un côté on "lit" le signal 5v, de l'autre on relie un pin de l'Arduino à la masse et on détecte le passage de HIGH à LOW.

Comme là aussi le signal est clignotant (après tout c'est une mitrailleuse), il faut mettre un petit délai après détection du premier signal, en l'occurrence 400 ms.

Chaque appui sur le bouton passe au mode suivant, faisant varier le signal envoyé au MOSFET relié au laser de LOW à HIGH.

Voici le code de l'ensemble, ce n'est pas bien compliqué :

// Pin et variable canon
const unsigned int GUN_PIN=3; // pin d'écoute du bouton K
const unsigned int TirPin=A5; // pin d'action du moteur de tir
const unsigned int ATRPin=A4; // pin des relais de l'ATR

// Pin et variables mode
const unsigned int MODE_PIN=2; // pin d'écoute du bouton G
int mode=0; // mode par défaut

// Laser
const unsigned int LaserPin=8;

void setup() {
  pinMode(LaserPin, OUTPUT);
  pinMode(MODE_PIN, INPUT);
  digitalWrite(MODE_PIN, HIGH);// activation pull_up
  pinMode(TirPin, OUTPUT);
  pinMode(ATRPin, OUTPUT);
  pinMode(GUN_PIN, INPUT);
  digitalWrite(GUN_PIN, HIGH); // activation pull_up
  delay (1000); // délai de mise en route pour signal propre
}

void loop() {
  // changement de mode
  if (digitalRead(MODE_PIN)==LOW){
    mode=mode+1;
    delay (400);
  }

  switch(mode) {
  case 1: // laser allumé
    digitalWrite(LaserPin,HIGH);
    break;
  default:
    mode=0; // laser éteint
    digitalWrite(LaserPin,LOW);
  }

  // séquence de tir
  if (digitalRead(GUN_PIN)==LOW){ // bouton K enfoncé
    digitalWrite(TirPin,HIGH); // activation du moteur du softgun
    digitalWrite(ATRPin,HIGH); // coupure des moteurs de propulsion par les relais (désactivation du "recul")
    delay(1800); // délai nécessaire pour que le moteur arme le piston et tire
    digitalWrite(TirPin, LOW);
    digitalWrite(ATRPin, LOW);
  }
}

Conclusion

Nous voici donc avec un char disposant d'un viseur laser actionnable à distance, d'une séquence de tir actionnée par un bouton et d'une commande libre sur la télécommande. A suivre...