Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Spraakherkenning met Arduino en BitVoicer Server

Componenten en benodigdheden

Arduino Micro
× 1
Sparkfun Electret Microfoon Breakout
× 1
BitVoicer-server
× 1
BitVoicer Server 1.0
× 1
LED (generiek)
× 3
Weerstand 330 ohm
× 3

Over dit project

In dit bericht ga ik laten zien hoe je een Arduino-bord en BitVoicer Server kunt gebruiken om een ​​paar LED's te bedienen met spraakopdrachten. Ik zal de Arduino Micro in dit bericht gebruiken, maar je kunt elk Arduino-bord gebruiken dat je bij de hand hebt.

De volgende procedures worden uitgevoerd om spraakopdrachten om te zetten in LED-activiteit:


  • Audiogolven worden opgevangen en versterkt door het Sparkfun Electret Breakout-bord;
  • Het versterkte signaal wordt gedigitaliseerd en gebufferd in de Arduino met behulp van de analoog-naar-digitaal-omzetter (ADC);
  • De audio-samples worden gestreamd naar BitVoicer Server met behulp van de Arduino-seriële poort;
  • BitVoicerServer verwerkt de audiostream en herkent de spraak die erin zit;
  • Herkende spraak wordt toegewezen aan vooraf gedefinieerde opdrachten die teruggestuurd worden naar de Arduino;
  • TheArduino zal de commando's identificeren en de juiste actie uitvoeren.

De video hierboven toont het eindresultaat van dit bericht. Merk in de video op dat BitVoicer Server ook gesynthetiseerde spraakfeedback biedt. Deze spraakfeedback wordt gedefinieerd in de server en gereproduceerd door de server-audio-adapter, maar de gesynthetiseerde audio kan ook naar de Arduino worden gestuurd en gereproduceerd met behulp van een digitaal-naar-analoog-omzetter (DAC). In mijn volgende bericht ga ik laten zien hoe je de Arduino DUE, één versterkte en één luidspreker kunt gebruiken om de gesynthetiseerde spraak te reproduceren met behulp van de Arduino zelf.

Lijst met materialen:


  • Arduino Micro (of een ander Arduino-bord):~U$ 20,00
  • Sparkfun Electret Microfoon Breakout:U$ 7,95
  • BitVoicer Server 1.0 :€ 9,90
  • Breadboard:~U$ 10.00
  • 3 xLED's:~U$ 1,00
  • 3 x 330 Ohm weerstanden:~U$ 0,75
  • Doorverbindingsdraden:~U$ 0,30


STAP 1:Bedrading


De eerste stap is om de Arduino en het breadboard te bedraden met de componenten zoals weergegeven in de onderstaande afbeeldingen.

Het belangrijkste detail hier verwijst naar de analoge referentie die wordt geleverd aan de Arduino ADC. In mijn tests kreeg ik betere resultaten met 3.3V met de Sparkfun Electret Breakout. Daarom heb ik een jumper toegevoegd tussen de 3.3V pin en de AREF pin. Als u besluit om de analogRead-functie te gebruiken (om welke reden dan ook) terwijl 3,3 V wordt toegepast op de AREF-pin, MOET u analogReference (EXTERNAL) aanroepen voordat u de analogRead-functie gebruikt. Anders maak je kortsluiting tussen de actieve referentiespanning (intern gegenereerd) en de AREF-pin, waardoor de microcontroller op je Arduino-bord mogelijk beschadigd raakt.


STAP 2: De code uploaden naar de Arduino


Nu moet je de onderstaande code uploaden naar je Arduino. Voor het gemak is de Arduino-schets ook beschikbaar in het gedeelte Bijlagen onder aan dit bericht. Voordat u de code uploadt, moet u de BitVoicer Server-bibliotheken correct installeren in de Arduino IDE (een .zip-bibliotheek importeren).

BVS_Demo1.ino

Deze schets heeft vier grote delen:


  • Bibliotheekverwijzingen en variabeledeclaratie:de eerste twee regels bevatten verwijzingen naar de BVSP- en BVSMic-bibliotheken. Deze bibliotheken worden geleverd door BitSophia en zijn te vinden in de installatiemap van BitVoicer Server. De andere regels declareren constanten en variabelen die in de schets worden gebruikt. De BVSP-klasse wordt gebruikt om te communiceren met BitVoicer Server en de BVSMic-klasse wordt gebruikt om audiosamples vast te leggen en op te slaan.
  • Setup-functie:deze functie initialiseert seriële communicatie, de BVSP-klasse, de BVSMic-klasse en stelt de "event-handler" in (het is eigenlijk een functieaanwijzer) voor de frameReceived-gebeurtenis.
  • Loopfunctie:Deze functie voert drie belangrijke acties uit:de status van de foto opvragen bij de server (keepAlive()-functie), controleren of de server gegevens heeft verzonden en de ontvangen gegevens verwerken (receive()-functie), en de opname en verzending van audio regelen streams (isSREAvailable(), startRecording(),stopRecording() en sendStream() functies).
  • BVSP_frameReceivedfunction:Deze functie wordt elke keer aangeroepen als de functie Receive() identificeert dat er een compleet frame is ontvangen. Hier voer ik de opdracht uit die door BitVoicer Server is verzonden. Het commando bevat 2 bytes. De eerste byte geeft de pin aan en de tweede byte geeft de pin-waarde aan. Ik gebruik de functie analogWrite() om de juiste waarde voor de pin in te stellen.


STAP 3:BitVoicer Server-oplossingsobjecten importeren


Nu moet je BitVoicer Server instellen om met de Arduino te werken. BitVoicer Server heeft vier belangrijke oplossingsobjecten:locaties, apparaten, binaire gegevens en spraakschema's.

Locaties vertegenwoordigen de fysieke locatie waar een apparaat is geïnstalleerd. In mijn geval heb ik een locatie gemaakt met de naam Thuis.

Apparaten zijn de BitVoicer Server-clients. Ik heb een gemengd apparaat gemaakt, het ArduinoMicro genoemd en de communicatie-instellingen ingevoerd. OPMERKING OVER ARDUINO MICRO :het gebruikt RTS en DTR, dus u moet deze instellingen inschakelen op het tabblad Communicatie. Ik heb ook een SystemSpeaker-apparaat gemaakt om spraak te synthetiseren met behulp van de server-audio-adapter.

BinaryData is een type opdracht dat BitVoicer Server naar clientapparaten kan sturen. Het zijn eigenlijk byte-arrays die u aan opdrachten kunt koppelen. Wanneer BitVoicer Server spraak herkent die verband houdt met die opdracht, verzendt het de bytearray naar het doelapparaat. Ik heb een BinaryData-object gemaakt voor elke pinwaarde en heb ze ArduinoMicroGreenLedOn, ArduinoMicroGreenLedOff enzovoort genoemd. Ik eindigde met 18 BinaryData-objecten in mijn oplossing, dus ik raad u aan de objecten te downloaden en te importeren uit de VoiceSchema.sof bestand hieronder.

Stemschema's zijn waar alles samenkomt. Ze definiëren welke zinnen moeten worden herkend en welke opdrachten moeten worden uitgevoerd. Voor elke zin kun je zoveel commando's definiëren als je nodig hebt en de volgorde waarin ze zullen worden uitgevoerd. U kunt ook vertragingen tussen opdrachten definiëren. Zo ben ik erin geslaagd om de reeks acties uit te voeren die je in de video ziet.

U kunt alle oplossingsobjecten die ik in dit bericht heb gebruikt, importeren (Importeren van oplossingsobjecten) uit de onderstaande bestanden. De ene bevat de apparaten en de andere bevat het spraakschema en de bijbehorende opdrachten.

Apparaten.sof


StemSchema.sof

STAP 4:Conclusie


Dat is het! Ik hoop dat je het leuk vond.

Je hebt alles wat je nodig hebt om de demo uit te voeren die in de video wordt getoond. Merk op dat ik in de video ben begonnen met het inschakelen van het ArduinoMicro-apparaat in de BitVoicer Server Manager. Zodra het wordt ingeschakeld, identificeert de Arduino een beschikbare spraakherkenningsengine en begint hij met het streamen van audio naar BitVoicer Server.

U kunt de herkenningsresultaten volgen in de Server Monitor-tool die beschikbaar is in de BitVoicer Server Manager.

In mijn volgende post zal ik laten zien hoe je gesynthetiseerde spraak kunt reproduceren met behulp van een Arduino DUE.


Code

  • BVS_Demo1.ino
BVS_Demo1.inoArduino
#include #include // Definieert de Arduino-pin die zal worden gebruikt om audio vast te leggen #define BVSM_AUDIO_INPUT 5// Definieert de LED-pinnen#define RED_LED_PIN 6#define YELLOW_LED_PIN 9#define GREEN_LED_PIN 10// Definieert de constanten die als parameters worden doorgegeven aan // de BVSP.begin functieconst unsigned long STATUS_REQUEST_TIMEOUT =1000;const unsigned long STATUS_REQUEST_INTERVAL =2000;// Definieert de grootte van de audiobuffer const int AUDIO_BUFFER_SIZE =64; / Definieert de grootte van de ontvangstbufferconst int RECEIVE_BUFFER_SIZE =2;// Initialiseert een nieuwe globale instantie van de BVSP-klasse BVSP bvsp =BVSP();// Initialiseert een nieuwe globale instantie van de BVSMic-klasse BVSMic bvsm =BVSMic();/ / Creëert een buffer die zal worden gebruikt om opgenomen samples te lezen // van de BVSMic class byte audioBuffer [AUDIO_BUFFER_SIZE];// Creëert een buffer die zal worden gebruikt om de verzonden opdrachten te lezen// van BitVoicer Server.// Byte 0 =pin nummer// Byte 1 =pin waardebyte ontvangstbuffer [RECEIVE_BUFFER _SIZE]; void setup () {// Stelt de pin-modi in pinMode (RED_LED_PIN, OUTPUT); pinMode (GELE_LED_PIN, UITGANG); pinMode (GROEN_LED_PIN, UITGANG); // Start seriële communicatie op 115200 bps Serial.begin (115200); // Stelt de Arduino seriële poort in die zal worden gebruikt voor // communicatie, hoe lang het duurt voordat een statusverzoek // time-out en hoe vaak statusverzoeken naar // BitVoicer Server moeten worden verzonden. bvsp.begin (serieel, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL); // Definieert de functie die de frameReceived zal verwerken // event bvsp.frameReceived =BVSP_frameReceived; // Bereidt de BVSMic class timer bvsm.begin();}void loop() {// Controleert of het statusverzoekinterval is verstreken en als het // is, stuurt een statusverzoek naar BitVoicer Server bvsp.keepAlive(); // Controleert of er gegevens beschikbaar zijn op de seriële poortbuffer // en verwerkt de inhoud ervan volgens de specificaties // van het BitVoicer Server Protocol bvsp.receive(); // Controleert of er één SRE beschikbaar is. Als er een is, begint // de opname. if (bvsp.isSREAvailable()) { // Als de BVSMic-klasse niet aan het opnemen is, stelt u de audio //-invoer in en begint met opnemen if (!bvsm.isRecording) { bvsm.setAudioInput(BVSM_AUDIO_INPUT, EXTERNAL); bvsm.startRecording(); } // Controleert of de BVSMic-klasse beschikbare samples heeft als (bvsm.available) { // Zorgt ervoor dat de inkomende modus STREAM_MODE is voordat // de stream verzendt als (bvsp.inboundMode ==FRAMED_MODE) bvsp.setInboundMode(STREAM_MODE); // Leest de audiosamples van de BVSMic-klasse int bytesRead =bvsm.read (audioBuffer, AUDIO_BUFFER_SIZE); // Stuurt de audiostream naar BitVoicer Server bvsp.sendStream (audioBuffer, bytesRead); } } else { // Er is geen SRE beschikbaar. Als de BVSMic-klasse aan het opnemen is, stopt // deze. if (bvsm.isRecording) bvsm.stopRecording(); }}// Verwerkt de frameReceived-gebeurtenis void BVSP_frameReceived (byte dataType, int payloadSize) {// Controleert of het ontvangen frame binaire gegevens bevat // 0x07 =Binaire gegevens (byte-array) if (dataType ==DATA_TYPE_BINARY) {// If 2 bytes zijn ontvangen, verwerk de opdracht. if (bvsp.getReceivedBytes (receiveBuffer, RECEIVE_BUFFER_SIZE) ==RECEIVE_BUFFER_SIZE) { analogWrite (receiveBuffer [0], ReceiveBuffer [1]); } }}

Schema's


Productieproces

  1. Aanwezigheidssysteem met Arduino en RFID met Python
  2. DHT11-sensor met LED's en een piëzo-luidspreker
  3. Arduino Temp. Monitor en realtimeklok met 3.2-weergave
  4. Een Roomba-robot besturen met Arduino en Android-apparaat
  5. DIY voltmeter met Arduino en een Nokia 5110-display
  6. Besturing van servomotor met Arduino en MPU6050
  7. u-blox LEA-6H 02 GPS-module met Arduino en Python
  8. De temperatuur en vochtigheid op Blynk aflezen met DHT11
  9. Spraakherkenning en synthese met Arduino
  10. 4x4x4 LED-kubus met Arduino Uno en 1sheeld
  11. GPS-locatieweergave met GPS- en TFT-schermschilden