Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Sprachgesteuerte LEDs: Arduino Micro + BitVoicer Server für Spracherkennung

Komponenten und Materialien

Komponente Menge Hinweise
Arduino Micro 1 Andere Arduino-Boards funktionieren auch
SparkFun Electret Mikrofon Breakout 1 Audio-Aufnahme & Vorverstärkung
BitVoicer Server 1 Spracherkennungs-Software (kostenpflichtig: ~9,90 $)
BitVoicer Server 1.0 1
LED (beliebig) 3 Rot, Gelb, Grün
Widerstand 330 Ohm 3 Für LEDs

Über dieses Projekt

In diesem Beitrag zeige ich, wie man mit einem Arduino-Board und BitVoicer Server LEDs per Sprachbefehl steuert. Ich nutze den Arduino Micro, aber jedes andere Arduino-Board funktioniert ebenfalls.

Der Ablauf der Sprachsteuerung:

  1. Schallwellen werden vom SparkFun Electret Breakout aufgenommen und verstärkt.
  2. Das verstärkte Signal wird vom Arduino-ADC digitalisiert und gepuffert.
  3. Die Audiosamples werden über den seriellen Port an BitVoicer Server gestreamt.
  4. BitVoicer Server verarbeitet den Audiostream und erkennt die Sprache.
  5. Erkannte Sprache wird auf vordefinierte Befehle gemappt und an den Arduino zurückgesendet.
  6. Der Arduino identifiziert die Befehle und führt die entsprechende Aktion aus (LED an/aus/dimmen).

Das Video im Original zeigt das Ergebnis. BitVoicer Server gibt auch synthetisches Sprachfeedback über den Server-Audioausgang. In einem Folgeprojekt zeige ich, wie man die Sprachausgabe über Arduino DUE + Verstärker + Lautsprecher direkt am Board wiedergibt.

Materialliste & Kosten

Schritt 1: Verdrahtung

Arduino und Breadboard wie in den Bildern verdrahten.

Wichtig: Analoger Referenzspannung (AREF) für den ADC. In meinen Tests lieferte 3,3V mit dem SparkFun Breakout bessere Ergebnisse. Deshalb Jumper zwischen 3,3V-Pin und AREF-Pin. Warnung: Wenn 3,3V an AREF anliegen, muss vor Nutzung von analogRead() die Funktion analogReference(EXTERNAL) aufgerufen werden! Andernfalls werden die interne Referenz und der AREF-Pin kurzgeschlossen – der Mikrocontroller kann beschädigt werden.

Schritt 2: Code auf Arduino hochladen

Code (siehe unten) in die Arduino IDE laden. Vorher BitVoicer Server Bibliotheken in der IDE installieren (Sketch → Bibliothek einbinden → .ZIP-Bibliothek hinzufügen).

Der Sketch (BVS_Demo1.ino) hat vier Hauptteile:

  1. Bibliotheken & Variablen: BVSP.h, BVSMic.h (von BitSophia, im Installationsordner von BitVoicer Server). BVSP für Server-Kommunikation, BVSMic für Audio-Aufnahme.
  2. Setup: Serielle Kommunikation (115200 Baud), BVSP, BVSMic initialisieren, Event-Handler für frameReceived setzen.
  3. Loop: Drei Aktionen: Status-Request an Server (keepAlive()), empfangene Daten prüfen/verarbeiten (receive()), Audio-Stream kontrollieren (isSREAvailable(), startRecording(), stopRecording(), sendStream()).
  4. BVSP_frameReceived: Wird aufgerufen, wenn ein kompletter Frame empfangen wurde. Befehl enthält 2 Bytes: Byte 0 = Pin, Byte 1 = Wert. analogWrite() setzt den PWM-Wert am Pin.

Schritt 3: BitVoicer Server Solution Objects importieren

BitVoicer Server hat vier Hauptobjekte: Locations, Devices, BinaryData, Voice Schemas.

Alle Solution Objects (Devices, Voice Schema + Commands) können aus den Dateien Devices.sof und VoiceSchema.sof importiert werden (Originalprojekt).

Schritt 4: Fazit

Das war's! Im Video wird das ArduinoMicro-Device im BitVoicer Server Manager aktiviert → Arduino erkennt verfügbare Speech Recognition Engine → streamt Audio. Erkennungsergebnisse im Server Monitor Tool verfolgen.

Im nächsten Beitrag: Sprachausgabe über Arduino DUE.

Code

BVS_Demo1.ino (Arduino)

#include <BVSP.h>
#include <BVSMic.h>

#define BVSM_AUDIO_INPUT 5
#define RED_LED_PIN 6
#define YELLOW_LED_PIN 9
#define GREEN_LED_PIN 10

const unsigned long STATUS_REQUEST_TIMEOUT = 1000;
const unsigned long STATUS_REQUEST_INTERVAL = 2000;
const int AUDIO_BUFFER_SIZE = 64;
const int RECEIVE_BUFFER_SIZE = 2;

BVSP bvsp = BVSP();
BVSMic bvsm = BVSMic();
byte audioBuffer[AUDIO_BUFFER_SIZE];
byte receiveBuffer[RECEIVE_BUFFER_SIZE]; // Byte 0 = Pin, Byte 1 = Wert

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]);
    }
  }
}

Schaltplan

Schaltplan-Bild im Originalprojekt verfügbar.

Herstellungsprozess

  1. RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
  2. DHT11 Temperatur- & Feuchtesensor mit LED-Anzeige & Piezo-Summer
  3. Arduino Temperaturoverwachung & Echtzeituhr mit 3,2″ TFT-Display
  4. Roomba Create 2 per Arduino & Android steuern – Schritt-für-Schritt
  5. DIY-Voltmeter mit Arduino und Nokia 5110 Display – Schritt-für-Schritt-Anleitung
  6. Arduino & MPU6050: Präzise Servomotor-Steuerung mit SG90 & MG996R
  7. u-blox LEA-6H 02 GPS-Modul: Arduino & Python Integrationsanleitung
  8. Temperatur & Luftfeuchte mit DHT11 auf Blynk auslesen – Arduino-Tutorial Schritt für Schritt
  9. Spracherkennung & Sprachsynthese auf Arduino Due meistern
  10. 4x4x4 LED-Würfel mit Arduino Uno & 1Sheeld bauen – Interaktives LED-Projekt