Звуков детектор, електроника за всеки
Блог за електроника
Здравейте! Днес ще сглобим акустичен сензор.
Нека оставим гласовия анализ и други високи технологии на професионалистите и нека вземем по-проста задача за себе си: по команда (няколко пляскания с ръка) устройството трябва да извърши някакво действие. Нека това действие е включване / изключване на осветлението. В този случай, разбира се, устройството трябва да различи командата от всеки шум.
Има два начина за преобразуване на звука в електрически сигнал: използване на пиезо високоговорител или микрофон. Имат изходно напрежение. За пиезо високоговорител, в покой, изходът е 0 V, докато за микрофон обикновено е около 2 V, в зависимост от издърпващия резистор.
Пиезо говорителят не е за всеки. Една проста "запис с две жици" има малка чувствителност, въпреки че ако я напъхате в резонатор, вероятно ще стане по-добре. Пиезо високоговорителите на марката 3P-22 са идеални. Това е такова кръгло парче с диаметър 3 см, с дупка в центъра. изглежда така:
Има ги в съветските часовници с будилник и на много други места.
Можете да управлявате получения сигнал в MC с помощта на усилватели и ADC - тогава ще получим пълна информация за формата на сигнала. Но за нашите цели този подход е излишен - нека го направим по-лесно - нека прекараме сигнала през компаратора:
Когато свързвате пиезо емитер, трябва да окачите шунтиращ резистор (R3 на диаграмата), така че зарядът да тече през него. В противен случай, поради огромния входен импеданс на компаратора, напрежението на пиезо емитера ще спадне много бавно и няма да видим никакви импулси. Експериментално избрах номиналната стойност от 24 kOhm. Можете да го намалите до 10k, но тогава чувствителността ще падне. Ако вземете повече, тогава чувствителността ще се увеличи, но напрежението ще падне бавно, което ще доведе до грешки.
Прагът на компаратора се регулира с помощта на тример резистор. От съображения за икономия не инсталирах многооборотен тример, но действах по-хитро. Горният резистор (R1=47k) ограничава диапазона на напрежението - не можете да изтръгнете повече от 0.104V от това нещо. А с подстригващ резистор с номинална стойност 1k можете да регулирате прага от 0 до 104 mV. Това е, ако се захранваме от 5V, в противен случай трябва да преизчислите резисторите. Въпреки това, този диапазон е повече от достатъчен за работа с пиезо емитер, така че можете да използвате същите рейтинги, когато се захранва от 3V.
Когато свързвах микрофон, използвах многооборотен тример.
Между другото, активното ниво на нашата верига е ниско. Ако някой не го харесва, той разменя праговото напрежение и входния сигнал.
С избора на MK не се притеснявах и взех ATTiny13. Един килобайт памет ни е достатъчен. Може да се използва вграден компаратор. Неговият “+” вход е AIN0 (PB0), а “-” е AIN1 (PB1).
Можете да захранвате вашето устройство по различни начини. Зависи къде смятате да го поставите. Устройството ми управляваше лампата и се захранваше от малък трансформатор (взех го от китайско PSU).
В горната част на веригата е захранването. Променливото напрежение от трансформатора се коригира от диоден мост и се изглажда от кондензатор. Вторият кондензатор (C4) служи за потискане на RF смущения. След това напрежението се намалява до 5V (LM7805).
Използвах вградения компаратор, въпреки че повечето евтини компаратори го изпреварват по отношение на производителността. Но се отървах от допълнителната малка верига, значително опростявайки окабеляването.
Светодиодът е необходим за отстраняване на грешки. Първо, може да се използва за оценка на реалната честота на MK, защото, когато се тактува от вътрешната RC верига, тя е далеч от номиналната. На второ място, ще бъде полезноопределяне на преднапрежението на компаратора. Трето, те могат да мигат по време на отстраняване на грешки, без да дърпат товара отново. Или мигайте при получаване на импулс, за да оцените чувствителността на устройството.
Захранващият модул е разположен отдолу. Това е триак и оптична изолация. DI HALT вече писа за това как работи триакът и как се използва, така че няма да се повтарям.
Начертах печата в SprintLayout и го направих с LUT:
Трансформаторът и пиезо високоговорителят се свързват към конекторите и се пъхат - където е удобно. Освен това пиезо високоговорителят не трябва да е заключен в тялото на устройството - по-добре е да гледа навън.
Сега започва най-важното нещо - фърмуер!Веднага ще направя резервация, че ще опиша алгоритъм, който реагира на 3 пляскания, защото команда от две пляскания дава много "фалшиви положителни резултати".
Имаме нужда от две неща от MK: компаратор с неговото прекъсване и 16-битов таймер. В Tiny13 няма такъв дебел таймер, така че нека го направим сами. Компараторът ще бъде конфигуриран да прекъсва на „Falling output edge“, т.е. ACIS1 бит към едно. Нека зададем прескалера = 64 за таймера. пълен период = 0,873 секунди с копейки.
На преден план е променливата на състоянието. Ако до момента на препълване на таймера той е равен на 3, тогава можете да превключите светлината. Първоначално е = 0, след всяко препълване на таймера отново се нулира.
Цялата магия ще бъде направена в манипулатора на прекъсвания от аналоговия компаратор. Тук MK ще определи времето на следващия импулс и в зависимост от това ще промени стойността на състоянието.
И на компаратора от всяко пляскане пристигат куп импулси. Ако разделите цялото време на таймера на периоди, ще получите нещо подобно:
Сега, нека се опитаме да го разберемкакво става тук:
- Устройството улавя първото пляскане, започва периодът p1 (пулс 1). Ще продължи до p_len. В този момент таймерът стартира и състоянието става = 1.
- Докато състояние = 1, ние проверяваме дали следващият импулс е ударил между p_len и p2e_begin. Ако удари, значи е в период Q1 (тишина 1) и в него трябва да има тишина. Така че това не е команда, а шум - записваме го в състояние 0xFF (като грешка).
- Ако състояние = 1 и импулсът падна между p2e_begin и p2e_end, тоест в периода p2e (очакване на импулс 2 - „Изчакване на второто пляскане“), тогава правим следното: записваме текущата стойност на таймера в променливата Temp_pulse_begin и записваме в състояние 2. Всичко! Вторият памук се хваща.
- Ако състояние = 2, тогава, както за първи път, проверяваме дали импулсът не е попаднал в периода Q2. Само сравняваме не с p2_end, а с Temp_pulse_begin + p_len. Ако удари, записваме в състояние 0xFF.
- Ако състояние = 2 и импулсът удари p3e, тогава направете както в стъпка 3 - запишете времето в Temp_pulse_begin и запишете 3 в състояние.
- Ако състояние = 3 и импулсът се появи след Temp_pulse_begin + p_len, т.е. в период Q3, тогава записваме в състояние 0xFF.
Като този. Оказва се, че системата ще работи само ако три пляскания попаднат в периоди p1, p2 и p3, а във всички периоди Q ще има тишина.
За наше щастие, пиезо високоговорителят има селективна чувствителност - реагира само на остри звуци. Тези. той няма да обръща внимание на музиката от високоговорителите, мяукането на котка и т.н., но на пляскането на ръцете си ще отговори с радостен скок на напрежението на изхода. Между другото, той реагира много добре на вибрации. Ако почукате моята лампа (или повърхността, на която е закрепена) с пръст, тя ще се включи, все едно пляскате с ръце.
Микрофонът също има чувствителност.избирателно, но в другата посока. Първо, той, доста весело, реагира на глас, музика и други звуци, от които не се нуждаем. Второ, микрофонът е добър в улавянето на внезапни промени в налягането. Гледах няколко пъти как идва импулс от компаратора, когато входната врата на апартамента се затръшна (устройството беше в задната стая!).
Няма значение какво ще използвате - пиезо високоговорител или микрофон. Софтуерната част от това почти не се променя. Въпреки това, може да се наложи да промените продължителността на периодите.
Не гарантирам, че устройството ще работи без грешки, но сега ще ви разкажа как да минимизирате броя им.
Има два вида грешки - "фалшиво положително" и "липсваща команда". В първия случай устройството приема шума като команда, а във втория - командата като шум.
Как да третираме "фалшиви положителни резултати":
- Необходимо е да премахнете „допълнителната“ чувствителност, като регулирате тримера, така че тихите шумове да не преминават през компаратора.
- Отделете устройството от повърхността, върху която е закрепено. Например подложка от пяна. След това ще спре да реагира на вибрации.
- Възможно е да се увеличи продължителността на Q-периодите (чрез пропорционално намаляване на p2e и p3e), въпреки че този метод може да причини „прескачане на команди“.
- Можете да увеличите продължителността на последния "тих" период (Q3), като увеличите общия период на таймера. Основното тук е да не прекалявате :)
Пропускане на бойни екипи:
Пример за справяне с фалшиви алармиУстройството е монтирано в стаята и управлява "голямата" светлина. Могат да бъдат направени няколко промени в дизайна, за да се намали вероятността от фалшиви положителни резултати в такова приложение.
Тъй като устройството се управлява на кратко разстояние (напр.стая 3x4 метра), не е необходима висока чувствителност. Намаляването на чувствителността на устройството ще намали броя на фалшивите положителни резултати. Уредът може да се монтира така, че звукът извън помещението да не достига директно до него. Отразеният звук има много по-малко енергия, което означава, че шумът, идващ извън стаята, ще бъде потиснат. За да потиснете вибрациите, можете да отделите устройството със слой от порест каучук. Но това също ще повлияе на чувствителността на устройството (обикновено в такива случаи чувствителността намалява). Устройството контролира осветлението, което означава, че може да се монтира фотодиод на него. Ако товарът (лампа) е изключен и има достатъчно външно осветление, тогава не можете да приемете командата за включване. Това ще премахне фалшивите положителни резултати през дневните часове и тогава има най-много външен шум.
Видео демонстрация на работа на устройството