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:
- Schallwellen werden vom SparkFun Electret Breakout aufgenommen und verstärkt.
- Das verstärkte Signal wird vom Arduino-ADC digitalisiert und gepuffert.
- Die Audiosamples werden über den seriellen Port an BitVoicer Server gestreamt.
- BitVoicer Server verarbeitet den Audiostream und erkennt die Sprache.
- Erkannte Sprache wird auf vordefinierte Befehle gemappt und an den Arduino zurückgesendet.
- 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
- Arduino Micro (oder anderes Board): ~20 $
- SparkFun Electret Mikrofon Breakout: 7,95 $
- BitVoicer Server 1.0: 9,90 $
- Breadboard: ~10 $
- 3× LED: ~1 $
- 3× 330 Ω Widerstand: ~0,75 $
- Jumper-Kabel: ~0,30 $
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:
- Bibliotheken & Variablen:
BVSP.h,BVSMic.h(von BitSophia, im Installationsordner von BitVoicer Server).BVSPfür Server-Kommunikation,BVSMicfür Audio-Aufnahme. - Setup: Serielle Kommunikation (115200 Baud),
BVSP,BVSMicinitialisieren, Event-Handler fürframeReceivedsetzen. - Loop: Drei Aktionen: Status-Request an Server (
keepAlive()), empfangene Daten prüfen/verarbeiten (receive()), Audio-Stream kontrollieren (isSREAvailable(),startRecording(),stopRecording(),sendStream()). - 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.
- Locations: Physischer Ort (z. B. „Home“).
- Devices: Clients. Ich erstellte ein „Mixed Device“ namens „ArduinoMicro“ mit Kommunikationseinstellungen. Hinweis Arduino Micro: Nutzt RTS/DTR – diese Einstellungen im Kommunikations-Tab aktivieren. Zusätzlich „SystemSpeaker“ Device für Sprachausgabe über Server-Audio.
- BinaryData: Byte-Arrays als Befehle. Für jeden Pin-Wert ein Objekt (z. B.
ArduinoMicroGreenLedOn,ArduinoMicroGreenLedOff…). Insgesamt 18 Objekte – am besten aus der DateiVoiceSchema.sofimportieren. - Voice Schemas: Definieren erkannte Sätze und zugehörige Befehle (Reihenfolge, Delays). So entstehen die Aktionssequenzen im Video.
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
- RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
- DHT11 Temperatur- & Feuchtesensor mit LED-Anzeige & Piezo-Summer
- Arduino Temperaturoverwachung & Echtzeituhr mit 3,2″ TFT-Display
- Roomba Create 2 per Arduino & Android steuern – Schritt-für-Schritt
- DIY-Voltmeter mit Arduino und Nokia 5110 Display – Schritt-für-Schritt-Anleitung
- Arduino & MPU6050: Präzise Servomotor-Steuerung mit SG90 & MG996R
- u-blox LEA-6H 02 GPS-Modul: Arduino & Python Integrationsanleitung
- Temperatur & Luftfeuchte mit DHT11 auf Blynk auslesen – Arduino-Tutorial Schritt für Schritt
- Spracherkennung & Sprachsynthese auf Arduino Due meistern
- 4x4x4 LED-Würfel mit Arduino Uno & 1Sheeld bauen – Interaktives LED-Projekt