Сборка двухколёсного голосового робота на Arduino и BitVoicer Server
Компоненты и материалы
| Arduino UNO | 1 |
| Pololu Dual MC33926 Motor Driver Shield — 2 двигателя 5–28 В, до 3 А каждый | 1 |
| SparkFun XBee Shield | 1 |
| Microchip RN171VX WiFi-модуль с антенной (формат XBee) | 1 |
| SparkFun Electret Microphone Breakout — предусилитель | 1 |
| 2WD шасси робота (акрил, 2 колеса, 360° опорное колесо, 2 мотор-редуктора 1:48, держатель 4×AA) | 1 |
| Стабилизатор LM1117 (TO-220) 3.3 В | 1 |
| Конденсатор 10 мкФ электролитический | 1 |
| Светодиоды | 4 |
| Резисторы 330 Ом | 4 |
| Аккумуляторы AA 1.5 В | 4 |
| Крона 9 В | 1 |
| Адаптер 9 В → Jack | 1 |
| Перемычки и монтажный провод | 17 / 1 |
| Винты, пластиковый хомут для фиксации | 1 |
Инструменты
- Паяльник и припой
- Плоскогубцы
- Отвёртка
Приложения и сервисы
- BitVoicer Server 1.0 (платный, ~$8.90) — распознавание речи на сервере
О проекте
В этом руководстве показано, как построить 2WD робота с голосовым управлением. Подход применим к шаговым двигателям и сервоприводам — база для любого голосового робота с механическим движением.
Поток обработки голосовых команд:
- Аудио захватывается и усиливается SparkFun Electret Breakout.
- Сигнал оцифровывается и буферизуется Arduino (ADC).
- Аудиопоток передаётся в BitVoicer Server через WiFi-модуль RN171VX.
- Сервер распознаёт речь.
- Распознанная фраза сопоставляется с предопределёнными командами, отправляемыми на Arduino.
- Arduino определяет команду: какие моторы, как долго, какая скорость.
- Драйвер моторов подаёт питание на двигатели.
Шаг 1: Знакомство с компонентами
Arduino UNO R3 — самый популярный, но подойдёт и другой. Arduino DUE позволяет добавить голосовые ответы.
Pololu Dual MC33926 Shield — отличный драйвер, до 3 А на канал, библиотека Arduino: setSpeeds(левый, правый) со знаком для направления. Занимает пины: D4,7,8,9,10,12; A0,A1; GND; 5V. Важно: PWM на 9 и 10 использует таймер, не конфликтующий с таймером 2 (BVSMic).
WiFi RN171VX — управление через последовательный порт, форм-фактор XBee (работает с XBee Shield).
Проблема интерференций: при передаче WiFi возникали помехи на ADC (аудио). Решение: на XBee Shield запаян стабилизатор 3.3 В + 10 мкФ для опорного напряжения ADC и микрофона. Без этого уровень тишины в BitVoicer показывал 35/100.
4 статусных LED (слева направо):
- BitVoicer Server запущен / связь активна
- Служба пересылки данных работает
- Распознаватель речи назначен Arduino
- Период активации (ключевое слово обнаружено)
Микрофон — любой аналоговый с высоким усилением (~100×). Питание от 3.3 В стабилизатора.
Шасси 2WD — бюджетное с eBay: акриловая платформа, 2 колеса, 360° колесо, 2 мотор-редуктора 1:48, держатель 4×AA, энкодерные диски, винты.
Шаг 2: Монтаж
Все компоненты устанавливаются на шасси как на фото. Если не хотите паять на XBee Shield — используйте мини-макетку.
Для снижения шума: металлическая арка для микрофона, фелт на опорном колесе, губка для изоляции проводов микрофона. Не 100% эффективно, но улучшило распознавание.
Шаг 3: Настройка WiFi-модуля
RN171VX настраивается AT-командами через последовательный порт. Вход в командный режим: $$$, выход: exit.
Код настройки (WiFi Module Setup внизу) — замените XXXXXX на ваши данные:
set wlan ssid XXXXXX— имя сетиset wlan phrase XXXXXX— парольset ip address XXXXXX— статический IP модуля
Если сеть не WPA2-PSK — измените set wlan auth (см. даташит).
Важно: переключатель на XBee Shield: DLINE — загрузка скетча через USB, UART — работа через WiFi. Переключайте сразу после загрузки (задержка 5 с в коде).
После настройки пингуйте IP модуля. Нет ответа — ошибка настройки.
Шаг 4: Планирование движений
Робот умеет выполнять сложные движения, но для простоты определены ~30 базовых (равномерных) и несколько комбинированных. Нет энкодеров/дальномеров — точность ограничена, но достаточно для перемещения.
Калибровка скорости: засеките время проезда 1–2 с, измерьте расстояние. У автора: 13.7 см/с при 62.5% скорости (250/400). 1 м = 7299 мс. Остальное — пропорции. Для поворотов/дуг — тригонометрия (один круг быстрее другого, или разные направления). Ссылки на теорию в оригинале.
Комплексные фигуры (квадрат, треугольник, круг) задаются в Voice Schema BitVoicer как последовательности базовых команд с задержками.
Шаг 5: Загрузка кода на Arduino
Скетч: BVS_Demo3.ino (в разделе Code). Требует библиотек BitVoicer Server и Pololu Motor Driver (Import .zip Library). Переключатель на DLINE!
Ключевые части кода:
- Константы: скорости (STOP=0, SLOW=100, NORMAL=250, FAST=400), направления (FRONT=-1, BACK=1), 40 базовых команд (byte).
- Переменные выполнения:
motorSpeed,cmdDuration,cmdStartTime,cmdRunning,lastFwdCmd(для команды «вернись»). - WiFi-соединение: функции
Connect()/Disconnect()переводят модуль в командный режим, открывают/закрывают TCP-соединение с сервером. Вloop()— автопереподключение при потере статуса. - RunCommand(byte cmd): switch по командам, задаёт скорости моторов и длительность (мс). В конце
cmdRunning=true,cmdStartTime=millis().
Шаг 6: Настройка BitVoicer Server
Создайте устройство ArduinoUnoWiFi (Mixed), Communication: TCP/IP, IP модуля. Cues: включите Start/End of Activated Period, команда Int16 SendData, данные 1/0 — зажигает/гасит LED при активации.
Голосовая схема: неограниченное число фраз. Примеры: «move forward one meter» и «go forward one meter» → одна команда. Комплексные: «do a square» → последовательность команд с задержками (поле delay).
Советы: задайте команду по умолчанию в Options; копируйте команды между фразами.
Файлы Solution Objects для импорта: Device.sof, VoiceSchema.sof.
Шаг 7: Заключение
Установите батареи AA и крону 9 В — робот жив! После включения переключатель на UART. LED статусов загорятся по мере подключения: WiFi → TCP → 3 из 4 LED (распознаватель назначен). Готов к командам.
Распознавание речи отличное (не 100%, но удивительно хорошее). Точность движений средняя — для улучшения нужны энкодеры на колесах (в комплекте есть диски) и/или ультразвуковые датчики. Оставляю для доработки.
Код
WiFi Module Setup
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
delay(5000);
Serial.print("$$$"); delay(1000);
Serial.println("set wlan auth 4"); delay(1000);
Serial.println("set wlan phrase XXXXXX"); delay(1000);
Serial.println("set wlan ssid XXXXXX"); delay(1000);
Serial.println("set wlan channel 0"); delay(1000);
Serial.println("set wlan join 1"); delay(1000);
Serial.println("set wlan tx 0"); delay(1000);
Serial.println("set ip dhcp 0"); delay(1000);
Serial.println("set ip address XXXXXX"); delay(1000);
Serial.println("set comm remote 0"); delay(1000);
Serial.println("set comm close 0"); delay(1000);
Serial.println("set comm open 0"); delay(1000);
Serial.println("set comm size 500"); delay(1000);
Serial.println("set comm time 50"); delay(1000);
Serial.println("set uart baud 115200"); delay(1000);
Serial.println("set uart flow 0"); delay(1000);
Serial.println("save"); delay(1000);
Serial.println("exit"); delay(1000);
digitalWrite(13, LOW);
}
void loop() { }
Robot Source Code (BVS_Demo3.ino)
Полный скетч с библиотеками BVSP, BVSMic, DualMC33926MotorShield. Управляет движением, захватом аудио, TCP-соединением, протоколом BitVoicer. Основные функции: RunCommand() (switch по 40 командам), Connect()/Disconnect(), обработка событий frameReceived, управление LED, зуммер. Код объёмный — см. оригинал.
Схема подключения
Производственный процесс
- Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
- Создание интернет-управляемого видеostreaming-робота на Arduino и Raspberry Pi
- Надежная система учета рабочего времени на Arduino с RFID и Python
- Интерактивный гироскопический LED-дисплей на NeoPixel Ring и Arduino
- Android-управляемая робот-платформа на Raspberry Pi и Motor Shield
- Робот-ускользатор на сервоприводе: сборка на Arduino и HC-SR04
- Управление Roomba Create 2 через Arduino и Android: пошаговое руководство
- Роботизированная рука 6 степеней свободы на Arduino Mega с управлением через Nunchuk
- Голосовой робот на Arduino Nano: Управление речью через Bluetooth
- Голосовое управление бытовыми приборами: Bluetooth-управление через Google Assistant