Голосовое управление светодиодами: Arduino Micro + BitVoicer Server для распознавания речи
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino Micro (или другая плата Arduino) | 1 | |
| Модуль микрофона SparkFun Electret Microphone Breakout | 1 | |
| BitVoicer Server (лицензия) | 1 | Платное ПО ($9.90) |
| Светодиоды (красный, желтый, зеленый) | 3 | |
| Резисторы 330 Ом | 3 | |
| Макетная плата и перемычки | 1 набор |
О проекте
Проект демонстрирует управление тремя светодиодами голосовыми командами с помощью Arduino и BitVoicer Server. Аудиосигнал с электретного микрофона усиливается, оцифровывается АЦП Arduino, передается в BitVoicer Server по последовательному порту, там распознается речь и отправляются команды обратно на Arduino для управления светодиодами. BitVoicer также может озвучивать обратную связь через звуковой адаптер сервера.
Принцип работы
- Звуковые волны захватываются и усиливаются модулем SparkFun Electret Breakout.
- Усиленный сигнал оцифровывается и буферизируется в Arduino (АЦП).
- Аудиосемплы передаются в BitVoicer Server через последовательный порт.
- Сервер обрабатывает поток и распознает речь.
- Распознанная речь сопоставляется с предопределенными командами, которые отправляются обратно на Arduino.
- Arduino идентифицирует команды и выполняет действия (вкл/выкл светодиодов).
Стоимость компонентов (приблизительно)
- Arduino Micro: ~$20
- SparkFun Electret Microphone Breakout: $7.95
- BitVoicer Server 1.0: $9.90
- Макетная плата: ~$10
- 3 светодиода + резисторы: ~$1.75
- Перемычки: ~$0.30
Шаг 1: Монтаж
Соберите схему согласно фото. Важный момент: для лучшего качества АЦП используется внешний опорный напряжение 3.3V. Соедините пин 3.3V с AREF на Arduino. Если вы используете analogRead() при подключенном 3.3V к AREF, обязательно вызовите analogReference(EXTERNAL) перед чтением, иначе возможно повреждение микроконтроллера.
Шаг 2: Загрузка кода в Arduino
Установите библиотеки BitVoicer Server в Arduino IDE (Sketch → Include Library → Add .ZIP Library). Загрузите скетч BVS_Demo1.ino (приведен ниже).
Структура скетча
- Библиотеки и переменные:
BVSP(коммуникация с сервером),BVSMic(захват аудио). - setup(): инициализация последовательного порта, классов BVSP и BVSMic, установка обработчика события
frameReceived. - loop(): поддержание связи с сервером (
keepAlive()), прием команд (receive()), запись и отправка аудиопотока при доступном движке распознавания (SRE). - BVSP_frameReceived(): обработка полученных команд (2 байта: номер пина и значение). Используется
analogWrite()для ШИМ-управления яркостью.
Код (BVS_Demo1.ino)
#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];
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]);
}
}
}
Шаг 3: Импорт объектов решения в BitVoicer Server
BitVoicer Server использует четыре типа объектов: Locations (места), Devices (устройства), BinaryData (бинарные команды), Voice Schemas (голосовые схемы).
- Location: создайте «Home».
- Device: добавьте Mixed device «ArduinoMicro» с настройками последовательного порта. Для Arduino Micro включите RTS и DTR во вкладке Communication. Добавьте SystemSpeaker для синтеза речи на сервере.
- BinaryData: создайте по одному объекту на каждое состояние пина (вкл/выкл для каждого цвета). Всего 18 объектов. Лучше импортировать из файла
VoiceSchema.sof. - Voice Schema: определяет фразы для распознавания и связанные команды. Можно задать последовательность команд с задержками.
Файлы для импорта: Devices.sof и VoiceSchema.sof (приложены к проекту).
Шаг 4: Запуск и тестирование
- Включите устройство ArduinoMicro в BitVoicer Server Manager.
- Arduino начнет стримить аудио при доступном SRE.
- Следите за результатами распознавания в Server Monitor.
- Говорите команды (например, «turn on red light») — светодиоды должны реагировать.
Заключение
Проект показывает базовую интеграцию распознавания речи с Arduino. В следующей статье автор планирует показать воспроизведение синтезированной речи на Arduino DUE с динамиком.
Схема подключения
Схема в формате Fritzing показывает подключение микрофона к A5, светодиодов к пинам 6, 9, 10 через резисторы 330 Ом, и перемычку 3.3V → AREF.
Производственный процесс
- Надежная система учета рабочего времени на Arduino с RFID и Python
- Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
- Монитор температуры и реальные часы на Arduino Due с TFT-дисплеем 3.2"
- Управление Roomba Create 2 через Arduino и Android: пошаговое руководство
- Сборка вольтметра на Arduino с дисплеем Nokia 5110 — Пошаговое руководство
- Точное управление сервоприводом через MPU6050 (Arduino, SG90, MG996R)
- Модуль GPS u-blox LEA-6H 02: Интеграция с Arduino и Python
- Чтение температуры и влажности DHT11 через Blynk — пошаговый урок для Arduino
- Освоение распознавания и синтеза речи на Arduino Due
- Создание интерактивного 4x4x4 светодиодного куба на Arduino Uno и 1Sheeld