Ушанка! В общем, решил показать вам исключительно природу. Птички там, листики да травка. Как затесался сюда этот "AgentХа" ума не приложу. Кстати, перед вами новый вид велосипеда. Называется "Грунтовик" Это как есть подберёзовик, а это подосиновик, ну очень популярное направление будет, наверное. Основные отличие от подберёзовика, то есть от гравийника, в том, что он "AgentХа" разрабатывался в поте волосатых ладоней, упорото под грунты, которые, в отличие от гравия, есть вот тут вот у нас в России, в огромных количествах, всеми нами любимые лесные тропки, да радостные корни. Посему провис каретки 35мм, угол рулевой - 70, а подседел 71°, но это не точно и 5 Bar в 35мм покрышках да какой-то там ETT 543,4мм. Почему так - спросите вы а я вам отвечу: почему нет! У них там, в их них гравийниках, изюминка есть, а тут целая картофелина весом в 11,6кг! Прошу любить и жаловать. "Грунтовик"!
Привет любителям качественного звука! Меня зовут Даниил и я хочу рассказать о нашем с друзьями проекте по разработке бюджетного аудио процессора для любителей, использующих многополосную домашнюю и авто акустику.
Перед описанием характеристик устройства, думаю будет полезным рассказать об основных функциях аудио процессоров:
1) Кривая АЧХ. Невозможно найти динамик, имеющий абсолютно ровную и линейную амплитудно-частотную характеристику. Особенно усугубляет ситуацию наличие нескольких разных излучателей в многополосных акустических системах, где просто выровнять АЧХ нельзя при помощи простого эквалайзера, как в случае с широкополосной акустикой. Кривизна АЧХ может создавать ощущение “ненатуральности звука”, призвука “пластмассы” и т. п. К тому же, сильная нелинейность не позволит услышать определенные инструменты во всей красе, так как часть их диапазона по-просту не будет слышно. Аудио процессор, обладающий продвинутым эквалайзером и множеством аудио выходов, способен избавить от описанных проблем.
2) Функция кроссовера. Звуковой процессор позволяет разделить частотных диапазон для разных динамиков путем выставления частоты среза и её крутизны спада, будь то второй, третий и четвертый порядок. Это позволяет динамикам работать только в своем, наиболее эффективном диапазоне, избавляя нас от ненужных хрипов и искажений звука. Тем самым становится лучше детальность.
3) Задержки звука. В комнате и тем более в автомобиле на пути звуковой волны встречается множество препятствий, при встрече которых волна переотражается и возникают задержки. Задержки меньше нескольких миллисекунд слышат все люди. И для этого даже не надо специально тренироваться и не нужно быть звукорежиссером. При правильной настройке данного параметра возникает ощущение “приближения” и более полного погружения в музыкальный ряд.
Таким образом, мы рассмотрели список основных проблем, легко устраняемых использованием аудио процессора. Перейдем к технической части.
За основу взят МК ESP32, а в роли АЦП выступает микросхема PCM1808, ЦАП PCM5102A. Сейчас собран макет устройства и для управления микроконтроллера написана программа на C++
Макет аудио процессора
Вот характеристики, полученные на макете:
1/2
Функциями эквализации, настройки задержек и кроссовера устройство еще не обладает. Планируется разработка приложения для Android, через которое будет осуществляться настройка процессора.
Интересно ваше мнение о будущем данного устройства.
Ситуация такая - на стыке двух деталей небольшая площадь соприкосновения. Кто-то додумался обработать это место напильником, теперь там люфт. Как можно вернуть сточенное, при следующих условиях: 1. толщина деталей из силумина 3-4 мм. 2. снаружи прочная краска, которую хотелось бы сохранить 3. использовать аргон и прочую сварку нежелательно, т.к. место слишком маленькое для такой грубой работы, да и краску хочется сохранить. 4. Нарощенный металл будет обработан дремелем и испытывать только нагрузки на сжатие, т.е. выломать вбок итд не возможно.
Есть всякие мутные костыли, и хорошие, и плохие - холодная сварка, горящий металл, который капает и горит, всякие диковинные припои для паяльника. Посоветуйте что попробовать?
Взять с собой побольше вкусняшек, запасное колесо и знак аварийной остановки. А что сделать еще — посмотрите в нашем чек-листе. Бонусом — маршруты для отдыха, которые можно проехать даже в плохую погоду.
Собрал я печку, не простую а высокотемпературную, для прокалки опок и вытопки воска.
Вещь не сложная, не наукоемкая, однако пришлось шустрить инфу в интернете на разных источниках, таки вот делаю очередной источник.
Начинаем все с основного материала, я определился, что буду использовать плиты ШВП (шамотновалаконные) толщиной 100 мм. Купил их на Авито.
Прикинул что объем мне нужен не менее 250*300*2500 (шгв).
Порезал и собрал такой домик:
Собрал, но кривой он, щели огромные (тут место шутке про бывшую).
Короче это нужно исправлять. Для этого я надел полнолицевую маску, и начал все добро притирать.
Хоть плиты очень и лёгкие в обработке, они очень пористые и проковырять можно хоть пальцем, но тереть в облаке не полезной пыли пришлось несколько часов.
Далее у нас более менее герметичный скворечник уже есть, нужно думать о том, куда мы будем укладывать нагреватели. Покурили интернет, какой то керамики предложил супер способ это просверлить в плитах отверстия сверлом по дереву и припилить выходы уголком металлическим. Мне очень понравился этот метод.
Далее надо думать о нагревателе. Я определился, что это будет фехраль 1,5 мм. Купил у мужиков не помню уже сколько метров но с тройным запасом, в хозяйстве пригодилось.
Оказывается больше всего в мск покупают фехраль тандырщики, меня эта инфа очень удивила.
Я считал из расчета порядка 200Вт мощности на 1литр объема печки. Конечно по науке нужно считать из объема садки и прочее, но я решил не усложнять себе жизнь, и вам не советую.
Навивать спираль решил на алюминиевую трубку из Леруа ф10мм. Распечатал 3 детали для изготовления примитивного намоточного станка с ручным приводом.
Накрутил себе нагревателей, проверил сопротивление, сказал мол и так сойдёт начал вставлять в пазы.
Далее прикупил набор для автоматизации.
Вот тут самое интересное. Цикл прокалки всегда идёт по полкам, с термообработкой часто так же.
Выбирать терморегулятор не просто есть 3 пути.
Это купить самый простой терморегулятор аля Рекс С 100 (самый распространенный, самый дешёвый и без полок)
Купить Овеновский ТРМ ( ценник от 15к, но за то по полкам)
Замутить все самому на Ардуино (дёшево, долго, и с моими познаниями гарантии результата нет) можете в комментах не писать, что есть готовые проекты, я посмотрел много и не выбрал ничего, а от печки зависит запуск мастерской.
Я выбрал первый вариант ибо время не ждёт, денег мало, надо ещё много всего купить.
И так Рекс с100, термопара S, твердотельное реле, термокомпенсационный провод, и вилка с обычным проводом это все, что нам нужно!
Протянул нагреватели поокрвырял дырку под термопару. И следующим этапом оборачиваю все это добро в каолиновую вату 40мм. Той же фехралью утягиваю.
Дальше надо городить каркас, да желательно чтоб обслуживаемый.
До этого я в своей жизни варил только 1 раз забор, да и после этих процедур оказался на больничном с ожегом глаз. Но хули делать, надо делать.
Болгарка сварочник и погнали, первые металлические сопли пошли.
Захуячил я вот такой разборный каркас из уголков. Дальше заказал на лазере просто листов в размер, закрыл всю каолинку и пиздец.
Ну в смысле печка готова. Для электроника напечатал коробку и первый запуск.
Прошел почти год, печка ебашит исправно. Разгонял максимум на 1100, а так 730 почти каждый день и целый ден.
А знаете, я считаю голосовое управление умным домом эффектным, но не эффективным. Это когда молод, и делать нечего - можно поиграться - поуправлять светом голосом.
В свое время были простые решения типа управления светом хлопаньем рук, и где это все? Это не практично. В семье из нескольких человек, особенно если есть маленькие дети, всегда стоит шум, голосове управление при шуме - это еще тот геморрой.
Более того, если приходится часто включать/выключать свет, то ничего нет удобнее и практичнее простого выключателя на стене, просто поверьте. Проще пройти миммо нажав кнопку, чем произнести фразу. Да и фраза будет не краткой, если у вас больше одного светильника кооторым Вы управляете.
Я вообще не представляю дествительно умный дом с голосовым управлением, потому что в действительно умном доме огромное количество устройств управления и датчиков.
И если это действительно умный дом, значит его прозрачность должна быть максимальная.
Т.е. Вы не должны ощущать его присутствие. И тем более не должны больтать безумолку.
Просто должны выполняться сценарии без вашего участия. Все что вне сценариев должно управляться привычными, простыми органами управления типа выключателя. В том числе, удаление 'умного дома' не должно никак сказаться на основных функциях дома - свет как могли включить выключателем, так и включаем.
Умный дом - это прозрачное дополнение, которое информирует в случае проблем и выполняет элементарные действия, которые не могут быть негативны, типа выклчения всех не основных приборов после ухода всех из дома.
А иначе - весь этот рынок просто пиар бесполезных решений, с которыми интересно поиграться и не более того.
Я еще не говорю о вопросах безопасности, надежности и прочего устройств на базе WIFI и других безпроводных решений, особенно которые завязаны на заруюежные сервисы(в том числе на сервисы не дружественных стран).
В свете широкого внедрения систем домашней автоматизации возникает потребность в более естественном взаимодействии с «умным домом». Как средство натурального взаимодействия между человеком и машиной, голосовой интерфейс заслуженно занимает высокую популярность. В данной статье я поделюсь своим опытом создания бюджетного автономного голосового ассистента для систем умного дома.
❯ Небольшая предыстория
Больше года назад я нашел в своих закромах одноплатный компьютер Raspberry Pi 4 Model B 8 ГБ. Устройство было куплено за небольшую цену в то время, когда человечество ещё не сошло с ума. Без долгих размышлений, я принял решение создать голосового ассистента на базе этого одноплатного компьютера, чтобы управлять своей системой домашней автоматизации. Бонусом к этой идее шли приватность и автономность. В итоге у меня «родилось» устройство под кодовым именем «Мария».
Но в этой статье не пойдет речь об использовании Raspberry Pi 4 Model B, так как в современных реалиях использование данного одноплатного компьютера стоимостью более $190, трудно назвать бюджетным решением.
❯ Давайте изобретать
Недавно компания Xunlong Software, которая занимается выпуском одноплатных компьютеров под маркой Orange Pi, представила интересное решение — плату Orange Pi Zero 2W с 4 ГБ оперативной памяти, стоимостью $27.
Данное решение вполне подходит для нашего проекта, как в техническом, так и в экономическом плане.
Итак, определимся с конструкцией устройства. Изучив спецификацию Orange Pi Zero 2W, у нас формируется следующий список дополнительных компонентов:
Динамик 52мм (просто он у меня уже был $1,3)
Усилитель низкой частоты (буду использовать PAM8403 $0,9 за 10 шт)
USB микрофон (xingzhaotong $1,5)
Шлейф FFC FPC 24pin тип B ($1)
RGB светодиод
❯ Разработка звуковой платы
Согласно документации, аудиовыходы реализованы на боковом разъеме FPC, а интерфейс I2S отсутствует. По крайней мере, мне не удалось его реализовать на этой плате. Таким образом, в качестве аудиовхода мы будем использовать USB-микрофон. В версии «Мария» я использовал I2S-микрофон, который продемонстрировал отличные результаты. Ниже предоставлена распиновка бокового разъёма.
Исходя из вышесказанного, в процессе разработки у нас получается следующая схема «звуковой платы»:
Так могла бы выглядеть плата при производстве на китайской фабрике:
❯ Изготовление звуковой платы
На тот момент, я разрабатывал прототип, и не было известно, как поведет себя схема звуковой платы. Поэтому пришлось выполнять изготовление прототипа платы в домашних условиях, для меня это дело привычное. Плата изготавливалась с помощью фоторезиста и вытравливалась в растворе перекиси водорода, лимонной кислоты и соли.
Немного были переживания относительно качества вытравливания мелких дорожек, но фоторезист не подвёл, всё получилось хорошо.
Ниже показано тестовое подключение звуковой платы к одноплатному компьютеру с помощью шлейфа FFC FPC:
❯ Настало время творчества! Проектируем корпус
Обычно в своих разработках я использую естественный интеллект. Поэтому пришлось придумывать дизайн корпуса самостоятельно, учитывая особенности печати 3D принтера. Разработку модели корпуса выполнял с помощью FreeCAD, результат моделирования вы можете видеть ниже.
Корпус в собранном виде
Вид снизу
Элементы корпуса были спроектированы с учетом оптимизации процесса печати, при этом качество не пострадало. В процессе печати не используются структуры поддержки. Ножки корпуса выполнены из TPU-пластика, использование флекс пластика предотвращает скольжение умной колонки по поверхности стола.
❯ Сборка умной колонки
Подключение элементов устройства выполняется по следующей схеме:
Как видно из схемы, для управления усилителем используется выход 28 (wPi 18) RPI разъёма, данный выход подключается к контакту звуковой платы с обозначением «SOUND EN». К выходам 26, 24, 22 подключается управление RGB светодиода, который выполняет функцию индикатора при выполнения запросов.
Как я упоминал ранее, в качестве микрофона используется USB микрофон марки xingzhaotong, который выглядит так:
Для установки в корпус колонки, нам необходимо его полностью разобрать и оставить только плату. Данная плата подключается согласно распиновки к соответствующим контактам на звуковой плате GND, DP, DM, VCC.
Давайте приступим к сборке устройства. Предварительная примерка платы Orange Pi Zero 2W:
Примерка динамика
Установка динамика и резонатора. Резонатор одновременно выполняет функцию фиксатора
Вид снизу
Вид сверху без верхней крышки, на верхней поверхности резонатора виден прикрепленный USB микрофон в центре будет размещен RGB светодиод.
Распечатанная на 3D принтере часть корпуса
Вид снизу собранной умной колонки. Также снизу располагаются вентиляционные отверстия для охлаждения платы
Для питания устройства используется модуль с разъёмом USB Type C, который фиксируется в специальном адаптере
❯ Немного программной части
В этой статье я не планировал описывать программную часть устройства, так как это занимает большой объем информации, лучше это сделать в отдельной статье. Но ниже будут предоставлены некоторые моменты по программной настройки устройства.
Операционная система:
В качестве операционной системы я использовал Debian Bullseye c версией ядра 6.1.31, скачать можно на официальном сайте Orange Pi.
Управление GPIO:
Для управления GPIO используется официальная библиотека Orange Pi wiringPi.
После успешной установки Orange Pi wiringPi, мы можем вывести таблицу GPIO:
gpio readall
В итоге мы увидим следующее:
Обратите внимание, что в колонке «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") # Чтение состояние пина
Проверка наличия микрофона в системе:
Чтобы убедиться в правильности подключения микрофона, в консоли необходимо выполнить следующую команду:
Как видим из вывода, устройство USB PnP Sound Device успешно определилось в системе, если устройство отсутствует, то необходимо убедиться в его корректном подключении.
Настройка аудиовыхода:
Чтобы сконфигурировать аудиовыход под наши задачи, в терминале необходимо выполнить следующую команду:
alsamixer
В консоли появится окно с аудио устройствами, нажав F6 необходимо выбрать наше устройство с именем audiocodec и выполнить настройку как отображено ниже на картинке:
После этого можно выполнить алгоритм теста аудиосистемы.
Мы используем линейный выход, поэтому наше устройство имеет имя 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 Алису и подобные коммерческие решения?», сразу же изложу свою мысль:
Я сторонник автономных решений в плане их использования в критической инфраструктуре. А системы умного дома я отношу к этим категориям, поэтому, с моей точки зрения, использование устройств, зависящих от внешних систем, недопустимо. Описанное в статье решение не использует внешних сервисов для распознавания речи, векторизации запросов, синтеза речи и управления устройствами. И, конечно, я имею полный контроль над алгоритмами моего устройства, включая приватность.
Спасибо за ваше внимание! Ниже под спойлером несколько видео работы собранного устройства.
Ранее под постами было много сказано о странном моем выборе кейкапов и я к нему пришел не с проста. Почему выбор таков - расскажу в этом посте.
Когда я впервые сделал хорошо работающую клавиатуру и привык сносно на ней писать, я понял, что стандартные кнопки с механической клавиатуры мне не подходят. Обычного набора может и не хватить, не везде есть одинаковые по высоте в кол-ве 36 штук одинаковые кнопки:
В основном попадались черри и оем форматы. Эти кнопки разрабатывались специально для плоских клавиатур. Они подходят для сплит клавиатур по типу corne:
Перепробовав из того кол-ва доступных форматов что у меня были - обнаружил, что с такими клавишами, пальцы должны при печати высоко подниматься, так как получается перепад высот и он мне не комфортен (пример клавиатуры которую я еще не отправил другу):
Плюсом на FDM принтере такие кнопки очень сложно и долго печатать красивыми.
Благодаря ресурсу thingeverse нашел вот такой вариант который полностью решил проблему "зацепа" пальцев за соседнюю кнопку.
С плоскими кнопками (фото в начале поста) данная проблема полностью уходит.
Такое положение естественнее подходит под радиальное движение нашего пальца.
Для тех кто не умеет писать в 10 пальцев в слепую будет сложно воспринимать такой пользовательский опыт. Опять же для себя - я нашел идеальный вариант. Тем же кто меня просит (из знакомых и коллег) сделать такую клавиатуру я отправляю именно такой набор кейкапов. Покупкой литых кейкапов я не занимаюсь.
Ровно такая же ситуация с тремя кнопками под большой палец - кнопки идеальны по высоте.
Мой идеальный набор для работы: вертикальная мышь и сплит клавиатура 3х5_3
Почему именно 3х5_3? Потому как под все пальцы по три кнопки кроме указательного (для него шесть). Только указательный палец хорошо перемещается влево и вправо. Мизинец, безымянный, средний пальцы это делают хуже (мб у вас по другому).
Вертикальная мышка сложна в использовании так как и положение лучевой кости и движения мышью отличаются. Мышкой управляешь не пальцами а кистью (в игрульки с такой можно играть но вы долго не сможете перестроиться и будете мазать).