Детектор звуків, Електроніка для всіх
Блог про електроніку
Вітання! Сьогодні ми збиратимемо акустичний датчик.
Аналіз голосу та інший хай-тек залишимо професіоналам, а собі візьмемо завдання простіше: за командою (пара бавовни в долоні) пристрій повинен виконувати будь-яку дію. Нехай такою дією буде увімкнення/вимкнення освітлення. При цьому, звичайно, пристрій повинен відрізняти команду від шуму.
Перетворити звук на електричний сигнал можна двома способами: за допомогою п'єзодинаміка або мікрофона. На виході вони мають напругу. У п'єзодинаміка, у стані спокою вихід = 0В, а мікрофон, як правило, близько 2В, залежно від підтягуючого резистора.
П'єзодинамік підійде не кожен. Проста «пластинка з двома проводками» має невелику чутливість, але якщо її запхати в резонатор, то, напевно, стане краще. Ідеально підходять п'єзодинаміки марки 3П-22. Це такий кругляшка 3 см у діаметрі, з отвором у центрі. Виглядає так:

Такі стоять у совковому годиннику з будильником, і ще багато де.
Загнати отриманий сигнал у МК можна за допомогою підсилювачів та АЦП – тоді ми отримаємо повну інформацію про форму сигналу. Але для наших цілей такий підхід надлишковий – вчинимо простіше – пропустимо сигнал через компаратор:

При підключенні п'єзовипромінювача потрібно повісити резистор шунт (R3 на схемі), щоб через нього стікав заряд. Інакше, через величезний вхідний опір компаратора, напруга на п'єзовипромінювачі буде спадати дико повільно, і ніяких імпульсів нам не бачити. Номінал у 24кому я підібрав експериментально. Можна знизити до 10к, але тоді впаде чутливість. Якщо взяти більше, то чутливість підвищиться, але напруга спадатиме повільно, що призведе до помилок.
Поріг спрацювання компаратора налаштовується за допомогою підстроювального резистора. Заради економії, я не став ставити багатооборотний підрядник, а вчинив хитріше. Верхній резистор (R1=47к) обмежує діапазон напруг – більше 0.104V ти з цієї штуки не вичавиш. А підстроювальним резистором, номіналом 1к, можна регулювати поріг від 0 до 104 мВ. Це якщо харчуємося від 5V, інакше потрібно перерахувати резистори. Хоча, такого діапазону для роботи з п'єзовипромінювачем більш ніж достатньо, тому можна використовувати такі ж номінали і при живленні від 3V.
При підключенні мікрофона використовував багатооборотний підстроєчник.
До речі, активний рівень нашої схеми – низький. Якщо комусь не подобається – міняють місцями порогову напругу та вхідний сигнал.
З вибором МК я не став морочитися і взяв ATTiny13. Кілобайта пам'яті нам цілком вистачить. А компаратор можна використовувати вбудований. "+" вхід у нього - AIN0 (PB0), а "-" - AIN1 (PB1).
Живити пристрій можна різними способами. Залежить від того, куди його планується запхати. Мій девайс керував світильником і харчувався від маленького трансформатора (дістав з китайського БП).

У верхній частині схеми блок живлення. Змінна напруга з трансформатора випрямляється діодним мостом та згладжується конденсатором. Другий конденсатор (С4) служить для придушення перешкод ВЧ. Потім напруга знижується до 5В (LM7805).
Компаратор я використовував убудований, хоча більшість дешевих компараторів обганяють його за характеристиками. Зате я позбувся зайвої мілкосхеми, сильно спростивши розведення.
Світлодіод потрібен для налагодження. По-перше, з його допомогою можна оцінити реальну частоту МК, адже при тактуванні від внутрішнього RC ланцюжка, вона буває далекою від номіналу. По-друге, він стане в нагоді, привизначення напруги усунення компаратора. По-третє, їм можна блимати при налагодженні, не смикаючи вкотре навантаження. Або блимати при отриманні імпульсу, щоб оцінити чутливість пристрою.
У нижній частині розташований силовий модуль. Це симистор та оптична розв'язка. DI HALT вже писав про те, як влаштований симистор, і як його заюзати тому не повторюватимуся.
Друк намалював у SprintLayout і виготовив ЛУТ'ом:

Трансформатор і п'єзодинамік підключаються до роз'ємів, і запихаються - куди зручно. Причому п'єзодинамік не варто замикати в корпусі пристрою - краще, щоб він виглядав назовні.
Тепер починається найголовніше – прошивка!Одразу обмовлюся, що описуватиму алгоритм, який реагує на 3 бавовни, тому що команда з двох бавовнів дає забагато «хибних спрацьовувань».
Від МК нам знадобляться дві речі: компаратор з його перериванням та 16-розрядний таймер. Такого жирного таймера в Tiny13 немає, тому зробимо його самі. Компаратор налаштуємо на переривання «Falling output edge», тобто. біт ACIS1 в одиниці. У таймера поставимо ділник = 64. Тобто. повний період = 0.873 секунди з копійками.
На чільному місці стоїть змінна state. Якщо, на момент переповнення таймера вона дорівнює 3, можна перемикати світло. Спочатку вона = 0, після кожного переповнення таймера вона знову скидається в нуль.
Вся магія творитиметься в обробнику переривання від аналогового компаратора. Тут МК визначатиме час появи чергового імпульсу, і, залежно від цього, змінювати значення state.
А на компаратор, від кожної бавовни, прилітає купа імпульсів. Якщо поділити весь час роботи таймера на періоди, то вийде щось на зразок цього:

Тепер, спробуємо розібратися, зтим, що тут відбувається:
- Пристрій ловить першу бавовну, починається період p1 (pulse 1). Він продовжуватиметься до p_len. У цей момент запускається таймер, а стан стає = 1.
- Поки state = 1, перевіряємо, чи не потрапив черговий імпульс між p_len і p2e_begin. Якщо потрапив, то він у періоді Q1 (quietness 1), а в ньому має бути тиша. Значить це команда, а шум – записуємо в state 0xFF (Типу, помилка).
- Якщо state = 1, і імпульс потрапив між p2e_begin і p2e_end, тобто в період p2e (pulse 2 expectation - «Очікування другої бавовни»), то ми робимо таку штуку: записуємо поточне значення таймера в змінну Temp_pulse_begin, і пишемо в sta. Все! Друга бавовна ловиться.
- Якщо state = 2, то, як і вперше, перевіряємо – чи не потрапив імпульс під час Q2. Тільки порівнюємо не з p2_end, і з Temp_pulse_begin + p_len. Якщо потрапив – пишемо у state 0xFF.
- Якщо state = 2, і імпульс потрапив у p3e, то робимо, як і п.3 – записуємо час у Temp_pulse_begin, а state пишемо 3.
- Якщо state = 3, то імпульс з'явився після Temp_pulse_begin + p_len, тобто. в період Q3, то пишемо в state 0xFF.
Ось так. Виходить, що система спрацює тільки якщо три бавовни потраплять у періоди p1, p2 і p3, а в усіх періодах Q буде тиша.
На наше щастя, п'єзодинамік має вибіркову чутливість – реагує тільки на різкі звуки. Тобто. на музику з колонок, нявкання кота і т.п., він не зверне уваги, а от на бавовну в долоні відгукнеться радісним сплеском напруги на виході. Він, до речі, добре реагує на вібрації. Якщо постукати пальцем по моєму світильнику (або поверхні, на якій він кріпиться), то він увімкнеться, також як від бавовни в долоні.
У мікрофона чутливість тежвибіркова, але в інший бік. По-перше, він, досить бадьоро, реагує на голос, музику та інші непотрібні нам звуки. По-друге, мікрофон добре ловить різкі зміни тиску. Я кілька разів спостерігав, як з компаратора прилітав імпульс, коли зачинялися вхідні двері до квартири (Пристрій при цьому знаходився в дальній кімнаті!).
Не важливо, що ти вирішив використати – п'єзодинамік чи мікрофон. Програмна частина від цього майже не змінюється. Хоча, можливо, доведеться змінити тривалість періодів.
Не гарантую, що пристрій працюватиме без помилок, але про те, як звести їх число до мінімуму, зараз розповім.
Помилки бувають двох типів – «хибне спрацьовування» та «перепустка команди». У першому випадку пристрій приймає шум за команду, а в другому команду за шум.
Як лікувати «хибні спрацьовування»:
- Потрібно усунути «зайву» чутливість, відрегулювавши підстроєчник так, щоб через компаратор не проходили тихі шуми.
- Відокремити пристрій від поверхні, на якій він кріпиться. Наприклад, прокладкою із поролону. Тоді він перестане реагувати на вібрації.
- Можна збільшити тривалість Q-періодів (пропорційно зменшивши p2e та p3e), хоча такий метод може стати причиною «перепусток команди».
- Збільшити тривалість останнього тихого періоду (Q3) можна, збільшивши повний період таймера. Тут головне - не перестаратися
Боротьба з «перепустками команди»:
Приклад боротьби з помилковими спрацьовуваннямиПристрій встановлений у кімнаті і керує «великим» світлом. Щоб знизити ймовірність помилкового спрацьовування в такому додатку, можна внести кілька конструктивних змін.
Якщо керування пристроєм ведеться на невеликій відстані (припустимо,кімната 3х4 метри), велика чутливість не потрібна. Зменшення чутливості пристрою дозволить скоротити кількість помилкових спрацьовувань. Пристрій можна змонтувати так, щоб звук з-за меж кімнати звук не міг потрапити до нього безпосередньо. Відбитий звук має набагато меншу енергію, а значить шуми, що прийшли з-за меж приміщення, будуть пригнічуватися. Для придушення вібрацій, можна відокремити пристрій прошарком з поролону. Але це вплине і на чутливість пристрою (зазвичай у таких випадках чутливість зменшується). Пристрій керує освітленням, отже, на нього можна встановити фотодіод. Якщо навантаження (лампа) вимкнено, а зовнішнього освітлення і так достатньо, то можна не сприймати команду увімкнення. Це дозволить позбутися хибних спрацьовувань у світлий час доби, а саме тоді буває найбільше зовнішніх шумів.
Відео демонстрація роботи пристрою