Initialement je voulais faire un tableau de commande des aiguilles (avec moteurs Peco bien bruyants

) en face avant du réseau, mais Pfff, ça implique du câblage et ce n'est pas ma tasse de thé.
Je suis passé en numérique pour réduire la filasse
c'est là que j'ai découvert Arduino et l'idée des servos moteurs.
En cherchant un peu sur le Web au début, et aussi sur le forum par la suite (!) il est très facile de trouver de quoi démarrer.
J'ai pensé un moment au bluetooth, mais ma tablette date un peu et ne fonctionne pas en bluetooth.
J'ai prévu d'en changer, mais pour le moment je tente l'option télécommande IR.
Je passerai peut être au bluetooth s'il faut un écran de saisie ou d'affichage dans le futur..
Lien info IR:
Lien vers infos IRMa télécommande
Le modèle que j'utilise sur thingiverseUn autre modèle plus simpleLe plan du réseau:

J'ai fait un premier test pour détecter le code de chacune des touches de la télécommande.
Ci-dessous copier/coller du programme dans l'état actuel datant de l'an dernier, je n'ai pas bossé dessus depuis longtemps
En plus de la commande de chacune des 7 aiguilles, j'ai prédéfini des trajets pour actionner une combinaison plusieurs aiguilles, avec une seule action sur la télécommande.
Il restera à traiter le sujet de l'initialisation de la position des aiguilles au démarrage.
Comme il n'y en a que 7, et toutes bien visibles sur le réseau, je pense faire simplement une phase d'initialisation en utilisant toujours la télécommande.
Ce n'est pas très "Fun" mais ça me prendrait peut être 30sec ou 1 min avant de commencer à exploiter le réseau.
Chaque module de servo est équipé de 2 micro-switch à 2 états, un sera utilisé pour alimenter la pointe de cœur, l'autre pourrait renvoyer la position à l'arduino, ou être simplement câblé avec des leds indiquant la position.
Je n'ai pas encore décidé quoi faire

- Code: Tout sélectionner
#include <IRLib.h>
#include <Servo.h>
// You will have to set these values depending on the protocol
// and remote codes that you are using. These are For the Adafruit
// Mini Remote
#define MY_PROTOCOL NEC
// Definiton
#define BUTTON_0 0xfd30cf // Aiguilles quai gare voie 1 & 2 simultanees
#define BUTTON_1 0xfd08f7 // Aiguille quai gare voie 1 courte
#define BUTTON_2 0xfd8877 // Aiguille quai gare voie 2 longue
#define BUTTON_3 0xfd48b7 // Aiguille sortie halle
#define BUTTON_4 0xfd28d7 // Aiguille entree halle
#define BUTTON_5 0xfda857 // Aiguille entree gare
#define BUTTON_6 0xfd6897 // Aiguille entree depot
#define BUTTON_7 0xfd18e7 // Aiguille entree EP
#define BUTTON_8 0xfd9867 // Aiguilles 5 & 6 simultanees
#define BUTTON_9 0xfd58a7
#define BUTTON_ON_OFF 0xfd00ff
#define BUTTON_VOL_PLUS 0xfd807f
#define BUTTON_VOL_MOINS 0xfd906f
#define BUTTON_UP_ARROW 0xfd50af // Deviation vers Arriere plan
#define BUTTON_DOWN_ARROW 0xfd10ef // Deviation vers Avant plan
#define BUTTON_FAST_BACK 0xfd20df // combinaison entree jusqu'a voie 1 courte (5AR-4AV-1AR)
#define BUTTON_FAST_FRONT 0xfd609f // combinaison entree jusqu'a voie 2 longue (5AV-6AR-2AV)
#define BUTTON_READ_PAUSE 0xfda05f // combinaison entree jusqu'a halle (5AR-4AR-3AV)
#define BUTTON_EQ 0xfdb04f
#define BUTTON_REPEAT 0xfd708f
#define BUTTON_STOP 0xfd40bf
IRrecv My_Receiver(11);//Receive on pin 11
IRdecode My_Decoder;
Servo My_Servo; // create servo object to control a servo
int pos; // variable to store the servo position
int Speed; // Number of degrees to move each time a left/right button is pressed
long Previous; // Stores previous code to handle NEC repeat codes
// Servo aiguilles
Servo My_Servo01; // create servo quai gare voie 1 courte
Servo My_Servo02; // create servo quai gare voie 2 longue
Servo My_Servo03; // create servo sortie halle
Servo My_Servo04; // create servo entree halle
Servo My_Servo05; // create servo entree gare
Servo My_Servo06; // create servo entree depot
Servo My_Servo07; // create servo entree EP
void setup()
{
//My_Servo07.attach(9); // attaches the servo on pin 9 to the servo object
pos = 90; // start at midpoint 90 degrees
Speed = 3; // servo moves 3 degrees each time left/right is pushed
//My_Servo.write(pos); // Set initial position
My_Receiver.enableIRIn(); // Start the receiver
Serial.begin(9600);
}
void loop()
{
if (My_Receiver.GetResults(&My_Decoder)) {
My_Decoder.decode();
if(My_Decoder.decode_type==MY_PROTOCOL) {
if(My_Decoder.value==0xFFFFFFFF)
// My_Decoder.value=Previous;
Serial.println("received 0xFFFFFFFF ");
switch(My_Decoder.value) {
case BUTTON_UP_ARROW:
Serial.println(" Deviation vers Arriere plan ");
break;
case BUTTON_DOWN_ARROW:
Serial.println(" Deviation vers Avant plan ");
break;
case BUTTON_FAST_BACK:
Serial.println(" combinaison entree jusqu'a voie 1 courte (5AR-4AV-1AR) ");
break;
case BUTTON_FAST_FRONT:
Serial.println(" combinaison entree jusqu'a voie 2 longue (5AV-6AR-2AV) ");
break;
case BUTTON_READ_PAUSE:
Serial.println(" combinaison entree jusqu'a halle (5AR-4AR-3AV) ");
break;
case BUTTON_0:
Serial.println(" Aiguilles 1 et 2 quai gare voie 1 & 2 simultanees ");
break;
case BUTTON_1:
Serial.println(" Aiguille 1 quai gare voie Arriere plan ");
break;
case BUTTON_2:
Serial.println(" Aiguille 2 quai gare voie Avant plan ");
break;
case BUTTON_3:
Serial.println(" Aiguille 3 sortie Halle ");
break;
case BUTTON_4:
Serial.println(" Aiguille 4 entree Halle ");
break;
case BUTTON_5:
Serial.println(" Aiguille 5 entree Gare ");
break;
case BUTTON_6:
Serial.println(" Aiguille 6 entree Depot ");
break;
case BUTTON_7:
Serial.println(" Aiguille 7 entree EP ");
break;
case BUTTON_8:
Serial.println(" Aiguilles 5 & 6 simultanees voie Avant Plan");
break;
case BUTTON_9:
Serial.println(" Aiguilles 4 & 3 simultanees voie Halle ");
break;
}
//My_Servo.write(pos); // tell servo to go to position in variable 'pos'
Previous=My_Decoder.value;
}
My_Receiver.resume();
}
}