Objectif
L'objectif est de réaliser un système de cibles pivotantes, qui apparaissent et disparaissent de façon aléatoire, pour le tir de loisir (airsoft, air comprimé, co2, PCP, etc...).
Vous pouvez voir le résultat dans la vidéo ci-dessous :
Description du fonctionnement
Les cibles sont montées chacune sur une équerre, elle-même fixée sur un servomoteur.
Afin de ne pas retransmettre tout le choc au servomoteur, toutes les jonctions sont montées sur ressorts.
Chaque cible est indépendante des autres. Statistiquement, il y aura donc des moments où deux ou trois cibles apparaitront au même moment.
Leur apparition / disparition est réglée par deux paramètres : un durée aléatoire pendant laquelle la cible est masquée, et une durée aléatoire pendant laquelle elle est visible.
Ces paramètres sont modifiables dans le code donné ci-dessous.
Concernant l'alimentation, j'utilise une batterie 12 volts, ou une alimentation de type ordinateur, toujours en 12 volts. J'utilise un convertisseur pour envoyer 9 volts à l'arduino (en théorie il prend 12 volts sans problèmes, mais j'ai parfois eu des soucis en alimentant l'arduino avec cette tension, donc je préfère prendre cette précaution).
Les servomoteurs, eux, doivent être alimentés par une tension comprise entre 4.8v et 6v. J'avais sous la main un convertisseur 12v -> 5v qui servira pour cet usage, même si dans l'idéal 6 volts aurait été mieux (plus de vitesse et/ou de couple).
Les connections entre câbles se feront avec des connecteurs à levier de type Wago, aucune soudure ne sera nécessaire, pour ceux que cela inquiéterait ^^
Branchements
• Alimentation 9V :
+ sur la broche VIN de l'arduino
- sur la broche GND de l'arduino
• Alimentation 5V :
Sert à alimenter les servomoteurs
• Chaque servomoteur a 3 fils :
- fil rouge sur le + de l'alimentation 5V
- fil marron sur le - de l'alimentation 5V
- fil orange sur une broche "digital" de l'arduino : dans notre cas, les 3 servos sont respectivement sur les broches D6,D7 et D8 de l'arduino
Pour résumer, vous aurez donc 5 fils connectés à votre board arduino. Sur la photo ci-dessus, on peut voir l'arrivée du courant en haut (VIN et GND) ainsi que les 3 fils de signal qui partent aux servomoteurs en bas (D6,D7,D8).
Vous pouvez télécharger un croquis approximatif des branchements ici.
Matériel nécessaire
Tout le matériel nécessaire est listé ci-dessous.
Pour les cibles elles-même, j'ai utilisé un panneau destiné à la gravure de métal, que j'avais déjà. Vous pouvez utiliser n'importe quelle matière, dès lors qu'elle résistera aux impacts. L'idéal étant une matière pas trop lourde, pour ne pas trop faire souffrir les servomoteurs et leur permettre une rotation rapide.
J'avais déjà les trois servomoteurs, il s'agit de modèles bas de gamme, mais seront largement suffisants pour ce genre d'applications.
De même, j'avais également déjà la carte Arduino Nano, vous pouvez utiliser une autre carte Arduino si vous en avez une, mais la Nano est la moins coûteuse, et elle a toutes les capacités nécessaire pour gérer cette application.
- 1 Arduino Nano + câbles
- 1 terminal arduino avec borniers
- 3 servomoteurs MG995
- 3 supports de servomoteurs
- 3 équerres (70x70x50mm)
- 3 cibles (12x12cm)
- 1 convertisseur DC/DC 12v -> 5v
- 1 convertisseur DC/DC 12v -> 9v
- 1 batterie ou une alimentation 12 volts
- Connecteurs Wago à levier
- + visserie, rondelles, ressorts
Code source
Vous pouvez télécharger le code source (format .ino) en cliquant ici.
Le programme nécessite la librairie servo.h. En outre, les variables à ajuster sont les suivantes :
Servomoteur #1 : s1_pos_open, s1_pos_close
Servomoteur #2 : s2_pos_open, s2_pos_close
Servomoteur #3 : s3_pos_open, s3_pos_close
Les variables précédentes servent à déterminer la position "visible" et "invisible" des cibles. En fonction de vos servomoteurs, il faudra ajuster ces valeurs (qui en réalité représentent un angle), afin que les cibles soient bien face à vous quand elles sont visibles, et que leur tranche soit face à vous quand elles sont invisibles.
Les autres paramètres à régler sont le temps pendant lequel les cibles sont invisibles (par défaut, aléatoire de 5000 à 10000 ms, soit entre 5 et 10 secondes), et le temps pendant lequel elles sont visibles (aléatoire entre 1000 et 2000 ms, soit entre 1 et 2 secondes).
Si vous avez le moindre souci avec le code, n'hésitez pas à me demander.
Améliorations possibles
- Des capteurs de choc, afin que les cibles pivotent afin de se masquer, lorsqu'elles sont touchées. Attention, j'ai commencé à faire cette modification, le problème est que les capteurs (ou plutôt leurs soudures) ne supportent pas le choc, bien que l'impact ne soit pas directement dessus.
- De meilleurs servomoteurs (plus solides, plus rapides, avec plus de couple, permettant par exemple des cibles plus grandes pour des calibres et distances plus importants). Dans le cas de cibles très lourdes, il pourra être nécessaire de monter l'ensemble sur une platine pivotante à roulements.
- Alléger les équerres de montage, tout en conservant leur rigidité.
- Utiliser le maximum de voltage admissible par les servomoteurs (6 volts); on peut gagner entre 25% et 50% de vitesse de rotation.
- Augmenter le nombre de cibles, faire varier les tailles et formes.
- Sur un afficheur haute visibilité, afficher le délai entre l'apparition de la cible et l'impact.
- Programmer un bip sonore dès impact, et éventuellement le modifier pour indiquer le délai ci-dessus (exemple, 1 bip signifie un impact en moins d'une seconde, 2 bips un impact en moins de deux secondes...).
- Rendre les deux paramètres délais d'attente, et temps d'apparition, programmables sans avoir à brancher l'arduino (via des boutons poussoirs, par exemple).