Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Reconnaissance vocale avec Arduino et BitVoicer Server

Composants et fournitures

Arduino Micro
× 1
Déploiement du microphone à électret Sparkfun
× 1
Serveur BitVoicer
× 1
BitVoicer Server 1.0
× 1
LED (générique)
× 3
Résistance 330 ohm
× 3

À propos de ce projet

Dans cet article, je vais montrer comment utiliser une carte Arduino et un serveur BitVoicer pour contrôler quelques LED avec des commandes vocales. J'utiliserai l'Arduino Micro dans cet article, mais vous pouvez utiliser n'importe quelle carte Arduino que vous avez sous la main.

Les procédures suivantes seront exécutées pour transformer les commandes vocales en activité LED :


  • Les ondes audio seront capturées et amplifiées par la carte Sparkfun Electret Breakout ;
  • Le signal amplifié sera numérisé et mis en mémoire tampon dans l'Arduino à l'aide de son convertisseur analogique-numérique (ADC) ;
  • Les échantillons audio seront diffusés sur BitVoicer Server à l'aide du port série Arduino ;
  • BitVoicerServer traitera le flux audio et reconnaîtra la parole qu'il contient ;
  • La parole reconnue sera mappée sur des commandes prédéfinies qui seront renvoyées à l'Arduino ;
  • L'Arduino identifiera les commandes et effectuera l'action appropriée.

La vidéo ci-dessus montre le résultat final de ce post. Notez dans la vidéo que BitVoicer Server fournit également un retour vocal synthétisé. Ce retour vocal est défini dans le serveur et reproduit par l'adaptateur audio du serveur, mais l'audio synthétisé peut également être envoyé à l'Arduino et reproduit à l'aide d'un convertisseur numérique-analogique (DAC). Dans mon prochain article, je vais montrer comment utiliser l'Arduino DUE, un amplifié et un haut-parleur pour reproduire la parole synthétisée à l'aide de l'Arduino lui-même.

Liste des matériaux :


  • Arduino Micro (ou toute autre carte Arduino) :~ 20,00 $
  • Répartition du microphone à électret Sparkfun :7,95 USD
  • BitVoicer Server 1.0 :U$ 9.90
  • Planche à pain :~ 10,00 $
  • 3 x LED :~1,00 USD
  •  3 résistances x330 Ohms :~ 0,75 $
  • Cavaliers :~0,30 $


ÉTAPE 1 :Câblage


La première étape consiste à câbler l'Arduino et la maquette avec les composants comme indiqué dans les images ci-dessous.

Le détail le plus important ici fait référence à la référence analogique fournie à l'Arduino ADC. Lors de mes tests, j'ai obtenu de meilleurs résultats en utilisant 3,3 V avec le Sparkfun Electret Breakout. C'est pourquoi j'ai ajouté un cavalier entre la broche 3.3V et la broche AREF. Si vous décidez d'utiliser la fonction analogRead (pour une raison quelconque) alors que 3,3 V est appliqué à la broche AREF, vous DEVEZ appeler analogReference (EXTERNAL) avant d'utiliser la fonction analogRead. Sinon, vous court-circuiterez ensemble la tension de référence active (générée en interne) et la broche AREF, endommageant éventuellement le microcontrôleur de votre carte Arduino.


ÉTAPE 2 : Téléchargement du code sur l'Arduino


Vous devez maintenant télécharger le code ci-dessous sur votre Arduino. Pour plus de commodité, le croquis Arduino est également disponible dans la section Pièces jointes au bas de cet article. Avant de télécharger le code, vous devez installer correctement les bibliothèques BitVoicer Server dans l'IDE Arduino (Importation d'une bibliothèque .zip).

BVS_Demo1.ino

Ce croquis comporte quatre parties principales :


  • Références de bibliothèque et déclaration de variable :les deux premières lignes contiennent des références aux bibliothèques BVSP et BVSMic. Ces bibliothèques sont fournies par BitSophia et se trouvent dans le dossier d'installation de BitVoicer Server. Les autres lignes déclarent les constantes et les variables utilisées tout au long de l'esquisse. La classe BVSP est utilisée pour communiquer avec BitVoicer Server et la classe BVSMic est utilisée pour capturer et stocker des échantillons audio.
  • Setupfunction :cette fonction initialise la communication série, la classe BVSP, la classe BVSMic et définit le « gestionnaire d'événement » (c'est en fait un pointeur de fonction) pour l'événement frameReceived.
  • Fonction Loop :cette fonction effectue trois actions importantes :demande des informations sur l'état au serveur (fonction keepAlive()), vérifie si le serveur a envoyé des données et traite les données reçues (fonction receive()), et contrôle l'enregistrement et l'envoi de l'audio flux (fonctions isSREAvailable(), startRecording(),stopRecording() et sendStream()).
  • BVSP_frameReceivedfunction :Cette fonction est appelée à chaque fois que la fonction receive() identifie qu'une trame complète a été reçue. Ici, j'exécute la commande envoyée par BitVoicer Server. La commande contient 2 octets. Le premier octet indique la broche et le deuxième octet indique la valeur de la broche. J'utilise la fonction analogWrite() pour définir la valeur appropriée sur la broche.


ÉTAPE 3 : Importation d'objets de solution BitVoicer Server


Vous devez maintenant configurer BitVoicer Server pour qu'il fonctionne avec l'Arduino. BitVoicer Server a quatre objets de solution principaux :Emplacements, Appareils, Données binaires et Schémas vocaux.

Les emplacements représentent l'emplacement physique où un périphérique est installé. Dans mon cas, j'ai créé un emplacement appelé Domicile.

Les appareils sont les clients BitVoicer Server. J'ai créé un appareil mixte, je l'ai nommé ArduinoMicro et j'ai entré les paramètres de communication. REMARQUE SUR ARDUINO MICRO :il utilise RTS et DTR, vous devez donc activer ces paramètres dans l'onglet communication. J'ai également créé un appareil SystemSpeaker pour synthétiser la parole à l'aide de l'adaptateur audio du serveur.

BinaryData est un type de commande que BitVoicer Server peut envoyer aux appareils clients. Ce sont en fait des tableaux d'octets que vous pouvez lier à des commandes. Lorsque BitVoicer Server reconnaît la parole liée à cette commande, il envoie le tableau d'octets à l'appareil cible. J'ai créé un objet BinaryData pour chaque valeur de broche et les ai nommés ArduinoMicroGreenLedOn, ArduinoMicroGreenLedOff, etc. Je me suis retrouvé avec 18 objets BinaryData dans ma solution, je vous suggère donc de télécharger et d'importer les objets depuis le VoiceSchema.sof fichier ci-dessous.

Les schémas vocaux sont l'endroit où tout se réunit. Ils définissent quelles phrases doivent être reconnues et quelles commandes exécuter. Pour chaque phrase, vous pouvez définir autant de commandes que vous le souhaitez et l'ordre dans lequel elles seront exécutées. Vous pouvez également définir des délais entre les commandes. C'est ainsi que j'ai réussi à effectuer la séquence d'actions que vous voyez dans la vidéo.

Vous pouvez importer (Importer des objets de solution) tous les objets de solution que j'ai utilisés dans cet article à partir des fichiers ci-dessous. L'un contient les appareils et l'autre contient le schéma vocal et ses commandes.

Périphériques.sof


VoiceSchema.sof

ÉTAPE 4 :Conclusion


C'est ça! J'espère que tu l'a aimé.

Vous avez tout ce dont vous avez besoin pour exécuter la démo présentée dans la vidéo. Notez que dans la vidéo, j'ai commencé par activer le périphérique ArduinoMicro dans le gestionnaire de serveur BitVoicer. Dès qu'il est activé, l'Arduino identifie un moteur de reconnaissance vocale disponible et commence à diffuser de l'audio vers BitVoicer Server.

Vous pouvez suivre les résultats de la reconnaissance dans l'outil Server Monitor disponible dans BitVoicer Server Manager.

Dans mon prochain article, je montrerai comment reproduire la parole synthétisée à l'aide d'un Arduino DUE.


Code

  • BVS_Demo1.ino
BVS_Demo1.inoArduino
#include #include // Définit la broche Arduino qui sera utilisée pour capturer l'audio #define BVSM_AUDIO_INPUT 5// Définit les broches LED#define RED_LED_PIN 6#define YELLOW_LED_PIN 9#define GREEN_LED_PIN 10// Définit les constantes qui seront passées en paramètre à // la fonction BVSP.beginconst unsigned long STATUS_REQUEST_TIMEOUT =1000;const unsigned long STATUS_REQUEST_INTERVAL =2000;// Définit la taille du buffer audio const int AUDIO_BUFFER/_SIZE =64; / Définit la taille du buffer de réceptionconst int RECEIVE_BUFFER_SIZE =2;// Initialise une nouvelle instance globale de la classe BVSP BVSP bvsp =BVSP();// Initialise une nouvelle instance globale de la classe BVSMic BVSMic bvsm =BVSMic();/ / Crée un tampon qui sera utilisé pour lire les échantillons enregistrés // à partir de l'octet de classe BVSMic audioBuffer[AUDIO_BUFFER_SIZE];// Crée un tampon qui sera utilisé pour lire les commandes envoyées// à partir du serveur BitVoicer.// Octet 0 =broche nombre// Octet 1 =pin valuebyte receiveBuffer[RECEIVE_BUFFER _SIZE];void setup() { // Configure les modes de broche pinMode(RED_LED_PIN, OUTPUT); pinMode(YELLOW_LED_PIN, SORTIE); pinMode(GREEN_LED_PIN, SORTIE); // Démarre la communication série à 115200 bps Serial.begin(115200); // Définit le port série Arduino qui sera utilisé pour // la communication, combien de temps il faudra avant qu'une demande d'état // expire et à quelle fréquence les demandes d'état doivent être envoyées à // BitVoicer Server. bvsp.begin(Série, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL); // Définit la fonction qui gérera l'événement frameReceived // bvsp.frameReceived =BVSP_frameReceived; // Prépare le temporisateur de classe BVSMic bvsm.begin();}void loop() { // Vérifie si l'intervalle de demande d'état s'est écoulé et // si c'est le cas, envoie une demande d'état au serveur BitVoicer bvsp.keepAlive(); // Vérifie si des données sont disponibles dans le tampon du port série // et traite son contenu selon les spécifications // du protocole BitVoicer Server bvsp.receive(); // Vérifie s'il y a un SRE disponible. S'il y en a un, // commence l'enregistrement. if (bvsp.isSREAvailable()) { // Si la classe BVSMic n'enregistre pas, configure l'entrée // audio et démarre l'enregistrement if (!bvsm.isRecording) { bvsm.setAudioInput(BVSM_AUDIO_INPUT, EXTERNAL); bvsm.startRecording(); } // Vérifie si la classe BVSMic a des échantillons disponibles if (bvsm.available) { // S'assure que le mode entrant est STREAM_MODE avant // de transmettre le flux if (bvsp.inboundMode ==FRAMED_MODE) bvsp.setInboundMode(STREAM_MODE); // Lit les échantillons audio de la classe BVSMic int bytesRead =bvsm.read(audioBuffer, AUDIO_BUFFER_SIZE); // Envoie le flux audio à BitVoicer Server bvsp.sendStream(audioBuffer, bytesRead); } } else { // Aucun SRE n'est disponible. Si la classe BVSMic enregistre, // l'arrête. if (bvsm.isRecording) bvsm.stopRecording(); }}// Gère l'événement frameReceived void BVSP_frameReceived(byte dataType, int payloadSize) { // Vérifie si la trame reçue contient des données binaires // 0x07 =Données binaires (tableau d'octets) if (dataType ==DATA_TYPE_BINARY) { // Si 2 octets ont été reçus, traitez la commande. if (bvsp.getReceivedBytes(receiveBuffer, RECEIVE_BUFFER_SIZE) ==RECEIVE_BUFFER_SIZE) { analogWrite(receiveBuffer[0], receiveBuffer[1]); } }}

Schémas


Processus de fabrication

  1. Système de présence utilisant Arduino et RFID avec Python
  2. Capteur DHT11 avec LED et haut-parleur piézo
  3. Arduino Temp. Moniteur et horloge en temps réel avec affichage 3.2
  4. Contrôler un robot Roomba avec Arduino et un appareil Android
  5. Voltmètre DIY avec Arduino et un écran Nokia 5110
  6. Contrôle du servomoteur avec Arduino et MPU6050
  7. module GPS u-blox LEA-6H 02 avec Arduino et Python
  8. Comment lire la température et l'humidité sur Blynk avec DHT11
  9. Reconnaissance et synthèse vocales avec Arduino