Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

В свете широкого внедрения систем домашней автоматизации возникает потребность в более естественном взаимодействии с «умным домом». Как средство натурального взаимодействия между человеком и машиной, голосовой интерфейс заслуженно занимает высокую популярность. В данной статье я поделюсь своим опытом создания бюджетного автономного голосового ассистента для систем умного дома.

❯ Небольшая предыстория


Больше года назад я нашел в своих закромах одноплатный компьютер Raspberry Pi 4 Model B 8 ГБ. Устройство было куплено за небольшую цену в то время, когда человечество ещё не сошло с ума. Без долгих размышлений, я принял решение создать голосового ассистента на базе этого одноплатного компьютера, чтобы управлять своей системой домашней автоматизации. Бонусом к этой идее шли приватность и автономность. В итоге у меня «родилось» устройство под кодовым именем «Мария».


Но в этой статье не пойдет речь об использовании Raspberry Pi 4 Model B, так как в современных реалиях использование данного одноплатного компьютера стоимостью более $190, трудно назвать бюджетным решением.

❯ Давайте изобретать


Недавно компания Xunlong Software, которая занимается выпуском одноплатных компьютеров под маркой Orange Pi, представила интересное решение — плату Orange Pi Zero 2W с 4 ГБ оперативной памяти, стоимостью $27.

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост


Данное решение вполне подходит для нашего проекта, как в техническом, так и в экономическом плане.

Итак, определимся с конструкцией устройства. Изучив спецификацию Orange Pi Zero 2W, у нас формируется следующий список дополнительных компонентов:

  1. Динамик 52мм (просто он у меня уже был $1,3)

  2. Усилитель низкой частоты (буду использовать PAM8403 $0,9 за 10 шт)

  3. USB микрофон (xingzhaotong $1,5)

  4. Шлейф FFC FPC 24pin тип B ($1)

  5. RGB светодиод

❯ Разработка звуковой платы


Согласно документации, аудиовыходы реализованы на боковом разъеме FPC, а интерфейс I2S отсутствует. По крайней мере, мне не удалось его реализовать на этой плате. Таким образом, в качестве аудиовхода мы будем использовать USB-микрофон. В версии «Мария» я использовал I2S-микрофон, который продемонстрировал отличные результаты. Ниже предоставлена распиновка бокового разъёма.

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Исходя из вышесказанного, в процессе разработки у нас получается следующая схема «звуковой платы»:

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Так могла бы выглядеть плата при производстве на китайской фабрике:

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост
Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

❯ Изготовление звуковой платы


На тот момент, я разрабатывал прототип, и не было известно, как поведет себя схема звуковой платы. Поэтому пришлось выполнять изготовление прототипа платы в домашних условиях, для меня это дело привычное. Плата изготавливалась с помощью фоторезиста и вытравливалась в растворе перекиси водорода, лимонной кислоты и соли.

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Немного были переживания относительно качества вытравливания мелких дорожек, но фоторезист не подвёл, всё получилось хорошо.

Ниже показано тестовое подключение звуковой платы к одноплатному компьютеру с помощью шлейфа FFC FPC:

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

❯ Настало время творчества! Проектируем корпус


Обычно в своих разработках я использую естественный интеллект. Поэтому пришлось придумывать дизайн корпуса самостоятельно, учитывая особенности печати 3D принтера. Разработку модели корпуса выполнял с помощью FreeCAD, результат моделирования вы можете видеть ниже.

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Корпус в собранном виде

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Вид снизу

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Элементы корпуса были спроектированы с учетом оптимизации процесса печати, при этом качество не пострадало. В процессе печати не используются структуры поддержки. Ножки корпуса выполнены из TPU-пластика, использование флекс пластика предотвращает скольжение умной колонки по поверхности стола.

❯ Сборка умной колонки


Подключение элементов устройства выполняется по следующей схеме:

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Как видно из схемы, для управления усилителем используется выход 28 (wPi 18) RPI разъёма, данный выход подключается к контакту звуковой платы с обозначением «SOUND EN». К выходам 26, 24, 22 подключается управление RGB светодиода, который выполняет функцию индикатора при выполнения запросов.

Как я упоминал ранее, в качестве микрофона используется USB микрофон марки xingzhaotong, который выглядит так:

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Для установки в корпус колонки, нам необходимо его полностью разобрать и оставить только плату. Данная плата подключается согласно распиновки к соответствующим контактам на звуковой плате GND, DP, DM, VCC.

Давайте приступим к сборке устройства. Предварительная примерка платы Orange Pi Zero 2W:

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Примерка динамика

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Установка динамика и резонатора. Резонатор одновременно выполняет функцию фиксатора

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Вид снизу

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Вид сверху без верхней крышки, на верхней поверхности резонатора виден прикрепленный USB микрофон в центре будет размещен RGB светодиод.

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Распечатанная на 3D принтере часть корпуса

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Вид снизу собранной умной колонки. Также снизу располагаются вентиляционные отверстия для охлаждения платы

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Для питания устройства используется модуль с разъёмом USB Type C, который фиксируется в специальном адаптере

❯ Немного программной части


В этой статье я не планировал описывать программную часть устройства, так как это занимает большой объем информации, лучше это сделать в отдельной статье. Но ниже будут предоставлены некоторые моменты по программной настройки устройства.

Операционная система:

В качестве операционной системы я использовал Debian Bullseye c версией ядра 6.1.31, скачать можно на официальном сайте Orange Pi.

Управление GPIO:

Для управления GPIO используется официальная библиотека Orange Pi wiringPi.

Установка wiringPi:

apt-get update
apt-get install -y git
git clone https://github.com/orangepi-xunlong/wiringOP.git
cd wiringOP
sudo ./build clean
sudo ./build

После успешной установки Orange Pi wiringPi, мы можем вывести таблицу GPIO:

gpio readall

В итоге мы увидим следующее:

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

Обратите внимание, что в колонке «V» указано текущее состояние пина RPI.
Чтобы изменить состояние, мы можем воспользоваться следующими командами:

gpio mode 18 out # Изменение типа пина вход/выход (in/out)
gpio write 18 0 # Изменение уровня пина низкий/высокий (0/1)
gpio read 18 # Чтение состояние пина

Пример одного из вариантов управления GPIO из Python скрипта:

import os
os.system("gpio mode 18 out") # Изменение типа пина вход/выход (in/out)
os.system("gpio write 18 0") # Изменение уровня пина низкий уровень
os.system("gpio write 18 1") # Изменение уровня пина высокий уровень
os.system("gpio read 18") # Чтение состояние пина


Проверка наличия микрофона в системе:

Чтобы убедиться в правильности подключения микрофона, в консоли необходимо выполнить следующую команду:

arecord -l

Вывод команды должен быть следующим:

**** List of CAPTURE Hardware Devices ****
card 2: ahubhdmi [ahubhdmi], device 0: ahub_plat-i2s-hifi i2s-hifi-0 [ahub_plat-i2s-hifi i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 3: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0

Как видим из вывода, устройство USB PnP Sound Device успешно определилось в системе, если устройство отсутствует, то необходимо убедиться в его корректном подключении.

Настройка аудиовыхода:

Чтобы сконфигурировать аудиовыход под наши задачи, в терминале необходимо выполнить следующую команду:

alsamixer

В консоли появится окно с аудио устройствами, нажав F6 необходимо выбрать наше устройство с именем audiocodec и выполнить настройку как отображено ниже на картинке:

Моя безумная колонка или бюджетный DIY голосового ассистента для умного дома Электроника, Техника, Технологии, Голосовой помощник, Познавательно, Изобретения, Timeweb, Своими руками, Умный дом, Видео, YouTube, Длиннопост

После этого можно выполнить алгоритм теста аудиосистемы.

Вывод списка доступных устройств воспроизведения звука:

aplay -l

Вывод команды:

**** List of PLAYBACK Hardware Devices ****
card 0: audiocodec [audiocodec], device 0: CDC PCM Codec-0 [CDC PCM Codec-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: ahubhdmi [ahubhdmi], device 0: ahub_plat-i2s-hifi i2s-hifi-0 [ahub_plat-i2s-hifi i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0

Мы используем линейный выход, поэтому наше устройство имеет имя CDC PCM Codec-0 [CDC PCM Codec-0]. Давайте протестируем вывод звука через наше устройство.

Первое что нужно сделать — это включить наш усилитель с помощью команд:

gpio mode 18 out
gpio write 18 1

Далее нам необходимо запустить тест с помощью генератора шума, командой в терминале:

speaker-test -c2 -Dplughw:0,0 # plughw:0,0 - это адрес нашего звукового устройства


Вывод команды:

speaker-test 1.2.4

Playback device is plughw:0,0
Stream parameters are 48000Hz, S16_LE, 2 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 32 to 131072
Period size range from 16 to 16384
Using max buffer size 131072
Periods = 4
was set period_size = 16384
was set buffer_size = 131072
0 - Front Left
1 - Front Right
Time per period = 2.742858
0 - Front Left
1 - Front Right
Time per period = 5.461073
0 - Front Left
1 - Front Right
Time per period = 0.580064

Во время теста должен наблюдаться «белый» шум из динамика, если это произошло, то подключение и настройка аудиосистемы была выполнена корректно.

❯ Итог


В этой статье я попытался описать реализацию аппаратной части своего DIY проекта голосового ассистента для умного дома. Написание статьи отнимает большое количество времени, поэтому программную часть проекта постараюсь описать в следующем материале, если вам будет интересно.

Предугадывая ваш вопрос — «Почему бы не использовать Yandex Алису и подобные коммерческие решения?», сразу же изложу свою мысль:

Я сторонник автономных решений в плане их использования в критической инфраструктуре. А системы умного дома я отношу к этим категориям, поэтому, с моей точки зрения, использование устройств, зависящих от внешних систем, недопустимо. Описанное в статье решение не использует внешних сервисов для распознавания речи, векторизации запросов, синтеза речи и управления устройствами. И, конечно, я имею полный контроль над алгоритмами моего устройства, включая приватность.


Спасибо за ваше внимание! Ниже под спойлером несколько видео работы собранного устройства.

Файлы проекта:

Так же рекомендуем почитать:

TECHNO BROTHER

1.7K постов12.6K подписчиков

Добавить пост

Правила сообщества

1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.

3-Категорически запрещается разжигание межнациональной розни или действий, направленных на возбуждение национальной, расовой вражды, унижение национального достоинства, а также высказывания о превосходстве либо неполноценности пользователей по признаку их отношения к национальной принадлежности или политических взглядов. Мат - Нежелателен. Учитесь выражать мысли без матерщины