Commandes d'aiguilles: mode Manuel mis en boitier

Dans un article précédant nous avions détaillé cette commande manuelle. Elle était dans un état de prototype qui méritait d'être mis au propre et surtout rendu transportable pour l'utiliser facilement dans n'importe quel lieu (train de jardin, réseau de club, etc...).     

Rappel du montage prototype:

Le schéma de principe est le suivant :


Les composants principaux comme l'Arduino Nano, l'amplificateur de puissance et la barrette de relais sont peu encombrants et ne peuvent être optimisés. Par contre les boutons poussoir ne sont pas facile à placer sur un boitier et l'ensemble fonctionne avec une alimentation de laboratoire (donc pas portable). Bref, il y a sûrement moyen de réduire tout cela.

Première mise en boitier :

Avant d'aller percer des trous et découper la face avant, il faut prendre le temps de vérifier que les composants principaux rentrent dans le boitier.
Pour rendre la commande transportable, il nous faut embarquer une batterie. Nous réutilisons un pack d'accumulateurs Li-Fe fait maison à partir d'éléments assemblés pour former un ensemble qui fournit 13.2V / 3300 mA/h. Ce type d'accumulateur est très très stable et sans danger! Dommage qu'il soit difficile de s'en procurer. 
 Cependant, les composants de la famille Arduino fonctionnent en 5V voire en 3,3V. Il faut donc ajouter un régulateur de tension qui va délivrer du 5V et du 10V (voire plus). 
  Une fois le tout dans le boitier, on se rend vite compte que cela tient tout juste!

Vérification de l'encombrement

Contrôle de l'alimentation:

Le régulateur est conçu pour fonctionner avec une tension continue ou alternative à l'entrée et deux composants assurant la régulation : un régulateur 5V fixe et un régulateur 10-12V ajustable à l'aide d'un résistance variable. Des condensateurs assurent le filtrage.
Le contrôle du régulateur est une étape à ne pas négliger car plus c'est soigné et moins il y aura de problème. Pour le test, on utilise d'abord une alimentation de laboratoire (connectée à gauche sur les photos suivantes) et on branche un voltmètre pour vérifier (à vide) que les tensions sont légèrement supérieure à la valeur requise. Une fois en charge, on contrôlera à nouveau la tension aux bornes des composants (Arduino, ampli, relais)  


Test des sorties 5V et 10V 


Il est recommandé de faire à nouveau un petit essai sur table avec les 3 composants principaux et vérifier que tout s'allume et de vérifier la tension sur toutes les alimentations.

Test d'alimentation des composants principaux

Il est temps de positionner tous les composants et l'accumulateur dans le boitier et de les fixer par des petites vis. 


Nous avons fait une bonne étape mais la suivante s'annonce plus délicate.

La face avant:

Le positionnement des éléments de la face avant est guidé par une facilité d'utilisation et de câblage. Il n'est pas si facile d'allier les deux. Pour la face avant, nous remplaçons la plaque en aluminium par une plaque en PVC qui se travaille bien plus facilement qui nous fera gagner un peu de poids.
Les sorties (pour connecter des fiches bananes et ou des cosses) sont positionnées dessus pour voir plus facilement les connexions vers les moteurs d'aiguilles et aussi éviter de percer le boitier qui sera amené à rester parfois dehors.
Faute de fiches de sorties, nous nous sommes contenté de 3 aiguilles. Nous pourrons toujours les ajouter par la suite.   

Les boutons poussoirs simple sont remplacés par des poussoirs plus robustes à deux positions (avec un retour au point milieu). Cela fait gagner une place importante sans rien changer au câblage sur l'Arduino.


                                                                Vue de la face avant

Un interrupteur Marche/Arrêt est ajouté. Pas besoin de LED témoin. Lorsque la commande fonctionne, on a des LED à l'intérieur pour vérifier l'état des cartes. Une fois le boîter refermé, on entend les relais commuter lorsque l'on applique une commande et cela est suffisant et on s'économise une LED et peu d'énergie.

Les dessous du câblage:

Le plus délicat est de faire les dernières connexions entre les boutons poussoirs et l'Arduino. Pour cela, nous avons choisi de conserver les petites nappes venant du Arduino et de faire une petite platine de connexion afin de faciliter la maintenance. La platine est préparée sur table (broches, fils de raccordement aux boutons poussoirs et résistances de 10 K Ohms). Vérifiez soigneusement qu'il n'y a pas de court-circuit entre les broches de commande. 
Le point milieu de tous les boutons poussoirs est relié par un fil de cuivre. Ce dernier sera relié à la masse de l'Arduino. 
Puis souder fil par fil (de la platine) aux boutons poussoirs. Enfin relier le 5V aux résistances. 

Vue de la petite platine de connexion

La dernière opération de câblage consiste à raccorder les bornes de sorties aux sorties des relais. Les bornes du commun sont toutes reliées et vont ensuite à la sortie de l'ampli.

Connexions de sortie des relais

Essais:

Rien de plus facile. Un moteur d'aiguille est relié aux bornes et on actionne le bouton poussoir pour observer le déplacement de la tringle de commande. 
N'oubliez pas de faire un marquage au feutre des numéros des sorties et du bouton poussoir correspondant!
Le code a été simplifié après les tests, voici le résultat :
 
 
[code]
/*
 Commande de moteurs d'aiguilles
 
 création 2021 par E. ZANDER
 modification Janvier 2022

 */

// 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);  
  digitalWrite(RelayPin_1, HIGH);
  digitalWrite(RelayPin_2, HIGH);
  digitalWrite(RelayPin_3, HIGH);
  digitalWrite(RelayPin_4, HIGH);
}

void loop(){
 
  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 == LOW) {    
    digitalWrite(RelayPin_1, LOW);
    digitalWrite(motor1pin1, HIGH);
    digitalWrite(motor1pin2, LOW);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
    digitalWrite(RelayPin_1, HIGH);
  }
  if (buttonState_2 == LOW) {    
    digitalWrite(RelayPin_1, LOW);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, HIGH);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
    digitalWrite(RelayPin_1, HIGH);
  }
  // Relais 2
  if (buttonState_3 == LOW) {    
    digitalWrite(RelayPin_2, LOW);
    digitalWrite(motor1pin1, HIGH);
    digitalWrite(motor1pin2, LOW);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
    digitalWrite(RelayPin_2, HIGH);
  }
  if (buttonState_4 == LOW) {    
    digitalWrite(RelayPin_2, LOW);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, HIGH);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
    digitalWrite(RelayPin_3, HIGH);
  }
  // Relais 3
  if (buttonState_5 == LOW) {    
    digitalWrite(RelayPin_3, LOW);
    digitalWrite(motor1pin1, HIGH);
    digitalWrite(motor1pin2, LOW);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
    digitalWrite(RelayPin_3, HIGH);
  }
  if (buttonState_6 == LOW) {    
    digitalWrite(RelayPin_3, LOW);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, HIGH);
    delay(1000);
    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);
    digitalWrite(RelayPin_3, HIGH);
  }
}
[/code] 

Il ne reste plus qu'à essayer avec le train de jardin!