Une interface 16 canaux pour commande vocale

Cette interface, prévue pour fonctionner avec la commande vocale décrite dans le numéro 18 de la revue, page 8 et suivantes, active 8 sorties sur relais (fonctionnant en mode monostable ou bistable), en fonction du numéro de la commande vocale reconnue. Les 8 sorties restantes, sont matérialisées par des niveaux logiques disponibles sur un bornier.



Dans le numéro 18 d’ELM, nous avons traité d’un sujet des plus innovant, parmi ceux que nous avons traités depuis la naissance de la revue, en vous présentant un système de commande à reconnaissance vocale de 20 à 40 canaux.
Le système pouvait apprendre de courtes phrases prononcées par une personne, montrant ensuite sur un afficheur, en fonctionnement normal, le numéro correspondant au mot ou la phrase reconnue à chaque essai.
Nous nous étions alors promis de développer une interface capable de transformer cette information (passionnante mais inutile à l’état brut), en une commande capable d’activer des appareils électriques de différents types.
Il devait, bien sûr, s’agir d’une interface équipée de relais ou, tout au moins, de ligne TTL dont les niveaux logiques pourraient piloter d’éventuels dispositifs de puissance.



L’interface
Vous trouverez, dans cet article, le résultat de nos élucubrations.
C’est une unité d’activation, commandant 8 relais et comme qui peut le plus peut le moins, 8 lignes d’états, disponibles sur un bornier.
C’est l’interface idéale pour utiliser de la meilleure façon possible, notre carte de reconnaissance vocale (voir figure 1).
Afin de ne pas créer une “usine à gaz”, la platine est gérée par un seul circuit intégré de Microchip, un PIC16F877-MF361. Ce microcontrôleur s’interface directement au bus de sortie du contrôleur vocal. Il est en mesure de déchiffrer les deux nibble (quartet) qui, en format BCD, expriment les dizaines et l’unité du numéro généré après reconnaissance de la commande donnée vocalement (voir figure 2).
Pour ne pas compliquer inutilement le circuit de cette interface, nous avons réduit le nombre de sorties à 16, ce qui signifie qu’elle est en mesure de gérer un maximum de 16 commandes vocales (évident, mon cher Watson).
Il faudra fermer le cavalier J1 sur la carte de commande vocale, pour sélectionner le fonctionnement sur 20 messages.
Notre choix trouve (quand même !) quelques explications logiques.
D’abord, on peut considérer que 16 sorties de commandes sont largement suffisantes dans 99 % des cas.
Ensuite, si on avait choisi un fonctionnement en mode 40 commandes, chacune d’elles n’aurait permis qu’une phrase d’une durée maximale de 0,9 seconde. En choisissant 20 messages, chaque commande peut être exprimée par une phrase d’une durée de 1,9 secondes. Ce laps de temps est évidemment plus commode et mieux adapté pour certains vocables pourtant communs mais relativement longs comme, par exemple : chauffage, climatisation, alarme, etc.
L’interface dispose donc de 16 sorties, subdivisées en deux groupes homogènes.

Les 16 sorties
Les 8 premières, commandent directement un relais dont les trois contacts, commun (C), normalement fermé (NF) et normalement ouvert (NO) sont disponibles (voir figure 3). Les 8 sorties restantes sont directement les lignes de sortie du microcontrôleur raccordées sur un bornier.
Ainsi, après la phase préalable d’apprentissage des mots ou des phrases, en utilisation normale, l’accouplement commande vocale + activateur, permet d’actionner un des 8 relais, si le mot est associé aux numéros allant de 1 à 8 ou bien de voir s’éclairer ou s’éteindre une des 8 LED (et ainsi d’activer la ligne TTL concernée) dans le cas où le mot est associé à un numéro compris entre 9 et 16.
Une dernière précision doit être faite sur le mode de fonctionnement des 8 premières sorties qui peuvent être programmées indépendamment les unes des autres, soit en mode monostable, soit en mode bistable, grâce aux diodes D1 à D8 (voir figures 3 et 4).
Les sorties de 9 à 16 peuvent fonctionner toutes en monostable ou en bistable en fonction de la position du dip-switch DS1.
Dans le fonctionnement monostable (à impulsion), chaque commande reconnue permet l’activation du canal concerné (relais ou sortie TTL) pour une durée pouvant varier de 0,5 à 10 secondes, réglable à l’aide du trimmer R5.
Dans le fonctionnement bistable, chaque commande reconnue inverse l’état du canal concerné.
Si ce canal correspond à un relais, ce dernier passe de la condition de repos à celle d’excitation ou vice-versa.
Si ce canal correspond à une ligne TTL, celle-ci passe de l’état bas (0 volt) à l’état haut (5 volts) ou vice-versa.
Pour les canaux paramétrés en monostable, une fonction de rétablissement est disponible. Elle est activée en positionnant sur ON le micro-interrupteur 1 de DS1.
Le microcontrôleur sauvegarde dans sa mémoire non volatile (EEPROM), l’état des canaux monostables et les rétablit dans leur position, à chaque mise sous tension.
Cela signifie qu’au retour de la tension d’alimentation (à la suite d’une coupure secteur par exemple), les canaux sont rétablis automatiquement dans l’état dans lequel ils se trouvaient avant la coupure.

Figure 1 : Une vue générale de l’interface 16 canaux pour la commande vocale décrite dans le numéro 18 de la revue.

Le microcontrôleur PIC16F877-MF361

Figure 2 : le microcontrôleur PIC16F877-MF361.

Pour réaliser la platine d’activation de la reconnaissance vocale, nous avons utilisé, pour la première fois, un produit récent de la société Microchip. Il s’agit d’un PIC de la famille 16F87x, basé sur un puissant CPU doté d’une architecture RISC de 8 bits (seulement 35 instructions) capable de travailler à une fréquence d’horloge pouvant atteindre 20 MHz.
Le choix a été dicté par la nécessité de disposer de 24 lignes d’E/S, plus celles utilisées pour les modes de fonctionnement des sorties et, dans ce sens, le circuit nous satisfait pleinement. En effet, il dispose de 4 registres d’E/S de 8 bits chacun.
Le PIC16F877 a quelques particularités intéressantes : son EEPROM Flash très consistante (8 Ko de 14 bits, pouvant ainsi accepter les instructions en PicBasic), 256 x 8 bits d’EEPROM réservés aux données de travail et aux instructions de l’utilisateur, 368 x 8 bits de RAM, un Watchdog (chien de garde) précis, une gestion du reset (Power On Reset) et un timer (PWRT), en plus d’une pile à 8 niveaux et de 14 sources d’interruption. Il faut également noter la variété des périphériques inclus : un convertisseur A/D sur 10 bits, 3 timers, une interface sérielle SPI/I2C et un UART.

Paramétrage de l’interface

Figure 3 : Paramétrage de l’interface.

Dans le circuit, nous trouvons 1 dip-switch à 2 micro-interrupteurs et 8 diodes qui permettent de choisir les principaux paramètres de fonctionnement.
En particulier, deux micro-interrupteurs sélectionnent le mode monostable ou bistable pour les canaux 9 à 16 et le mode de rétablissement de ces derniers en cas de coupure de courant.
Les diodes servent, par contre, à déterminer le mode de fonctionnement monostable ou bistable pour les sorties 1 à 8. Si la diode concernant le canal de sortie est montée, le relais fonctionnera en mode monostable, dans le cas contraire, en mode bistable. Il est donc possible de configurer individuellement chacun des premiers 8 canaux en mode mono-stable ou bistable suivant vos exigences.
Le trimmer R5 détermine le temps (de 0,5 à 10 secondes) durant lequel, en mode monostable, les sorties sélectionnées demeurent actives.

Le tableau suivant précise les fonctions des micro-interrupteurs de DS1



Le schéma électrique
Le circuit de notre interface 16 canaux est mieux décrit par le schéma électrique donné en figure 5.
Tout, tourne autour du microcontrôleur U1, qui procède à la lecture des variations (et de celles-ci seulement) sur le bus de la commande vocale, au déchiffrement de l’état en fonction d’une table de vérité binaire, puis à l’activation ou la désactivation de la sortie correspondante.
Les codes d’erreur sont ignorés.
Le programme gère également le mode de fonctionnement des sorties qui (comme cela a déjà été dit) peut être monostable ou bistable.
Dans le premier cas, chaque ligne se porte au niveau logique haut lorsque la reconnaissance vocale fournit les codes BCD qui l’identifient et demeure ainsi, durant le temps réglé par le trimmer R5.
Dans le second cas, chaque commande qui arrive, change, en l’inversant, l’état de la sortie.
Pour bien comprendre comment travaille cette unité d’activation, il est important de rappeler brièvement la théorie du fonctionnement de la reconnaissance vocale.

Petit retour en arrière
Vous pouvez relire avec intérêt l’article “Une commande vocale 20 ou 40 canaux” paru dans le numéro 18 de la revue (page 8 et suivantes). Si vous ne disposez pas de la revue sous la main ou si vous manquez de courage, voici un petit résumé (voir également la figure 10).
Le système de commande vocale est un module réalisé en utilisant un microcircuit capable de mémoriser 20 mots de 1,9 seconde ou 40 mots de 0,9 seconde. Durant la phase d’apprentissage, une adresse est assignée à chaque mot, par l’intermédiaire d’un clavier. En phase de fonctionnement normal, cette adresse permet la reconnaissance du mot appris, en produisant sur le bus de 8 bits, le numéro correspondant, en format BCD, unité + dizaine.
Pour résumer. En phase d’apprentissage, le microcircuit permet de jumeler des mots dictés devant un microphone à des numéros assignés à l’aide d’un clavier. En mode de commande, le microcircuit permet de vérifier qu’un mot reçu correspond bien à un mot appris et, si c’est le cas, d’envoyer son numéro sur un afficheur.
Si, par exemple, nous enregistrons le mot “porte” en position 08, en mode de commande, en prononçant le mot “porte” près du microphone, nous devons voir apparaître le numéro 08 sur l’afficheur.
Si le microcircuit ne reconnaît pas ce qui a été prononcé, le numéro 77 apparaît (le message n’est pas valide, il n’a pas de correspondance en mémoire).
Par contre, lorsque la recherche en RAM échoue parce que le mot dure trop peu ou est plus long que le temps imparti, les messages visualisés sont respectivement 66 et 55.
La commande vocale dispose d’un bus, également utilisé par l’afficheur, sur lequel est disponible la position mémoire dans laquelle un mot appris est stocké.
Ce bus, prélevé en aval du latch U4 (connecteur 14 broches) produit les numéros en format BCD, ainsi, il représente avec les bits 0 à 3 le code BCD des unités et avec les bits 4 à 7, le code BCD du chiffre des dizaines.
Il n’existe pas, sur le connecteur d’interface, de ligne de strobe ou, tout au moins, un signal qui nous indiquerait le déroulement d’une phase de reconnaissance.
De ce fait, le dispositif qui va se connecter sur le bus ne peut donc pas faire la distinction entre plusieurs messages identiques ou consécutifs.

La liaison vers l’interface 16 canaux
Si nous revenons, à présent, à l’examen de notre unité d’activation, nous voyons que cette particularité comporte un inconvénient.
En effet, lorsque le système de reconnaissance décode deux fois de suite le même mot, le circuit n’est pas en mesure de s’en rendre compte, car il perçoit uniquement le changement sur le bus.
Dans la pratique, cela contraint l’opérateur à contourner l’obstacle avec un artifice qui consiste dans la prononciation d’un mot qui n’est pas mémorisé dans la reconnaissance vocale, avant de donner la commande réelle.

Le fonctionnement du microcontrôleur
Analysons à présent le fonctionnement du microcontrôleur (voir figure 2) qui, dès la première mise sous tension, initialise les entrées/sorties (I/O) en assignant le port RB comme sorties.
Les quatre premiers bits du registre A et les correspondants du port RC, sont assignés comme entrées. Par contre, les derniers bits de RC et les 4 premiers du port RD, sont encore des sorties.
Le port B commande les 8 relais par l’intermédiaire d’un buffer/driver ULN2803 (U2), tandis que RC4 à RC7 et RD0 à RD3 composent les sorties TTL relatives aux canaux 9 à 16.
Notez que le courant fourni par les sorties étant suffisant, chaque ligne pilote directement une diode LED qui indique la condition logique du canal concerné.
Les I/O RC0 à RC3 lisent le premier bloc BCD du bus d’interface du système de reconnaissance vocale, tandis que RA0 à RA3 s’occupent du second bloc (le chiffre des dizaines).
Pour les canaux “OUT1” à “OUT8” (voir figure 5), nous avons opté pour un système permettant de choisir le mode de fonctionnement de chaque relais, indépendamment du réglage des autres.
Cela est rendu possible par la présence des diodes D1 à D8. Chacune d’elles, reporte sur la broche 8 du microcontrôleur, l’état logique de sa propre ligne.
Pour des raisons de simplicité, d’économie et parce qu’on ne change pas le mode de fonctionnement d’un relais tous les jours, nous avons choisi, pour ce “sélecteur de mode de fonctionnement à diodes”, une solution rustique mais efficace : le tout ou rien !
Donc, si on ne met pas la diode en place, on obtient le fonctionnement bistable, tandis qu’en présence de la diode, la ligne passe au niveau logique haut lorsque son numéro est sur le bus et revient à zéro lorsque le délai imposé par le trimmer R5 (monostable) est écoulé. Ce type de gestion peut être résumé comme suit : Sur le bus, lorsqu’est relevée la combinaison BCD contenant le numéro d’un canal de 1 à 8 (numéros 01 à 08, en fait), le programme procède à l’activation de la ligne concernée du registre RB. Simultanément, il teste la broche 8 pour voir s’il trouve un 1 logique.
Dans l’affirmative (diode en place), il procède à l’activation du timer pour la durée imposée par R5, et le temps écoulé, il replace la ligne de sortie au 0 logique.
Evidemment, aucune autre ligne de sortie ne pourra perturber la lecture de la broche 8 durant la phase de test, car, en fait, les autres diodes présentes sont raccordées aux lignes non activées à ce moment-là.
Ce concept peut paraître complexe au premier abord mais, en observant le schéma électrique et en le simulant, tout apparaîtra beaucoup plus simple. Notez que R5 permet d’imposer un temps d’activation compris entre 0,5 et 10 secondes, identique pour tous les canaux et que le microcontrôleur ne peut accepter des commandes directes sur d’autres sorties, si un canal monostable est actif. Pour cela, il convient d’attendre qu’il repasse au repos, une fois le temps écoulé.
La modalité de fonctionnement des sorties 9 à 16 est sélectionnée en agissant sur le micro-interrupteur 2 de DS1.
En fermant ce micro-interrupteur (ON = 0 logique sur la broche du microcontrôleur) on obtient le fonctionnement monostable, en l’ouvrant (OFF = 1 logique sur la broche du microcontrôleur), on obtient le mode bistable.
Nous avons également prévu la possibilité de rétablissement des sorties en cas de coupure de courant, fonction qui s’obtient, si on ferme le micro-interrupteur 1 de DS1.
En d’autres termes, au retour de l’alimentation, le rétablissement permet de repositionner les lignes dans l’état dans lequel elles se trouvaient avant la coupure.
Toutefois, cette possibilité du rétablissement de l’état des lignes concerne uniquement le mode de commande bistable.
Avant de conclure, voyons rapidement comment se passe l’imposition du temps, pour les canaux qui fonctionnent en mode monostable.
Le temps exact est déterminé par la position du curseur de R5, utilisant une routine qui charge et qui décharge périodiquement le condensateur C4.
Il faut préciser que la lecture du trimmer est effectuée seulement lors de l’initialisation, donc à la mise en service du système et non durant le déroulement du programme principal.
Ainsi, la détermination de la temporisation (en tournant dans le sens horaire, le temps augmente de 0,5 à 10 secondes) est réalisée avant d’alimenter l’unité.
Cela dit, nous pensons vous avoir expliqué tout ce que vous devez savoir sur le fonctionnement et sur l’utilisation de l’interface.
Concluons, en précisant que la platine n’a pas d’alimentation propre. En effet, elle prélève les deux tensions qui lui sont nécessaires de la platine de reconnaissance vocale, en utilisant 3 fils en nappe reliant les deux unités.
En bref, elle prélève les 5 volts indispensables à la logique (microcontrôleur et ULN2803) de la ligne +5 volts et les 12 volts qui alimenteront les relais sont pris sur la ligne +12 volts. Le troisième fil étant, bien sûr, le fil de masse.

Figure 4: Voici comment remplacer, à peu de frais, un dip-switch à 8 micro-interrupteurs !

Figure 5 : Schéma électrique de l’interface 16 canaux pour commande vocale.

Figure 6 : Schéma d’implantation des composants de l’interface 16 canaux.

Figure 7 : La platine d’activation prête à être raccordée à la platine de la commande vocale. Toutes les fonctions sont gérées par le PIC16F877-MF361.
Le choix a été dicté par la nécessité de disposer de 24 lignes d’E/S, plus celles utilisées pour le paramétrage des modes de fonctionnement des sorties.


Figure 8 : Dessin, à l’échelle 1, du circuit imprimé de l’interface 16 canaux.

Liste des composants
R1= 4,7 KΩ
R2 à R4 = 10 kΩ
R5 = 4,7 kΩ trimmer horiz.
R6 à R13 = 470 Ω
C1= 100 nF multicouche
C2 = 100 μF 16 V électrolytique
C3 = 100 nF multicouche
C4 = 100 nF polyester
63 V pas 5 mm
C5 = 22 pF céramique
C6 = 22 pF céramique
D1 à D8 = Diodes 1N4007
LD1 à LD8 = LED rouges 5 mm
U1= μC PIC 16F877 MF361
U2 = Intégré ULN2803
DS1= Dip-switchs 2 micro-inter.
Q1= Quartz 20 MHz
RL1 à RL8 = Relais 12 V 1 RT min.

Divers :
1 Support 2 x 20 broches
1 Support 2 x 20 broches
11 Borniers 3 pôles
1 Connecteur 2 x 7 broches pour câble en nappe 14 fils
1 Circuit imprimé réf. S361


Figure 9: La reconnaissance vocale et l’interface d’activation une fois le montage terminé.
Notez le câble en nappe à 14 conducteurs qui relie les trois cartes.


La platine de base et le module d’affichage



Figure 10: La platine de base et le module vocal.

Figure 11: Gros plan sur le HM2007 et la SRAM de la carte de commande vocale. Remarquez le connecteur pour le clavier.

La platine de base de la “commande vocale” est réalisée en utilisant un microcircuit capable de mémoriser 20 ou 40 mots qu’il stockera à une adresse donnée par l’utilisateur en phase de programmation à l’aide du clavier. Il pourra ensuite les reconnaître et envoyer l’adresse correspondante sur un bus de données.
La capacité de reconnaissance est bonne et la tolérance plus qu’acceptable.
Néanmoins, pour obtenir les meilleurs résultats possibles, il est recommandé d’enregistrer des commandes aussi différentes que possible afin de réduire au minimum les “doutes” du microcircuit.
La platine de base a été publiée dans le numéro 18 de la revue auquel nous vous recommandons de vous reporter pour de plus amples informations.



Caractéristiques principales de la platine de base
Alimentation/consommation ...................... 12 volts / 200 mAReconnaissance vocale .......................... de 20 à 40 canauxDurée des messages (40 ou 20) .................. 0,9 ou 1,92 secondeDétection de la voix ........................... automatique ou manuelleMémorisation des commandes ..................... en SRAM dédiéeBatterie tampon ................................ 2 piles R6 de 1,5 volt

La réalisation pratique
A présent, nous pouvons passer à la construction de notre interface, pour laquelle il convient de préparer ou de vous procurer le circuit imprimé, dont vous trouverez le tracé du cuivre, à l’échelle 1, sur la figure 8.
Au risque de nous répéter pour la Xième fois, commencez le montage par les composants les plus bas pour terminer par les plus hauts. Donc par les résistances, les diodes au silicium, la mise en place des supports des circuits intégrés. Poursuivez par le dipswitch 2 micro-interrupteurs, le trimmer R5 et les condensateurs puis, terminez avec les autres composants.
Veillez scrupuleusement à l’orientation des composants polarisés et au sens des circuits intégrés. N’oubliez pas de vous reporter fréquemment au schéma d’implantation des composants de la figure 6 et aux diverses photos.
Il faut se rappeler que pour les diodes 1N4007, vous ne devez monter que celles des canaux (1 à 8) que vous voulez faire fonctionner en mode monostable.
Pour les sorties devant fonctionner en mode bistable, la mise en place de la diode correspondante est inutile. Toutefois, vous pouvez monter toutes les diodes en ne soudant que celles des relais à faire fonctionner en monostable. La figure 4 est plus parlante que tout un paragraphe (et elle économise la sueur de l’auteur).
Le repérage des voies est intuitif, dans le sens ou la diode D1 est utilisée par la sortie OUT1, D2 par OUT2, etc.
Pour ce qui concerne les LED, pensez que la cathode de chacune d’elles est la patte correspondant au petit méplat sur le boîtier.
Les relais doivent être d’un modèle miniature, à un contact repos/travail en 12 volts (modèle ITT-MZ ou similaire) et leur brochage doit être compatible avec les trous prévus dans le circuit imprimé (évidemment !).
Pour utiliser les sorties (relais et lignes TTL), il faut utiliser des borniers à vis, au pas de 5 mm, à souder sur circuit imprimé.
Nous avons aussi utilisé un connecteur mâle de la série HE10 à deux fois 7 broches au pas de 2,54 mm, en prenant garde, au moment du soudage, que l’échancrure (détrompeur) présente sur son corps soit dirigée vers les résistances R6 et R7.
Ce connecteur permettra de relier la platine interface à la platine de reconnaissance vocale.
Terminez le montage de tous les composants et mettez en place dans leur support, comme cela est clairement indiqué sur le schéma de la figure 6, le microcontrôleur PIC16F877-MF361.
Le câblage de l’interface terminé, vous pouvez la relier à la carte de commande vocale en utilisant une connexion adaptée, que vous pouvez réaliser facilement avec un morceau de câble en nappe à 14 conducteurs dont vous équiperez chacune des deux extrémités d’un connecteur HE10 femelle à 14 contacts.
Au cours de la fabrication de ce câble, il est impératif de vérifier que les deux connecteurs d’extrémité sont tous les deux orientés dans le même sens et que le signe indiquant la broche 1 concorde avec le fil coloré de la nappe. S’il en était autrement, les connexions seraient inversées et l’interface ne pourrait pas fonctionner.
Après avoir introduit les connecteurs femelles dans les connecteurs mâles des deux cartes, alimentez le module de reconnaissance vocale et vérifiez (si vous avez déjà mémorisé des mots), qu’en prononçant ces commandes, les canaux réagissent en fonction du positionnement des micro-interrupteurs et de la position du trimmer R5.
Evidemment, vous ne pouvez utiliser que les commandes entrées dans les emplacements mémoire allant de 1 à 16, autrement, il ne se passera rien sur l’interface.

Les derniers conseils
Pour une utilisation correcte, rappelez-vous que l’unité ne peut pas interpréter deux commandes identiques prononcées consécutivement (relire le texte).
Ainsi, si vous voulez intervenir deux fois de suite sur le même relais ou canal TTL, il faut obligatoirement introduire un message intermédiaire que la reconnaissance vocale ne comprendra pas comme un ordre mémorisé.
En fait, (afin d’éviter d’activer inutilement un canal), prononcer un mot au hasard, comme “bizarre-bizarre” par exemple mais qui ne soit en aucun cas un de ceux mémorisés par le système de reconnaissance vocale.

1 commentaire:

  1. Bonjour
    Je suis à la recherche du fichier Hex pour l' interface 16 canaux pour commande vocale
    Dans l'attente de vous lire

    Cordialement
    slim

    RépondreSupprimer