Commande d'un réseau en DCC avec un module ARDUINO

Commande vocale d'une locomotive


1 Description du module Easy VR

Il est possible de commander un train par la voix en utilisant le module de reconnaissance vocale Easy VR.
Ce module peut reconnaître 32 mots ou expressions de commande que l'utilisateur enregistre au préalable, dans n'importe quelle langue. Ces commandes enregistrées sont de type mono-locuteur (le module ne réagit qu'à l'ordre de la personne qui a enregistré la commande).
EasyVR peut être connecté à toute carte disposant d'une interface UART et en particulier à un module ARDUINO.
Voici une photo du module.


Le module EasyVR dispose également de 26 commandes pré-enregistrées pour chaque langage supporté. Ces expressions sont reconnues quelle que soit la personne qui les prononce. Ces expressions sont: robot, action, bouge, tourne, cours, regarde, attaque, arrête, salut, à gauche, à droite, vers le haut, vers le bas, en avant, en arrière, zéro, un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix)

Vous trouverez une description de ce module en cliquant ici.
Sur ce site, on peut télécharger les logiciels et le mode d'emploi (en Anglais).

On peut aussi trouver un excellent mode d'emploi en Français sur le site de Le Dan-TECH

J'ai connecté le module Easy VR à une carte ARDUINO UNO qui communique avec le module ARDUINO MEGA par une liaison série ( TX et RX sur l'ARDUINO UNO et RX2 et TX2 sur l'ARDUINO MEGA).

J'utilise aussi ce module pour la sonorisation du réseau. En effet, il est possible d'enregistrer des sons et le module dispose d'une sortie haut-parleur. J'ai plaçé un haut-parleur dans la gare pour générer les annonces de départ de trains et un haut-parleur près du passage à niveau pour générer la sonnerie qui précède l'arrivée d'un train.

2 Programmes ARDUINO

Les mots utilisés pour la commande d'une loco sont divisés en trois groupes Voici les deux premiers groupes:


Lorsqu'un mot est reconnu, le programme de l'ARDUINO UNO envoie deux octets. Le premier octet est le numéro du groupe et le deuxième octet est l'index du mot dans le groupe.
A partir de ces deux octets, le programme de l'ARDUINO MEGA génère la commande à envoyer à la loco.
L'ARDUINO MEGA envoie à l'ARDUINO UNO (TX2 vers RX) un octet qui a pour valeur le numéro du groupe.
Les valeurs 5 à 7 sont utilisés pour générer les sons stockés sur le module Easy VR.

2.1 programme installé sur l'ARDUINO UNO

Le programme installé sur l'ARDUINO UNO est donné ci-dessous.

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#include "SoftwareSerial.h"
SoftwareSerial port(12,13);
#else // Arduino 0022 - use modified NewSoftSerial
#include "WProgram.h"
#include "NewSoftSerial.h"
NewSoftSerial port(12,13);
#endif

#include "EasyVR.h"
EasyVR easyvr(port);

EasyVRBridge bridge;//group et idx seront utilisés pour communiquer avec le module
int8_t group, idx; // group = valeur passée au module et idx = valeur de retour du moduleint erreur = 7; //LED ROUGE d'erreur
byte octet;

void setup()
{
// bridge mode?
if (bridge.check())
{
cli(); //Désactivation des interruptions sur Arduino
bridge.loop(0, 1, 12, 13); //Configuration du mode bridge - liaison série logicielle port 12 et 13
}
// configuration liaison série
Serial.begin(9600);
port.begin(9600);

if (!easyvr.detect())
{
Serial.println("EasyVR non détecté!");
for (;;);
}
easyvr.setPinOutput(EasyVR::IO1, LOW);
Serial.println("EasyVR detecté!");
easyvr.setTimeout(5); //Conf. du module timeout = 5s
easyvr.setLanguage(5); // langue francaise
group = 1; // Référence au groupe prédéfini
}

void loop()
{
easyvr.setPinOutput(EasyVR::IO1, HIGH); // Led sur module allumée
easyvr.recognizeCommand(group); //Procédure de reconnaissance lancée, le module reçoit la trame de définition du groupe de mot
do
{
// Réception de l'octet en provenance de l'ARDUINO MEGA
while (Serial.available() > 0)
{
octet = Serial.read();
}
group = octet - 48 ;
}
while (!easyvr.hasFinished()); // true dès réception d'une trame réponse du module
easyvr.setPinOutput(EasyVR::IO1, LOW); // LED sur Module éteinte
idx = easyvr.getCommand(); //Récupération de l'index fournit par le module quand il y a détection
if (idx >= 0)
{
// transmission des octets à l'ARDUINO MEGA
Serial.print(group);
Serial.print(idx);
}
// lecture des sons stockés sur le module Easy VR
if (group==5) easyvr.playSound(1, EasyVR::VOL_FULL);;
if (group==6) easyvr.playSound(2, EasyVR::VOL_FULL);;
if (group==7) easyvr.playSound(3, EasyVR::VOL_FULL);;
}


2.2 Programme installé sur l'ARDUINO MEGA

Vous pouvez voir le traitement des commandes reçues de l'ARDUINO UNO dans le mode 10 du programme ARDUINO_DCC_V1 décrit ci-dessus.et que vous pouvez télécharger en cliquant ici.

Page suivante


Page précédente


Retour page d'accueil