- Как работает управление голосом?
- Что такое Arduino и для чего оно нужно?
- Инструкция по настройке голосового управления с помощью Arduino
- Инструменты и материалы
- Порядок подключения комплектующих
- Настройка параметров
- Особенности настройки Arduino для голосового управления
- 1 Электретный капсюльный микрофон CMA-4544PF-W
- Библиотеки
- Распиновка звукового датчика
- Простой пример: обнаружение звука
- Объяснение
- 3 Скетч для считывания показаний электретного микрофона
- Калибровка датчика звука
- Arduino и цифровой датчик температуры DS18B20
- 5 Скетч «эквалайзера»
- 2 Схема подключения микрофона к Arduino
- Подключение
- Управление устройствами с помощью хлопков
- Схема соединений
- Код Arduino
- Объяснение
Как работает управление голосом?
Голосовое управление через смартфон
Сама схема довольно проста, в ее основе лежит микроконтроллер Arduino, который будет обрабатывать сигнал с датчика, производя в зависимости от полученной команды через исполнительную часть необходимое действие. Выбор за ней: ориентация и модульность. Он отлично вписывается в концепцию «умного дома», позволяя расширить свои возможности за счет практически неограниченного количества внешних модулей, удобной системы программирования и интерфейса взаимодействия с компьютером.
Основу разобрали, осталось выбрать принцип работы самого распознавания речи и соответственно тип сенсора. Есть несколько:
- использовать общение с онлайн-сервисами обработки голоса, такими как Google или Яндекс, с последующей реакцией контролера на передаваемые результаты, и в этом случае будет использовано более «умное» устройство — посредник, компьютер или смартфон;
Пример взаимодействия с сервисом Google
- распознавание голосовых фонем силами самого микроконтроллера;
- обработка звуковых сигналов дополнительным модулем, подключенным к Arduino.
понятно, что в первом случае подключать микрофон к самой плате контроллера необязательно. Достаточно будет подключить интерфейсные провода напрямую от компьютера или использовать дополнительный модуль Bluetooth для обеспечения связи в случае смартфона. Последний вариант будет рассмотрен.
Представленная схема голосового управления на базе Arduino будет максимально быстрой наглядной. Но на его основе уже можно создавать настоящие системы обработки голосовых команд.
Что такое Arduino и для чего оно нужно?
Кое-что о контроллере Arduino. По сути, это специализированный компьютер, расположенный на микросхеме, которая, в свою очередь, установлена на плате с удобным подключением внешних устройств, датчиков и интерфейсной части.
Основное предназначение Arduino — создание непрофессионалами довольно сложного высокоинтеллектуального оборудования. Микроконтроллер в таких системах выполняет функцию обработки входных сигналов от датчиков, анализа последовательностей управления, поступающих от интерфейсов и блока управления для подключенных устройств.
Лицо Arduino UNO
Частота процессора в такой системе относительно невысока и редко превышает 16 МГц в старших модификациях. Основным преимуществом компоновки является то, что все части полнофункционального компьютера расположены на одном кристалле: постоянная, перезаписываемая (флэш-память) и оперативная память, контроллер ввода-вывода и сам процессор.
Инструкция по настройке голосового управления с помощью Arduino
Схема DIY, выбранная для демонстрации возможностей голосового управления с помощью Arduino, будет включать в зависимости от команды светодиод определенного цвета.
Полностью собранная схема
Инструменты и материалы
Для сборки системы голосового управления потребуется следующее:
- та же плата, что и микроконтроллер Arduino UNO;
- mini — схема HC-05, на которой разводится модуль связи bluetooth для arduino;
- три резистора на 300-350 Ом;
- светодиоды разного цвета — 3 шт.;
- смартфон.
Порядок подключения комплектующих
Во-первых, вам нужно подключить модульную плату, обеспечивающую связь по Bluetooth, к Arduino. Подключаем контакт RXD от HC-05 к выводу TXD контроллера, аналогично модулю с Arduino RXD. То есть соединяем разъемы крест-накрест. Питание + 3,3 В и GND на группе bluetooth подаются на платы контроллера.
Схема подключения HC-05 к Arduino UNO
Далее подключаем исполнительный блок, голосовое управление которым будет осуществляться через ардуино. Общий контакт «земля» (GND) диодов соединен с ним на центральной плате. Затем каждый из светодиодов со второй ножкой через резистор 330 Ом с каналами цифрового вывода контроллера (2-4).
Подключение светодиодов
Настройка параметров
Следующий скетч, основа системы управления, необходимо загрузить в сам микроконтроллер:
#INCLUDE ‘SoftwareSerial.h’ // вам может потребоваться заменить одинарные кавычки на «<» и «>»
СИНЕЕ ПОСЛЕДОВАТЕЛЬНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ (0, 1);
ГОЛОС Д’АРГО ДЛИННЫЙ;
INT GLED = 2; // Прикреплен к выводу # 2
INT YLED = 3; // Прикреплен к выводу # 3
INT RLED = 4; // Прикреплен к выводу # 4
АННУЛИРОВАТЬ АЛЛОН ()
{
ЦИФРОВАЯ ПИСЬМА (КРАСНАЯ, ВЫСОКАЯ);
ЦИФРОВАЯ ЗАПИСЬ (YLED, HIGH);
ЦИФРОВАЯ ПИСЬМА (GLED, HIGH);
}
АННУЛИРОВАТЬ РАЗРЕШЕНИЕ ()
{
ЦИФРОВАЯ ЗАПИСЬ (КРАСНАЯ, НИЗКАЯ);
ЦИФРОВАЯ ЗАПИСЬ (ЖЕЛТЫЙ, НИЗКИЙ);
ЦИФРОВАЯ ЗАПИСЬ (GLED, LOW);
}
ПУСТАЯ НАСТРОЙКА ()
{
SERIAL.BEGIN (9600);
СИНИЙ.БЕГИН (9600);
РЕЖИМ ПИН (КРАСНЫЙ, ВЫХОД);
РЕЖИМ КОНТАКТА (ГОЛ., ВЫХОД);
РЕЖИМ ПИН (GLED, ВЫХОД);
}
ПУСТОЙ ЦИКЛ ()
{
WHILE (SERIAL.AVAILABLE ()) // Цикл чтения сигналов от bluetooth
{
ЗАДЕРЖКА (10); // Считываем период ожидания
СИМВОЛ A = СЕРИЙНЫЙ ЧТЕНИЕ (); // Считываем символ из порта
ЕСЛИ (LA == ‘#’)
{
РАССТАВАТЬСЯ; // Выход из цикла, если найдено «#»
}
ДЛИННЫЙ ГОЛОС + = ЛА;
}
ЕСЛИ (ДЛИНА ГОЛОСА ()> 0)
{
ЕСЛИ (ГОЛОС == «* ВКЛЮЧИТЬ ВСЕ СВЕТОДИОДЫ»)
{
ВСЕ ();
}
ELSE IF (ГОЛОС == «* ВЫКЛЮЧИТЬ ВСЕ СВЕТОДИОДЫ»)
{
ВСЕ ВЫКЛЮЧИТЬ ();
}
ELSE IF (ПУНКТ == «* КРАСНОЕ ЗАЖИГАНИЕ»)
{
ЦИФРОВАЯ ПИСЬМА (КРАСНАЯ, ВЫСОКАЯ);
}
ELSE IF (ПУНКТ == «* ЖЕЛТОЕ ЗАЖИГАНИЕ»)
{
ЦИФРОВАЯ ЗАПИСЬ (YLED, HIGH);
}
ИНАЧЕ ЕСЛИ (ПУНКТ == «* ЗЕЛЕНОЕ ОСВЕЩЕНИЕ»)
{
ЦИФРОВАЯ ПИСЬМА (GLED, HIGH);
}
ИНАЧЕ ЕСЛИ (ПУНКТ == «* ВЫКЛ. КРАСНЫЙ»)
{
ЦИФРОВАЯ ЗАПИСЬ (КРАСНАЯ, НИЗКАЯ);
}
ELSE IF (ГОЛОС == «* ВЫКЛ. ЖЕЛТЫЙ»)
{
ЦИФРОВАЯ ЗАПИСЬ (ЖЕЛТЫЙ, НИЗКИЙ);
}
ИНАЧЕ ЕСЛИ (ПУНКТ == «* ЗЕЛЕНЫЙ ВЫКЛ»)
{
ЦИФРОВАЯ ЗАПИСЬ (GLED, LOW);
}
VOICELONG = «»; // Сбросить переменную
}
}
Самая интерактивная часть с пользователем — приложение на смартфоне. Его можно найти в Google Market из «BT VOICE CONTROL for ARDUINO» из SIMPLELABSIN.
Связь сделанной схемы и смартфона осуществляется при подаче питания и выборе «подключить робота» в меню программы BT Voice Control (правый верхний угол). Откроется окно со списком коммуникационного оборудования — в нем нужно найти и выбрать HC-05.
это все. Ты можешь работать. Команды — это те, которые написаны в коде скетча. Например, то, что сказано в пункте «POWER ON GREEN», включит зеленый светодиод.
Особенности настройки Arduino для голосового управления
Поскольку мы говорим по-русски, команды на иностранном языке — плохая идея даже в демонстрационных целях. Вы можете заменить их на латинский алфавит, где русский звук пишется английскими буквами. Например, если линия эскиза
В противном случае if (item == «* желтый свет»)
заменяется
В противном случае if (entry == «* включить гельтуй»)
тогда вы можете использовать голосовую команду «стать желтым». К сожалению, звучание латинского алфавита немного отличается от русского, поэтому здесь придется поэкспериментировать.
1 Электретный капсюльный микрофон CMA-4544PF-W
Электретный микрофон CMA-4544PF-W, являющийся основой модуля, реагирует на звуковые волны с частотами от 20 Гц до 20 кГц. Микрофон всенаправленный, то есть чувствительный к звуку со всех сторон, с чувствительностью -44 дБ. Подробнее о конструкции и принципе работы электретных микрофонов читайте в статье «Устройство и принцип работы электретных микрофонов».
CMA-4544PF-W капсюльный электретный микрофон и микрофонный модуль
Воспользуемся готовым модулем, в котором есть микрофон и минимально необходимый жгут. Вы можете приобрести такую форму здесь.
Библиотеки
Модуль излучает аналоговый сигнал, т.е.достаточно опросить его стандартными инструментами Arduino, чтобы получить необработанный сигнал. Но есть еще полезные библиотеки:
- Если для измерения громкости звука используется микрофон, можно использовать библиотеку анализа амплитуды VolAnalyzer, которая обработает звук и преобразует громкость в желаемый диапазон, а также автоматически отрегулирует чувствительность при изменении среднего уровня громкости
- Clap — библиотека для распознавания хлопающих в ладоши, удобная для использования вместе с VolAnalyzer
- Библиотека FHT может использоваться для анализа звуковой частоты (только AVR)
Распиновка звукового датчика
У этого звукового датчика всего три выхода:
Рисунок 4 — Распиновка модуля звукового датчика
Вывод VCC подает питание на датчик. Рекомендуется запитать датчик напряжением от 3,3 до 5 В.
GND для заземления.
Вывод OUT высокий, когда тихо, и низкий, когда слышен звук. Вы можете подключить его к любому цифровому выводу на Arduino или напрямую к реле 5 В или аналогичному устройству.
Простой пример: обнаружение звука
Теперь, когда все подключено, вам понадобится набросок, чтобы проверить эту схему в действии.
В следующем примере обнаруживаются хлопки или щелчки и отображается сообщение на мониторе последовательного порта. Протестируйте набросок в действии, а затем мы рассмотрим его поближе.
#define sensorPin 7 // Переменная для хранения времени, когда произошло последнее событие unsigned long lastEvent = 0; void setup () {// Устанавливаем контакт, к которому подключен датчик, как вход pinMode (sensorPin, INPUT); Последовательный запуск (9600); } void loop () {// Считываем показания датчика int sensorData = digitalRead (sensorPin); // Если на выводе низкий логический уровень, звук обнаруживается if (sensorData == LOW) {// Если с момента последнего состояния низкого логического уровня прошло 25 мс, // это означает, что был обнаружен хлопок, а не какой-либо false play if (millis () — lastEvent> 25) {Serial.println («Обнаружен хлопок!»); } // Запоминаем, когда произошло последнее событие lastEvent = millis(); } }
Если все в порядке, при обнаружении хлопка вы должны увидеть вывод на последовательном мониторе, аналогичный показанному ниже.
Рисунок 6 — Выходные данные эскиза обнаружения всплывающих окон
Объяснение
Скетч начинается с объявления вывода Arduino, к которому подключен вывод OUT датчика.
#define sensorPin 7
Затем мы определяем переменную с именем lastEvent, в которой хранится время, прошедшее с момента обнаружения хлопка. Это поможет нам исключить ложные срабатывания.
беззнаковый длинный lastEvent = 0;
В функции setup () мы определяем сигнальный контакт, к которому подключен датчик, как вход. Также мы установили последовательную связь с компьютером.
pinMode (sensorPin, ВХОД); Последовательный запуск (9600);
В функции loop () мы сначала считываем состояние цифрового вывода датчика.
int sensorData = digitalRead (сенсорпин);
Когда датчик обнаруживает звук, достаточно громкий, чтобы превысить пороговое значение, логический выход падает. Но мы должны убедиться, что звук вызван хлопком, а не случайными фоновыми шумами. Итак ждем 25 миллисекунд. Если логический уровень на выводе остается низким более 25 миллисекунд, мы объявляем, что хлопок был обнаружен.
if (sensorData == LOW) {if (millis () — lastEvent> 25) {Serial.println («Обнаружен хлопок!»); } lastEvent = millis(); }
3 Скетч для считывания показаний электретного микрофона
Напишем программу для Arduino, которая будет считывать показания с микрофона и передавать их в последовательный порт в милливольтах.
Зачем подключать микрофон к Arduino? Например, для измерения уровня шума; управлять роботом: хлопать или останавливаться. Некоторым даже удается «обучить» Arduino обнаруживать различные звуки и тем самым создать более интеллектуальное управление: робот будет понимать команды «Стоп» и «Вперед» (как, например, в статье «Распознавание голоса с помощью Arduino»).
Калибровка датчика звука
Чтобы получить точные показания звукового датчика, рекомендуется сначала его откалибровать.
Модуль содержит встроенный потенциометр для калибровки цифрового выхода (OUT.
Поворачивая потенциометр, можно установить пороговое значение. Поэтому, когда уровень звука превышает пороговое значение, загорается светодиодный индикатор состояния, а на цифровом выходе (OUT) становится низкий уровень.
Теперь, чтобы откалибровать датчик, хлопните в ладоши возле микрофона и регулируйте потенциометр до тех пор, пока светодиод состояния на модуле не начнет мигать в ответ на ваши аплодисменты.
Теперь датчик откалиброван и готов к использованию.
Arduino и цифровой датчик температуры DS18B20
5 Скетч «эквалайзера»
Немного подправив эскиз. Добавим светодиоды и их пороги.
const int micPin = A0; const int gPin = 12; const int yPin = 11; const int rPin = 10; void setup () {Serial.begin (9600); pinMode (gPin, ВЫХОД); pinMode (yPin, ВЫХОД); pinMode (rPin, ВЫХОД); } void loop () {int mv = analogRead (micPin) * 5.0 / 1024.0 * 1000.0; // значения в милливольтах Serial.println (mv); // вывод в порт / * пороги светодиода выставлены вами экспериментально: * / if (mv <2100) {// порог зеленого светодиода, мВ digitalWrite (gPin, HIGH); digitalWrite (yPin, LOW); digitalWrite (rPin, LOW); } else if (mv <2125) {// порог желтого светодиода, мВ digitalWrite (gPin, HIGH); digitalWrite (yPin, HIGH); digitalWrite (rPin, LOW); } else if (mv <2150) {// пороговое значение красного светодиода, мВ digitalWrite (gPin, HIGH); digitalWrite (yPin, HIGH); digitalWrite (rPin, HIGH); } }
Эквалайзер готов! Попробуйте говорить в микрофон, и вы увидите, что светодиоды загорятся, когда вы измените громкость речи.
2 Схема подключения микрофона к Arduino
Модуль содержит электретный микрофон, для которого требуется питание от 3 до 10 вольт. Важна полярность подключения. Подключаем модуль простым способом:
- клемма «V» модуля — к питанию +5 вольт,
- пин «G» — к GND,
- пин «S» — к аналоговому порту Arduino «A0.
Схема подключения электретного микрофона к Arduino
Подключение
Для источника питания и аналогового вывода:
Примечание:
- На схеме Arduino (слева) можно переключить опорное напряжение (вывод REF) на интегрированный источник 3,3 В, предпочтительно через резистор 10 кОм. Поэтому вызовите в программе analogReference (EXTERNAL). Это необходимо для расширения диапазона считывания микрофонного сигнала и более точной его обработки (выходы 0..2,5В)
- На схеме Wemos (справа) мы подключаем микрофон к источнику питания 3,3 В. Он по-прежнему выводит сигнал 0… 2,5 В, что очень хорошо: Wemos имеет только 3,3 В — предел более высокого напряжения на аналоговом выводе. A0
Управление устройствами с помощью хлопков
В нашем следующем проекте мы будем использовать звуковой датчик в качестве «детектора хлопков», который включает устройства с питанием от переменного тока с хлопком.
В этом проекте для управления питанием устройств используется одноканальный релейный модуль, который будет переключать переменное напряжение сети на 220 В.
Схема соединений
Схема подключения для этого проекта очень проста.
Предупреждение: Эта схема работает с сетью AC 220V AC HIGH. Неправильное подключение или использование может привести к серьезным травмам или смерти. Поэтому этот проект предназначен для людей, имеющих опыт и знания мер безопасности при работе с высоким переменным напряжением. |
сначала необходимо подать питание на модуль датчика и реле. Подключите их выводы VCC к выводу 5V на Arduino, а выводы GND к выводу GND на Arduino.
Затем подключите выходной контакт (OUT) звукового датчика к цифровому контакту 7 на Arduino, а управляющий контакт (IN) на модуле реле к цифровому контакту 8 на Arduino.
вы также должны поместить релейный модуль в линию питания устройства, которым хотите управлять. Вам нужно будет перерезать провод в шнуре питания и подключить один конец отрезанного провода (идущий от вилки) к клемме COM (общий) модуля реле, а другой — к клемме NO (нормально разомкнутый).
Схема подключения представлена на следующем рисунке.
Рисунок 7 — Схема подключения звукового датчика и модуля реле к плате Arduino
Код Arduino
Ниже приведен эскиз для управления устройствами с помощью приветствия.
#define sensorPin 7 #define relayPin 8 // Переменная для хранения времени, когда произошло последнее событие unsigned long lastEvent = 0; // Переменная для хранения состояния реле boolean relayState = false; void setup () {pinMode (relayPin, ВЫХОД); // Настройте вывод, подключенный к реле, как вывод pinMode (sensorPin, INPUT); // Настраиваем вывод, подключенный к датчику, как вход} void loop () {// Считываем показания датчика int sensorData = digitalRead (sensorPin); // Если на выводе низкий логический уровень, звук обнаруживается if (sensorData == LOW) {// Если с момента последнего состояния низкого логического уровня прошло 25 мс, // это означает, что был обнаружен хлопок, а не ложь единицы звучат if (millis () — lastEvent> 25) {// изменяем переменную состояния реле и устанавливаем состояние на выходе relayState =! relayState; digitalWrite (relayPin, relayState? HIGH: LOW); } // Запоминаем, когда произошло последнее событие lastEvent = millis(); } }
После загрузки программы в Arduino и включения всего, датчик должен включать или выключать управляемое устройство каждый раз, когда вы хлопаете в ладоши.
Объяснение
Если вы сравните этот набросок с предыдущим, вы заметите много общего, помимо нескольких вещей.
Сначала мы объявляем вывод Arduino, к которому подключен вывод управления реле (IN). Мы также определили новую переменную relayState для поддержания состояния реле.
#define relayPin 8 boolean relayState = false;
В функции setup () мы настраиваем выход relayPin как выход.
pinMode (relayPin, ВЫХОД);
Теперь, когда мы обнаруживаем потрескивающий звук, вместо вывода сообщения на монитор последовательного порта мы просто активируем состояние реле.
relayState =! relayStato; digitalWrite (relayPin, relayState? HIGH: LOW);