Commande d'Aiguilles sans fil

Commande d'Aiguilles sans fil


Dans le même esprit que la commande sans fil des trains (HO ou G), nous nous sommes lancés dans la conception et réalisation d'une commande sans fil pour les aiguilles à base de composants Arduino.

Sur le réseau LPT, nous avons mis en place un système de commande des aiguilles qui est piloté par une commande basée sur les composants Arduino et des relais. Les résultats étaient à la hauteur de nos attentes avec une facilité de d'utilisation et une bonne fiabilité. Ceci sera détaillé dans un prochain article.

Cet article est destiné à une application plus simple et donc plus facilement transposable à un petit réseau à la maison ou en extérieur (train de jardin).


Le code de la mini-commande est disponible ici

1- Principe de la commande d'Aiguilles

 Le schéma de principe de la mini commande est illustré ci-après:

Figure 1

A noter que le câblage de cette commande est compatible de celui de la mini-commande.
Nous avons utilisé les entrées 4, 5, 6 et 7 de l'Arduino pour les commandes des 4 aiguilles.

2- Le cœur de la mini-commande

Le composant principal de cette mini-commande est un Arduino pro mini. Pour notre application, il est nécessaire de souder un petit connecteur 6 broches (à gauche sur la photo). Celui-ci servira à charger le programme et tester les entrée activée par les interrupteurs.

Figure 2

Le petit régulateur (à droite du composant en jaune) peut être enlevé. Etant donné que la tension d'alimentation est de 3V alors ce régulateur est inutile et il induit une consommation inutile.
En l'enlevant on économise de l'énergie et gagne donc en autonomie.
Il est intéressant de noter les marquages des broches pour préparer le câblage.

Figure 3

3- Le boîtier

Le boîtier n'est pas nécessairement grand car le nombre de composants est assez réduit. Les dimensions choisies sont les suivantes:
- longueur 11 cm
- largeur 7 cm
- hauteur 5 cm

La préparation du boîtier de commande consiste en l'implantation de l'Arduino mini et de l'émetteur/récepteur 2.4 GHz sur une petite plaque à trous.

 Figure 4

4- Le câblage

Les interrupteurs sont mis en place sur une plaque plastique. Il faut un interrupteur pour le Marche/Arrêt et 4 autres pour la commande d'aiguille.

Figure 5

Le câblage des interrupteurs est réalisé (voir figure ci-dessus) en reliant toutes les bornes de devant des interrupteurs au + , les bornes de derrière au -, les bornes centrales à la platine avec l'Arduino (en vert sur la photo ci-après).

Il faut désormais souder les 2 composants de la platine (Arduino et émetteur/récepteur radio). Ne souder que deux broches.
Puis relier les fils d'alimentation (+ et -) et les bornes du milieu des interrupteurs aux entrées de l'Arduino (voir figure 1).

A ce stade, il n'est pas nécessaire de câbler la radio car nous allons procéder au test des entrées.

Le résultât devrait ressembler à la photo ci-après:

 Figure 6

5- Tests

Mettre les deux piles dans le support et mettre en route. Le voyant rouge s'allume.

Figure 7

6- Le Programme

Après avoir réalisé la première partie pratique, il reste à passer à la partie programmation.
Le programme de la commande d'aiguille est réalisé en langage C et il est structuré par un programme principal appelé le main.c. Ce programme fait appel à des bibliothèques permettant de piloter la radio.
Le principe consiste à lire les ports C (potentiomètres pour être compatible de la commande de train) et port D (commande des aiguilles). Puis on prépare le paquet à transmettre sur la radio et vérifie que celui-ci est bien transmis.
Cela est fait indéfiniment (boucle sans fin).

Pour mieux comprendre le programme, sans pour autant vous noyer dans les instructions et syntaxe du langage C, nous vous proposons de survoler les principales instructions réalisées.

//
// Programme de commandes de Aiguilles
// Version 1.0 - Fev 2017
// F. LORRAIN - E. ZANDER
//
// Principes:
// 4 interrupteurs servant a commander 4 aiguilles sont connectes sur les 
// entrées du port PD du Arduino pro mini
// Aiguille 1 = PD4 = D4
// Aiguille 2 = PD5 = D5
// Aiguille 3 = PD6 = D6
// Aiguille 4 = PD7 = D7
//
// compatible avec 2 potentiomètres pour commande des trains

// Bibliothèques
#include "elcheapo_remote.h"
#include "adc.h"
#include "timer0.h"
#include "HardwareSerial.h"
// Radio
#include "hal_nrf_reg.h"
#include "hal_nrf.h"
#include "radio.h"

//Variables globales
// convertisseur analogique numérique
//Données a envoyer par la radio

// Programme principal
int main(void) {
 
 // voir config.h pour configuration des ports B, C, D
 // PORT B pilote la radio
 // PORT D pour la lecture des commandes aiguilles
 // Lecture des entrées du PORTD
 // Résistances interne Pull ups Arduino Nano activées sur les entrées du port PORTD
 // Contrôle Port C Digital désactivé
 // Activation signal CE low (transmission paquet si CE actif)
 // Radio désactivée
 // Configuration de la liaison série à 115200 bauds pour signe de vie
 // Initialisation du convertisseur analogique-numérique
 // Initialisation horloge
 // Active les interruptions
 // Initialisation radio
 // Signe de vie de la radio pour debug
 
 // Faire indéfiniment 
  while (1) {
  // Affiche signe de vie sur liaison série
  // Lit tous les bits du port D à la fois (PIND est le registre qui contient les valeurs lue sur le port D
  // Lecture des commandes des aiguilles
  // Lecture potentiomètres même si pas câblés
  // Prépare les interruptions
  // Envoi des paquets sur la radio
  // Attente de réception radio
  // Selon état de la radio
 switch (état_radio) {
   case (1):
  //Paquet émis, acquittement reçu mais pas acquittement contenu paquet
  break;
   case (2):
  // Paquet émis et acquittement paquet reçu
  // efface la source de l'interruption
  break;
   case (3):
  // Nombre essais maxi atteint
                // Efface la FIFO d’émission pour éviter la congestion
  break;
   default:
  break;
 }
  }
}

Le code source de ce programme sera mis à disposition sur une page dédiée.
Une fois écrit, ce code est compilé et un fichier .elf est généré afin de pouvoir 
le télécharger sur l'Arduino Nano.

7- Télécharger

Pour télécharger le fichier .elf sur le Arduino, il est nécessaire d'avoir un adaptateur USBASP.
L’USBASP est un programmateur « in circuit » pour les microcontrôleurs AVR (notamment la famille Arduino 8bits). Pour quelques euros, ceci permet de connecter le port USB du PC au connecteur de programmation de l'Arduino.

ATTENTION, bien choisir un adaptateur qui accepte le 3.3V et le configurer en conséquence. 
Lorsque la radio est connectée, celle-ci n'accepte que du 3.3V. Sinon on peut la détruire avec le 5V.

Pour en savoir plus se référer à la page Actuino
Brancher comme illustré sur la figure suivante

Figure 8
Une fois connectée, les leds s'allument et clignotent rapidement pendant le téléchargement. Ce dernier dure quelques secondes.

 Figure 9

8- Câblage de la radio et tests

La radio est un petit module NRF24L01 qui est à raccorder avec du fil à wrapper selon le schéma de la figure 1. Utiliser de préférence des couleurs différentes pour les signaux (ici en jaune), les entrées interrupteurs (ici en vert). Les fils d'alimentation sont en rouge pour le + et en blanc pour le -.

 Vue de dessous du module câblé - Vue du dessus du module câblé
Figure 10

 Pour le test de bon fonctionnement de la radio nous aurons besoin d'un affichage sur l'écran du PC. Pour cela, il faut un petit adaptateur liaison série - USB (en rouge sur la figure 10) et un programme de communication (PUTTY).

Enlever les piles du boitier car la liaison USB alimente directement le module.

La liaison série est configurée comme suit:

Figure 11

Les informations du programme affiche les messages suivants:

Commande Arduino Nano Pro Aig initialisee
Radio activee
S
AIG : F7
10
20
40
80

 2 0 F7 1 13 0 EE

S
AIG : C5
0
0
40
80

 2 0 C5 0 80 0 70


Lorsqu'un interrupteur est activé, alors l'affichage des valeurs après le message AIG passent à 0.
Dans notre exemple les interrupteurs 1 et 2 sont activés.

Les tests sont terminés. Déconnecter la liaison et ne pas oublier de remettre les piles dans le boîtier.

A ce stade la commande est opérationnelle.

Rendez-vous pour le récepteur.

Aucun commentaire: