Solution retenue: la ficelle est utilisée comme une courroie qui passe par un moteur DC à une de ses extrémités, et une poulie à l'autre extrémité (un peu comme une corde à linge). Près de chaque extrémité, on place également une LED infrarouge et un phototransistor: lorsque la sorcière passe entre la LED et le phototransistor, un Arduino se chargera d'inverser le sens de rotation du moteur pour que la sorcière retourne à son point de départ.
Connexions des capteurs
Chaque LED infrarouge est alimentée au moyen de l'alimentation 5 V de l'Arduino. Comme toujours, il faut la placer en série avec une résistance de protection (j'ai utilisé 220 Ω). Le courant doit entrer dans la LED par sa broche la plus longue, qui doit donc se trouver du côté 5 V.
Les deux phototransistors sont branchés en émetteur commun: l'émetteur (la plus longue des deux broches) est donc relié à la masse:
La sortie du premier phototransistor est reliée à l'entrée 7 de l'Arduino, et celle du deuxième phototransistor est reliée à l'entrée 8 de l'Arduino.
Connexions du moteur
Pour contrôler le moteur, j'ai utilisé un L293D (il n'est utilisé qu'à moitié, puisqu'il est conçu pour contrôler deux moteurs):
Ne pas oublier de brancher ensemble toutes les masses (GND): les 4 pins du L293D, celle de l'Arduino, celle de l'alimentation du moteur, celle des LEDs et des photodiodes.
Le sketch
Le sketch n'est pas spécialement compliqué: lorsque la sorcière passe entre une LED et son phototransistor (ce qui indique qu'elle a atteint une des extrémités de son parcours), l'Arduino ordonne au moteur de changer son sens de rotation.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/************************************************************************************* | |
* Mouvement de va et vient. Une paire LED IR + phototransistor se situe aux | |
* deux extrémités du mouvement d'un objet. Un moteur change sa direction de | |
* rotation lorsqu'un des signaux infrarouges est interrompu par l'objet en mouvement. | |
* | |
* http://electroniqueamateur.blogspot.com/2013/10/mouvement-de-va-et-vient.html | |
* | |
*************************************************************************************/ | |
// les pins | |
#define photoTransPin1 7 // premier phototransistor | |
#define photoTransPin2 8 // deuxième phototransistor | |
#define motorPina 3 // Marche avant du moteur | |
#define motorPinb 4 // Marche arrière du moteur | |
#define speedPin 9 // L293D enable pin du moteur | |
int motorSpeed = 200; // 0 à 1023 (à modifier selon la vitesse désirée) | |
int motorDirection = 0; | |
int directionChangee = 0; | |
void setup() { | |
pinMode(photoTransPin1, INPUT); | |
pinMode(photoTransPin2, INPUT); | |
} | |
void loop() { | |
int capteur1 = digitalRead(photoTransPin1); | |
int capteur2 = digitalRead(photoTransPin2); | |
if ((capteur1) || (capteur2)){ // un des signaux est interrompu | |
if (!directionChangee){ //le sens de rotation du moteur n'a pas été changé | |
//depuis le début de l'interruption du signal | |
motorDirection = !(motorDirection); // on change le sens de rotation | |
directionChangee = 1; | |
} | |
} | |
else { | |
directionChangee = 0; | |
} | |
analogWrite(speedPin, motorSpeed); | |
digitalWrite(motorPina, !(motorDirection)); | |
digitalWrite(motorPinb, motorDirection); | |
delay(10); | |
} |
Yves Pelletier (@ElectroAmateur)
Bonjour,
RépondreSupprimertout d'abord merci pour cet article.
je souhaite également réaliser un mouvement de va et vient mais je voudrais qu'il soit intermittent ; pour être plus précis ce va et vient permettrait de tourner un robinet d'un quart de tour toutes les 15 minutes, rester en place 1 minute puis revenir dans sa position initiale (quart de tour inversé) et rester en place 15 minutes. Et ainsi de suite.
Moi j'avais pensé à un système de bielle mais ma difficulté c'est la programmation de mes deux temps.
Enfin dernière difficulté, je souhaiterai que ce soit réglable facilement par exemple 3 choix en 15min/1min ou 30min/2min ou 45/2 etc.
voila, pouvez vous m'aider ?
Et merci encore pour cet article
Raph