Contrôle d’un store par Joystick et mode automatique

1.Introduction

Afin de contrôler grâce à un joystick ainsi que d’enclencher une rotation automatique des volets d’un store de type vénitien, un arduino va être mis en place. Il s’agira de pouvoir switcher du mode « manuel » (joystick) au mode automatique facilement et sans conflit entre les deux modes, ainsi que de programmer une rotation en fonction du temps d’un moteur relié au mécanisme des volets.

2. Matériel et Méthode

2.1 Matériel

  • un moteur
  • une alimentation externe (4 piles AA)
  • une plaque arduino uno
  • un transistor
  • une diode
  • un joystick
  • câbles et résistance 330 ohm

2.2 Méthode

Tout d’abord, il est très important de ne pas alimenter le moteur via l’arduino, et ce pour 2 raisons : premièrement, le moteur est une source terrible de parasites au niveau du courant, parasites pouvant « remonter » jusqu’aux autres composants et pouvant endommager la carte voire la rendre inutilisable. Deuxièmement, ce moteur a besoin de beaucoup plus d’énergie que pourrait en fournir une simple carte arduino uno, s’il était directement branché dessus il pomperait toute l’énergie. J’ai donc dû alimenter séparément ce moteur, en faisant attention de ne créer aucun lien direct entre l’alimentation externe, source de puissance beaucoup plus élevée que les divers composants et outils habituels d’arduino ne peuvent supporter. Etant donné que j’avais tout de même besoin de l’alimentation 5V de l’arduino afin d’alimenter le joystick, les quelques précautions ont dû être prises pour clairement séparer les 2 alimentations sur le broadboard. Afin d’éviter tout retour de courant face aux parasites du moteur, il m’était obligé de placer une diode dans le circuit où le moteur était alimenté, cette diode permettant de limiter le direction du courant en simple sens unique, protégeant ainsi la carte arduino de tout bruit électrique indésirable. Ensuite il a fallu relier ce moteur à une PIN, afin d’en avoir le contrôler en lui envoyant ou non un courant via l’arduino. Mais de nouveau, un lien direct entre le moteur et l’arduino serait dangereux, je me suis donc servi d’un transistor pour joindre les deux. Le transistor a la capacité de pouvoir gérer les courants élevés. Il relie donc une PIN de l’arduino, le ground et le moteur.

ss__2016-05-11_at_04.18.55_.jpg

Côté code maintenant. Je commence par indiquez mes variables, donc les pins de l’axe X du joystick, de son bouton Z et du moteur. La variable myled servait quant à elle à effectuer les tests avant l’implémentation du moteur. Je comptais initialement pouvoir contrôler la vitesse du moteur, j’avais donc mis en place un système de vitesse selon l’inclinaison du joystick, mais j’ai choisi de ne pas le faire car la vitesse/la puissance du moteur suffit même dans ses plus faibles actions, il ne faudrait pas endommager le store à cause d’une rotation trop brusque impossible à arrêter par le store dans ses limites. Une dernière variable vient stocker la valeur pour savoir dans quel mode est-ce que le projet fonctionne, ici 0 pour manuel et 1 pour automatique.

Dans le setup() ensuite je décris mes PINs, le joystick donc en entrée et le moteur (via le transistor) en sortie. Je mets après le Serial.Begin servant à synchronisé les composants pour pouvoir les lire correctement.

Dans la partie loop(), j’utilise deux variables pour lire la position de mon joystick et de son bouton, puis je place la première action manuelle, possible seulement si le mode est bien manuel et si le bouton est appuyé. Cela a pour effet de basculer vers le mode automatique, d’enclencher un chronomètre qui activera le moteur toutes les 30 minutes, et d’arrêter le moteur. Même chose pour passer d’automatique à manuel, et le chronomètre est remis à zéro. Ensuite, je place les commandes pour activer le moteur grâce au joystick. Je vérifie donc que le mode manuel soit actif, et je défini à partir de quel valeur de X le moteur va être activé. Il n’est pas judicieux de choisir le milieu pile du joystick comme zone de changement d’action, car cette valeur n’est pas fixe. J’ai donc dû définir, en cherchant et testant à tatillon, une deadzone, c’est-à-dire une zone où le joystick va être considéré comme ni incliné dans un sens, ni dans l’autre, ce qui évite d’activer ou de désactiver le moteur par inadvertance lorsque que le joystick est au « repos ». Ici, en inclinant le joystick vers la gauche, j’active le moteur, tandis que vers la droite, il s’arrête. Je place enfin la condition pour laquelle le moteur s’active en mode automatique. Au bout de 30 minutes après l’enclenchement de ce mode, le moteur tournera pendant une demi-seconde puis s’arrêtera et le chronomètre sera réinitialiser.

La fin du code m’a servis à vérifier l’état des variables pendant les phases de tests.

3. Résultats

Les résultats sont moindre par rapport à l’objectif initiale, car la tâche s’est avérée plus complexe que je ne le pensais, notamment dans la partie électronique du système dans lequel l’utilisation de relai m’est resté trop flou pour en faire usage. Le moteur ne peux donc ainsi pas changer de direction, car il faudrait inversé le courant qu’il reçoit (positif au lieu de négatif et négatif au lieu de positif). Le joystick s’avère très précis et le moteur remplit sa fonction, et chaque mode est distinct sans entrer en conflit.

4. Discussion

Les résultats sont donc effectifs, mais pas au niveau visé. Cependant, cela m’a permis d’approcher concrètement ces questions de courant, de parasites et de protection éléctrique. Bien que mettant documenté sur la chose, j’ai d’abord fait mes tests avec des LEDs plutôt que le moteur dont l’utilisation maladroite aurait pu grillé des composants indispensables. Cela ne m’a pas empêcher de commettre une erreur, que j’ai immédiatement remarqué par la fumée se dégageant de l’alimentation, j’ai bien sûr eu le réflexe de retirer le câble que je venais de poser, et j’ai refais le tour du câblage et des différents composants déjà installés. J’ai d’ailleurs pu remarquer que ce genre d’erreur est très vite arriver, puisque dans le guide même de Sparkfun, le montage dédié aux relais (numéro 13)contenant un schéma dont la diode était dans le mauvais sens, ce qui aurait pu avoir de fortes conséquences, heureusement il ne s’agissait ici que de simple LEDs, qui n’ont subies aucun dommage. L’ajout donc de contrôle de direction n’est pas loin, et elle serait très envisageable pour ce projet, mais le degrès de complexité des circuits impliqués est élevé et demande encore plus de précautions.

5. Conclusion

En plus de l’ajout de direction, il serait intéressant de pouvoir contrôler la hauteur du store à l’aide d’un deuxième moteur. Il pourrait aussi être intéressant de tester la limite de la puissance du moteur, pour savoir si ce projet ce transposable sur d’autre modèles, d’autre types de stores, ce qui à une certaine échelle rejoint le principe des stores électriques. On peut donc aussi imaginer une comparaison des méthodes utilisés en ingénierie pour répondre à ces objectifs selon les aspects pratiques, esthétiques et financiers de ces travaux.

Sources

https://123d.circuits.io/ https://learn.sparkfun.com/tutorials/transistors http://www.bit-101.com/blog/?p=3831 http://www.instructables.com/id/DIY-Relay-switch-motor-controller-Arduino/ https://learn.sparkfun.com/tutorials/sik-experiment-guide-for-arduino---v32/experiment-13-using-relays