Найти в Дзене
Твёрдая логика

Неудача как план: почему мой детектор выстрела молчал и как я его пытаюсь заставить говорить. Часть 1

Часть 1 Здесь будет разбор старой версии и то, что я начал делать для новой. Задумывал передвижного робота, который мог бы определить выстрел и его местонахождение, но для этого сначала нужно сделать сам детектор выстрела, и на основе него уже проектировать робота. Казалось всё просто: модули микрофонов с усилителями, микроконтроллер, и пара строчек кода, и готово! Но так было бы в идеальном мире, а в реальности моя система сначала просто молчала, а затем начались ложные срабатывания. Первый и главный вывод, который я сделал уже на этом этапе: если не можешь описать задачу письменно, не соберёшь и схему. Вот дерево моих предположений, и проверок в хронологическом порядке. Гипотезы номер 1 и номер 2 появились почти одновременно. Но у такой схемы был существенный минус - так как данные передавались последовательно по микроконтроллерам, то проходило большое время между сигналом и выводом на дисплей. Также, как я узнал в скором будущем, соединение по serial нескольких микроконтроллеров
Оглавление

Часть 1 Здесь будет разбор старой версии и то, что я начал делать для новой.

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

1. Условия задачи. (Что я хотел?)

  • Уловить короткий импульсный звук на фоне.
  • Устранить ложные срабатывания на разговор, фоновый шум и т.п..
  • Определить расстояние до него, зная примерную громкость выстрела на расстоянии в 1 метр.
  • При помощи триангуляции определить направление до звука. (Сначала использовал мультиплексор CD4051BE)
  • Вывести информацию на дисплей.

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

2. Разбор полётов. Где логика дала сбой?

Вот дерево моих предположений, и проверок в хронологическом порядке. Гипотезы номер 1 и номер 2 появились почти одновременно.

  • Гипотеза №1: не хватает производительности AtMeg- овского процессора
  1. Сначала пытался решить увеличением числа Arduino
Ардуино, готовые к прошивке
Ардуино, готовые к прошивке
Версия 1.0 на макетной плате, где использовались 3 Arduino и мультиплексор: скромные аппетиты и амбициозная задача.
Версия 1.0 на макетной плате, где использовались 3 Arduino и мультиплексор: скромные аппетиты и амбициозная задача.

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

  • Гипотеза №2: проблема в способе чтения микрофонов
  1. Каким способом я пытался читать полученные значения с микрофонов? Через аналоговый мультиплексор CD4051BE. Я считал, что это снизит нагрузку на микроконтроллер-(ы) и займёт меньше кода, чем опрашивание каждого микрофона одновременно и напрямую, но на самом деле мультиплексор хотя и снижал нагрузку на Arduino, но сильно тормозил время чтения, делало невозможным синхронное чтение данных со всех микрофонов сразу.
  2. Вывод: подключаем микрофоны напрямую к аналоговым портам Arduino Nano. Сработало
  • Гипотеза №3: проблема в софте.
  1. Как я пытался отличить выстрел от фонового шума и других звуков? По пороговому значению амплитуды. Это было наивно...
  2. Вывод и "Ага!" - момент: Выстрел - это не просто громкий звук, это определённая частотная характеристика и форма импульса! Мой код этого «не знал». Нужно анализировать не уровень, а спектр (БПФ) или длину импульса. Это уровень сложности выше, и я его недооценил...

Итоги провала первой версии. Что дальше?

Эта версия не увенчалась готовым устройством, но она дала гораздо больше - систему мышления .

  • Дроби задачу.Ищи сбой не в системе, а в конкретном узле.
  • Физика первична. Прежде чем писать код, нужно тщательно изучить и понять природу явления (выстрел), которую ты собираешься поймать
  • Знать свои границы и тщательно подбирать компоненты. Сейчас я уже жду новую плату STM32F103C8T6, которая подошла под мои задачи, но раньше я использовал те компоненты, какие у меня "завалялись".

Это и есть ” Твёрдая Логика„ - умение разложить задачу на понятные частички, извлечь из этого урок и сложить из них план для следующей, более осознанной попытки.

Сейчас я проектирую вторую версию, и вот, что пока мне удалось понять.

Проблема была не в моих «кривых» руках, а в фундаменте. И "Твёрдая Логика "помогла мне ее найти:

1. MAX4466 (микрофон): Без АРУ слабый звук далёкого выстрела терялся в шумах, а громкий "чих" - зашкаливал.

Вывод для системы: Нужен микрофон с автоматической регулировкой усиления (АРУ).

2. Arduino Nano: Для сложного анализа звука не хватило оперативной памяти и тактовой частоты. Вывод: для системы нужна более мощная плата с ядром ARM (Cortex-M3).

План операции. Выбор новой архитектуры.

Шаг 1. Меняем уши

Задача: Получить стабильный сигнал независимо от громкости.

Решение: MAX9814. У него есть встроенная АРУ, которая держит сигнал в оптимальном диапазоне. Это решает проблему "или тихо, или клиппинг"

MAX9814
MAX9814

Шаг 2. Меняем «мозг»

Задача: Обрабатывать сигналы в реальном времени, анализируя не только громкость, но и частоту/форму импульса.

Решение: STM32F103C8T6 Blue pill (на основе ARM Cortex-M3). В разных больше памяти и вычислительной мощности, поддержка аппаратных периферийных модулей для точного захвата аналогового сигнала и сложных вычислений.

STM32F103C8T6 Blue Pill
STM32F103C8T6 Blue Pill

Заключение

Что изменилось сейчас?

Фундамент перестроен. Новая система потихоньку приоткрывает свои будущие возможности.

Что будет в следующем выпуске?

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

Это и есть "Твёрдая Логика" - не бояться признать ошибку в архитектуре, найти узкие места и пересобрать систему на улучшенных принципах.

#электроника #робототехника #DIY #сделай_сам #детектор_выстрела