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

Spraakgestuurde LED-project: Arduino Micro + BitVoicer Server voor Spraakherkenning

Onderdelen en Benodigdheden

OnderdeelAantalOpmerking
Arduino Micro1Elke Arduino board werkt
SparkFun Electret Microfoon Breakout1Verstarkt audio voor ADC
BitVoicer Server1Spraakherkenning server software
BitVoicer Server 1.01Licentie
LED (generiek)3Rood, Geel, Groen
Weerstand 330 ohm3Voor LEDs

Over dit Project

In deze post laat ik zien hoe je een Arduino-board en BitVoicer Server kunt gebruiken om een paar LEDs met stemcommando's te besturen. Ik gebruik de Arduino Micro, maar elke Arduino board werkt.

De volgende stappen zetten stemcommando's om in LED-actie:

  1. Gelakgolven worden vastgelegd en versterkt door de SparkFun Electret Breakout-board.
  2. Het versterkte signaal wordt gedigitaliseerd en gebufferd in de Arduino via de analoge-naar-digitale omzetter (ADC).
  3. De audiomonsters worden gestreamd naar BitVoicer Server via de seriële poort van de Arduino.
  4. BitVoicer Server verwerkt de audiostroom en herkent de spraak.
  5. De herkende spraak wordt gemapt op vooraf gedefinieerde commando's die terug naar de Arduino worden gestuurd.
  6. De Arduino identificeert de commando's en voert de juiste actie uit.

De video toont het eindresultaat. Let op: BitVoicer Server biedt ook gesyntheserde spraakfeedback. Deze wordt via de server-audioadapter afgespeeld, maar kan ook naar de Arduino gestuurd worden voor weergave via een DAC. In een volgende post laat ik zien hoe dit met een Arduino DUE, versterker en luidspreker werkt.

Materiaallijst:

  • Arduino Micro (of andere Arduino): ~$20
  • SparkFun Electret Microfoon Breakout: $7,95
  • BitVoicer Server 1.0: $9,90
  • Breadboard: ~$10
  • 3x LEDs: ~$1
  • 3x 330 Ohm weerstanden: ~$0,75
  • Jumper wires: ~$0,30

Stap 1: Bedrading

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

Spraakgestuurde LED-project: Arduino Micro + BitVoicer Server voor Spraakherkenning
Spraakgestuurde LED-project: Arduino Micro + BitVoicer Server voor Spraakherkenning
Spraakgestuurde LED-project: Arduino Micro + BitVoicer Server voor Spraakherkenning
Spraakgestuurde LED-project: Arduino Micro + BitVoicer Server voor Spraakherkenning

Belangrijk detail: De analoge referentiespanning voor de Arduino ADC. In mijn tests gaf 3,3V betere resultaten met de SparkFun Electret Breakout. Daarom een jumper tussen de 3,3V-pin en de AREF-pin. WAARSCHUWING: Als je analogRead() gebruikt terwijl 3,3V op AREF staat, MOET je analogReference(EXTERNAL) aanroepen vóór analogRead(). Anders kortsluit je de interne referentiespanning met de AREF-pin, wat de microcontroller kan beschadigen.

Stap 2: Code Uploaden naar de Arduino

Upload de onderstaande code naar je Arduino. De sketch is ook beschikbaar in de bijlagen. Installeer eerst de BitVoicer Server libraries in de Arduino IDE (Import .zip Library).

BVS_Demo1.ino

De sketch heeft vier hoofddelen:

  1. Library-referenties en variabele declaraties: De eerste twee regels includeren de BVSP en BVSMic libraries (van BitSophia, in de BitVoicer Server installatiemap). De overige regels declareren constanten en variabelen. De BVSP-klasse communiceert met BitVoicer Server, de BVSMic-klasse vangt en buffer audiomonsters.
  2. Setup-functie: Initialiseert seriële communicatie, BVSP-klasse, BVSMic-klasse en stelt de "event handler" (functiepointer) in voor het frameReceived event.
  3. Loop-functie: Voert drie belangrijke acties uit: statusinformatie aanroepen bij de server (keepAlive()), controleren of de server data heeft gestuurd en verwerken (receive()), en opname/verzending van audiostromen besturen (isSREAvailable(), startRecording(), stopRecording(), sendStream()).
  4. BVSP_frameReceived functie: Wordt aangeroepen telkens als receive() een compleet frame ontvangt. Hier voer ik het commando uit dat van BitVoicer Server komt. Het commando bevat 2 bytes: byte 0 = pinnummer, byte 1 = pinwaarde. Ik gebruik analogWrite() om de waarde in te stellen.

Stap 3: BitVoicer Server Solution Objecten Importeren

Nu BitVoicer Server instellen voor de Arduino. Vier hoofdsolution-objecten: Locations, Devices, BinaryData, Voice Schemas.

  • Locations: Fysieke locatie van het apparaat. Ik maakte "Home".
  • Devices: BitVoicer Server clients. Ik maakte een "Mixed device" genaamd "ArduinoMicro" met communicatie-instellingen. LET OP ARDUINO MICRO: gebruikt RTS en DTR - schakel deze in op het communicatietabblad. Ik maakte ook een "SystemSpeaker" device voor spraaksynthese via de server-audioadapter.
  • BinaryData: Type commando dat BitVoicer Server naar clients kan sturen (byte-arrays gekoppeld aan commando's). Bij spraakherkenning wordt de byte-array naar het doelapparaat gestuurd. Ik maakte een BinaryData-object per pinwaarde (bijv. ArduinoMicroGreenLedOn, ArduinoMicroGreenLedOff). Totaal 18 objecten - ik raad aan om ze te importeren vanuit de VoiceSchema.sof file.
  • Voice Schemas: Waar alles samenkomt. Definiëren welke zinnen herkend moeten worden en welke commando's uitgevoerd worden. Per zin kun je meerdere commando's en volgorde definiëren, inclusief vertragingen. Zo creëerde ik de acties uit de video.

Je kunt alle solution-objecten importeren (Importing Solution Objects) uit de bestanden hieronder. Bevat Devices en Voice Schema met Commands.

Devices.sof

VoiceSchema.sof

Stap 4: Conclusie

Dat is het! Ik hoop dat je er van genoten hebt.

Je hebt nu alles om de demo uit de video te draaien. In de video activeer ik het ArduinoMicro-apparaat in de BitVoicer Server Manager. Zodra ingeschakeld, herkent de Arduino een beschikbare Spraakherkenning-Engine (SRE) en begint met streamen van audio naar BitVoicer Server.

Je kunt de herkenningsresultaten volgen in de Server Monitor tool in de BitVoicer Server Manager.

In mijn volgende post laat ik zien hoe je gesyntheserde spraak kunt afspelen met een Arduino DUE.

Code

BVS_Demo1.ino (Arduino)
#include <BVSP.h>
#include <BVSMic.h>

// Definieert de Arduino-pin voor audio-invoer
#define BVSM_AUDIO_INPUT 5

// Definieert de LED-pinnen
#define RED_LED_PIN 6
#define YELLOW_LED_PIN 9
#define GREEN_LED_PIN 10

// Constanten voor BVSP.begin
const unsigned long STATUS_REQUEST_TIMEOUT = 1000;
const unsigned long STATUS_REQUEST_INTERVAL = 2000;

// Buffer groottes
const int AUDIO_BUFFER_SIZE = 64;
const int RECEIVE_BUFFER_SIZE = 2;

// Globale instanties
BVSP bvsp = BVSP();
BVSMic bvsm = BVSMic();

byte audioBuffer[AUDIO_BUFFER_SIZE];
byte receiveBuffer[RECEIVE_BUFFER_SIZE]; // Byte 0 = pin, Byte 1 = waarde

void setup() {
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(YELLOW_LED_PIN, OUTPUT);
  pinMode(GREEN_LED_PIN, OUTPUT);

  Serial.begin(115200);

  bvsp.begin(Serial, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL);
  bvsp.frameReceived = BVSP_frameReceived;
  bvsm.begin();
}

void loop() {
  bvsp.keepAlive();
  bvsp.receive();

  if (bvsp.isSREAvailable()) {
    if (!bvsm.isRecording) {
      bvsm.setAudioInput(BVSM_AUDIO_INPUT, EXTERNAL);
      bvsm.startRecording();
    }
    if (bvsm.available) {
      if (bvsp.inboundMode == FRAMED_MODE)
        bvsp.setInboundMode(STREAM_MODE);
      int bytesRead = bvsm.read(audioBuffer, AUDIO_BUFFER_SIZE);
      bvsp.sendStream(audioBuffer, bytesRead);
    }
  } else {
    if (bvsm.isRecording)
      bvsm.stopRecording();
  }
}

void BVSP_frameReceived(byte dataType, int payloadSize) {
  if (dataType == DATA_TYPE_BINARY) {
    if (bvsp.getReceivedBytes(receiveBuffer, RECEIVE_BUFFER_SIZE) == RECEIVE_BUFFER_SIZE) {
      analogWrite(receiveBuffer[0], receiveBuffer[1]);
    }
  }
}

Schema's

Spraakgestuurde LED-project: Arduino Micro + BitVoicer Server voor Spraakherkenning

Productieproces

  1. Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
  2. DHT11 Temperatuur- & Vochtigheidsensor Project met LED-indicatoren en Piezo-luidspreker
  3. Arduino Temperatuurbewaking & Realtime Klok met 3.2" TFT-display
  4. Bestuur Je Roomba Create 2 Met Arduino En Android: Stapsgewijze Handleiding
  5. Bouw een DIY Voltmeter met Arduino en Nokia 5110 Display – Stap-voor-Stap Handleiding
  6. Arduino & MPU6050: Precieze Servomotor Besturing met SG90 & MG996R
  7. u-blox LEA‑6H GPS Module: Arduino & Python Integratie Handleiding
  8. Temperatuur en Vochtigheid met DHT11 op Blynk - Stap-voor-Stap Arduino Tutorial
  9. Spraakherkenning & Synthese Meesteren op Arduino Due
  10. Bouw een 4x4x4 LED-kubus met Arduino Uno & 1Sheeld – Interactief LED-project
  11. Arduino GPS en TFT Touchscreen Shield Project: Real-Time Locatieweergave