Commandes d'aiguilles: simplification avec mode Manuel

 Lors de notre dernier article nous avions envisagé d'ajouter un mode manuel pour la commande des aiguilles. C'est aussi l'occasion de réaliser un montage simple et surtout de le programmer dans un environnement plus facile à utiliser et très largement répandu.


Le montage :

 Toujours sur la base d'un Arduino Nano, le montage utilise un groupe de relais dont le nombre est ici de 4 pour commander 3 moteurs d'aiguilles (car limité en nombre d'entrés/sorties sur l'Aduino Nano), un ampli de puissance, des boutons poussoirs. 


Schéma de principe

Une première étape consiste à vérifier le principe de fonctionnement avec un montage sur une platine de test des boutons poussoirs et des points d'alimentation. On commence par câbler deux boutons poussoirs (deux couleurs différentes de capuchon de bouton si possible) avec leur résistance de 10 kOhm. Puis on relie ces deux boutons poussoirs à l'alimentation +5V et aux entrées de l'Arduino. Ce dernier est monté sur un support qui est équipé de petits borniers latéraux. L'Arduino peut être enlevé facilement (pour être remplacé par un autre). L'avantage de cette solution est que l'on n'a pas besoin de wrapper (voir articles précédents) et que les fils utilisés peuvent être ceux d'un kit de démarrage Arduino.

Les entrées des boutons poussoirs sur l'Arduino se suivent afin de simplifier le câblage.

Puis on câble les relais avec des fils équipés d'une broche mâle d'un côté et femelle de l'autre. La broche mâle est connectée au bornier de l'Arduino et la broche femelle va à une des entrées du groupe de relais.

L'alimentation du groupe de relais est en +5V. Toujours relier les +5V ensemble. Idem pour les masses.


Le montage avec la platine d'essai

Comme nous avons procédé par étape, le programme ci-après allume la LED intégrée au Arduino à chaque fois que l'on détecte l'appui sur un bouton poussoir. De même le groupe de relais contient des LEDs qui indiquent quel relais est commandé. 
Si vous voulez adopter une démarche prudente et bien vérifier que seulement la commande et les relais fonctionnent (sans l'ampli de puissance et les moteurs d'aiguilles), alors téléchargez le code ci-dessous et faites l'essai.
Lorsque que tout fonctionne correctement, vous pouvez ajouter l'ampli de puissance. Il est commandé par deux entrées IN1 et IN2. La broche ENA doit rester avec son jumper noir en place. 
Les alimentations sont du +5V provenant de la même source d'alimentation que pour l'Arduino et le groupe de relais. Nous avons utilisé une batterie portable pour les téléphones portables qui est reliée au port USB. Le +5V est celui de la broche idoine de l'Arduino. Surtout reliez bien les masses ensemble!

Le module de puissance nécessite une alimentation extérieure, ici il s'agit d'un pack d'accumulateur LIPO de 14,8V. Encore une fois reliez bien les masses ensemble!
Sur le module de puissance il y a un jumper noir qui est prêt du bornier de la première sortie. Il faut le retirer pour avoir les 14,8V en sortie sinon la tension sera limitée au 5V et cela ne permettra pas de commander les moteurs d'aguilles. 

Nous vous conseillons de câbler un moteur d'aiguille et de faire le test. Si tout se passe bien alors vous pouvez câbler les autres. En cas de problème, vérifiez bien que les fils sont bien serrés dans les borniers et que les masses sont toutes reliées.

Maintenant que votre montage fonctionne, vous pourrez vous plonger dans le code. 

Le code :

Il est très simple. Nous n'avons fait aucune optimisation pour vous montrer que la duplication des commandes peut être réalisée facilement pour augmenter la capacité à condition d'avoir suffisamment d'entrées/sorties sur l'Arduino. Il y a toujours moyen d'améliorer le montage !

/*
 Commande de moteurs d'aiguilles
 
 création 2021 par E. ZANDER

 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin_1 = 2;    // the number of the pushbutton pin
const int buttonPin_2 = 3;
const int buttonPin_3 = 4;
const int buttonPin_4 = 5;
const int buttonPin_5 = 6;
const int buttonPin_6 = 7;

const int ledPin =  13;       // the number of the LED pin
const int RelayPin_1 =  8;    // the number of the Relay pin
const int RelayPin_2 =  9;    // the number of the Relay pin
const int RelayPin_3 =  10;
const int RelayPin_4 =  11;
const int motor1pin1 = 12;    // the number of L298N pin
const int motor1pin2 = 13;

// variables will change:
int buttonState_1 = 0;         // variable for reading the pushbutton status
int buttonState_2 = 0;
int buttonState_3 = 0;
int buttonState_4 = 0;
int buttonState_5 = 0;
int buttonState_6 = 0;

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);  
  // initialize the Relay pin as an output:
  pinMode(RelayPin_1, OUTPUT); 
  pinMode(RelayPin_2, OUTPUT);
  pinMode(RelayPin_3, OUTPUT);
  pinMode(RelayPin_4, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin_1, INPUT);    
  pinMode(buttonPin_2, INPUT); 
  pinMode(buttonPin_3, INPUT);
  pinMode(buttonPin_4, INPUT);
  pinMode(buttonPin_5, INPUT);
  pinMode(buttonPin_6, INPUT);
  pinMode(motor1pin1, OUTPUT);
  pinMode(motor1pin2, OUTPUT);
}

void loop(){
  // read the state of the pushbutton value:
  digitalWrite(ledPin, LOW);
  digitalWrite(RelayPin_1, HIGH);
  digitalWrite(RelayPin_2, HIGH);
  digitalWrite(RelayPin_3, HIGH);
  digitalWrite(RelayPin_4, HIGH);
 
  buttonState_1 = digitalRead(buttonPin_1);
  buttonState_2 = digitalRead(buttonPin_2);
  buttonState_3 = digitalRead(buttonPin_3);
  buttonState_4 = digitalRead(buttonPin_4);
  buttonState_5 = digitalRead(buttonPin_5);
  buttonState_6 = digitalRead(buttonPin_6);
 
  // Relais 1
  if (buttonState_1 == HIGH) {    
    // turn LED and Relay on:   
    digitalWrite(ledPin, HIGH); 
    digitalWrite(RelayPin_1, LOW);
    digitalWrite(motor1pin1, HIGH);
    digitalWrite(motor1pin2, LOW);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);

  }
  if (buttonState_2 == HIGH) {    
    // turn LED and Relay on:   
    digitalWrite(ledPin, HIGH); 
    digitalWrite(RelayPin_1, LOW);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, HIGH);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
  }
  // Relais 2
  if (buttonState_3 == HIGH) {    
    // turn LED and Relay on:   
    digitalWrite(ledPin, HIGH); 
    digitalWrite(RelayPin_2, LOW);
    digitalWrite(motor1pin1, HIGH);
    digitalWrite(motor1pin2, LOW);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
  }
  if (buttonState_4 == HIGH) {    
    // turn LED and Relay on:   
    digitalWrite(ledPin, HIGH); 
    digitalWrite(RelayPin_2, LOW);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, HIGH);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
  }
  // Relais 3
  if (buttonState_5 == HIGH) {    
    // turn LED and Relay on:   
    digitalWrite(ledPin, HIGH); 
    digitalWrite(RelayPin_3, LOW);
    digitalWrite(motor1pin1, HIGH);
    digitalWrite(motor1pin2, LOW);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
  }
  if (buttonState_6 == HIGH) {    
    // turn LED and Relay on:   
    digitalWrite(ledPin, HIGH); 
    digitalWrite(RelayPin_3, LOW);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, HIGH);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
  }
}

A copier dans un nouveau sketch de l'IDE Arduino. Sélectionnez le bon type d'Arduino et le port COM idoine puis compilez et enfin téléversez le code. Rien de compliqué par rapport à l'ancien environnement que nous utilisions (sous Eclipse) mais c'était nettement plus puissant aussi.

La vidéo:

Voici une petite vidéo de la partie test sur platine avec un montage non optimisé (avec des fils de partout). 



Simplification:

Il est toujours intéressant de faire un petit effort de simplification du montage on utilisant des couleurs de fils adaptées (rouge pour alimentation positive et noir pour les masses) et des nappes (pour les boutons poussoirs). Les boutons poussoirs sont montés sur une petite plaque qui permet de supprimer la platine de test et de fixer l'Arduino et l'ampli. Le groupe de relais peut aussi être déporté pour faciliter son logement dans un petit bâtiment du genre poste d'aiguillage.   

Vue du montage simplifié

Plus le câblage sera propre et simple, moins vous aurez de problème. Le montage fonctionne très bien et il reste à le tester à l'extérieur. Mais pour cela il va falloir construire le poste d'aiguillage!