Говорящий датчик воды
В современных «умных» домах имеется множество различных сенсоров (датчиков), контролирующих параметры «среды обитания» и извещающих о появлении нештатных ситуаций. Например, сенсоры для обнаружения утечки природного газа, регистрации дыма при пожаре или угарного газа при засорении дымохода камина и пр. Однако большинство сигнализаторов лишь подают звуковой сигнал определенного тона и длительности. При этом на слух не всегда сразу понятно: какой именно датчик сработал и что его писк означает — то ли есть «проблема», то ли просто подсела его батарейка. Гораздо понятнее ситуация станет, если датчик сообщит нужную информацию человеческим голосом, воспроизводя записанные заранее фразы. Голосовой интерфейс постепенно становится стандартом XXI века.
Именно такое устройство и предлагаем вниманию радиолюбителей. При его разработке использованы некоторые идеи из статей в [1,2]. Запись звука может производиться непосредственно с микрофона или путем загрузки файла через USB-порт компьютера. В последнем случае можно добиться гораздо более качественного звучания, т.к. компьютерные звуковые редакторы предоставляют широкие возможности для улучшения фонограмм, добавления к ним различных звуковых эффектов, устранения шумов и т.д. Помимо этого, достаточно качественный звук можно получить от программ синтезаторов речи, которые, как правило, имеют опцию записи речи в файл.
Одним из основных параметров сенсоров является их энергопотребление. Наше устройство задумано как приставка к сенсорам и питается от одной пальчиковой батарейки типоразмера АА, потребляя от нее в дежурном режиме ток около 1,5 мкА. Мы применили описанное устройство для регистрации подъема уровня воды в колодце водоотсасывающего насоса. Необходимая громкость звучания обеспечивается громкоговорителем, встроенным в корпус недорогой компьютерной звуковой колонки. Усилитель колонки питается от сети, однако он включается только на момент проигрывания записи. Включение производится твердотельным реле К1 на основе фототиристора, подсоединяемым в разрыв сетевого провода питания колонки. Таким образом, большую часть времени электроника колонки вообще ничего не потребляет от сети (исключая пренебрежимо малые утечки).
При записи с микрофона звуковой сигнал усиливается микросхемой DA1 (рис.1) и подается на вход аналого-цифрового преобразователя (АЦП) микроконтроллера. Полоса пропускания усилителя (около 4 кГц) определяется фильтром нижних частот R7-C8. Следуя классическому подходу, АЦП производит дискретизацию сигнала на частоте 32 кГц, т.е. с четырехкратной «перевыборкой» по отношению к удвоенной частоте Найквиста (8 кГц). С выхода АЦП сигнал поступает на цифровой фильтр нижних частот с частотой среза 4 кГц, реализованный в программе микроконтроллера DD2. Фильтр также производит децимацию выборок до частоты 8 кГц, которые записываются в микросхему памяти DD3 по интерфейсу SPI.
Перед записью устройство следует выключить выключателем SA1, затем нажать кнопку SB1 и, не отпуская ее, включить питание. При включении через нажатую кнопку подается питание на микрофонный усилитель DA1, в результате чего на его выходе появляется постоянное напряжение около 1,3 В, определяемое делителем R2-R5. Это напряжение измеряется АЦП, и, если оно не менее 1 В, то производится стирание содержимого памяти DD3 и подготовка системы к записи. Собственно запись начинается только при нажатии кнопки SB2 и прекращается при ее отпускании. Таким образом, обе кнопки должны быть нажаты на все время записи.
Если в момент включения кнопка SB1 не нажата (низкий уровень напряжения на выходе DA1), проверяется запрос на загрузку файла через порт USB-компьютера. Для этого перед включением питания следует нажать кнопку SB2, что при включении приведет к подаче уровня логической “1” на вход Р1.0 микроконтроллера, который заставит его ожидать момента отпускания этой кнопки. Не отпуская ее, в разъем Х1 вставляют USB-кабель, другой конец которого должен быть предварительно подсоединен к работающему компьютеру. Подключение кабеля вызывает инициализацию микросхемы DD1, о чем информирует мигнувший несколько раз светодиод VD1.
После инициализации DD1 на ее выходе появляется напряжение +5 В, которое понижается делителем R9-R10 до 3,3 В в соответствии с напряжением питания остальной части схемы. Теперь кнопку SB2 можно отпустить и выбрать на компьютере файл для записи (подробнее об этом — ниже). Запись производится по последовательному асинхронному интерфейсу на скорости 38400 Бод через виртуальный СОМ-порт компьютера. Создание виртуального порта обеспечивается соответствующим драйвером, доступным с WEB-сайта фирмы FTDI — изготовителя DD1. Передающая часть этой микросхемы не задействована. Мигание светодиода VD1 индицирует прием информации с шины USB. По окончании записи от любого из источников производится ее одноразовое контрольное воспроизведение с последующим переводом микроконтроллера в дежурный режим.
Если при включении питания ни одна из кнопок SB1 или SB2 не нажата, микроконтроллер подает питание на датчик воды с вывода Р1.1 и переходит в дежурный (спящий) режим, при котором его собственное токопотребление не превышает 0,1 мкА. Вывод его из этого режима производится нарастающим фронтом сигнала на выходе датчика воды на транзисторе VT1. При появлении воды на контактах разъема XS1 транзистор открывается, и напряжение на его стоке повышается от 0 до 3,3 В. Это напряжение через фильтр R13-C10 подается на вход Р1.0 микроконтроллера DD2 и вызывает аппаратное прерывание, переводящее его в активный режим. Микроконтроллер включает микросхему памяти DD3, читает из нее звуковой сигнал в формате РСМ и преобразует его в широтно-модулированный сигнал на выводе Р2.6. Сигнал ШИМ через фильтр нижних частот (ФНЧ) на ОУ DA3 и разъем Х2 поступает на УЗЧ акустической системы. Частота среза фильтра — около 4 кГц, чем и определяется частотный диапазон воспроизводимых звуков. ФНЧ имеет небольшой подъем на частоте среза для компенсации потерь высоких частот в остальных фильтрах схемы. Этим достигается более приятное звучание.
После проигрывания фонограммы при регистрации воды производится проверка напряжения на выходе датчика (примерно через 12 с). Если оно соответствует наличию воды, то происходит повторное проигрывание с последующим ожиданием и проверкой и т.д. вплоть до исчезновения воды. Временной интервал ожидания обеспечивается сторожевым таймером микроконтроллера. Таймер тактируется встроенным микромощным генератором, включается только на время ожидания и в течение этого времени является единственным активным блоком системы. Во время его работы схема потребляет несколько микроампер. В случае отсутствия воды при следующей проверке все блоки микроконтроллера отключаются, и он переходит из режима периодического опроса датчика в дежурный режим ожидания прерывания от последнего.
Выборки звуковых сигналов считываются из памяти DD3 на частоте децимации 8 кГц, используемой при записи. Для уменьшения помех от дискретизации и улучшения звучания микроконтроллером производится линейная интерполяция выборок до частоты 32 кГц по алгоритму из [1]. Таким образом, период ШИМ на выводе Р2.6 микроконтроллера равен 32 кГц при 8-битном разрешении. Соответственно, частота тактирующих импульсов генератора ШИМ должна быть 32*28=8,192 МГц. Микроконтроллер в активном режиме работает от встроенного генератора на своей максимальной частоте (16 МГц), поэтому частота выборок из памяти на самом деле получается около 7,8 кГц, что весьма близко к 8 кГц, и при воспроизведении речи разница незначительна.
Питание схемы производится от повышающего импульсного преобразователя напряжения на микросхеме DA4. Особенностью ее является крайне низкое собственное токопотребление (около 1,5 мкА) и возможность работы в «дремлющем» режиме. В этом режиме выходное напряжение поддерживается с меньшей точностью при более редкой «подкачке», что существенно повышает КПД преобразователя при малых токах нагрузки.
Переход в «дремлющий» режим производится автоматически при уменьшении потребляемого от преобразователя тока, например, когда микроконтроллер переводится в режим ожидания. В этом случае напряжение на выводе Р1.4 падает до 0, что приводит к закрыванию обоих транзисторов сборки DA2 и, соответственно, обесточиванию микросхем DA3 и DD3. Токопотребление от батареи при этом фактически определяется микросхемой DA4. Отключать питание DD3 очень желательно, поскольку в режиме покоя она потребляет по цепи 3,3 В около 15 мкА, что весьма ощутимо при долговременной работе устройства от батарей.
В режимах записи-воспроизведения напряжение на выводе Р1.4, а следовательно, на выводе 4 сборки DA2 поднимается до 3,3 В, что приводит к активизации памяти и ОУ. Помимо этого, током через R19 включается светодиод реле К1, которое подает питание на УЗЧ активной звуковой колонки. Реле установлено в корпусе колонки и подключается к схеме через один из проводов стереокабеля, вставляемого в стандартный 3,5-мм стереоразъем Х2 и соединяющего устройство с колонкой. Поэтому подсоединение реле на схеме показано пунктиром. Ток через светодиод реле — около 11 мА, что необходимо для его надежного открывания.
Электроника «безымянной» компьютерной звуковой системы была доработана. При разборке оказалось, что в одной из колонок установлен трансформатор питания, обеспечивающий около 12 В на холостом ходу, и стереоусилитель на микросхеме TDA2822M, обслуживающий обе колонки. Доработка свелась к перепайке деталей на плате усилителя для включения TDA2822M по стандартной мостовой схеме из ее «даташита» с целью повышения выходной мощности. Помимо этого, туда был установлен линейный стабилизатор типа 7805 (на 1 А) для понижения напряжения питания, что необходимо в мостовой схеме, работающей на 4-омную нагрузку. Радиатор для 7805 не требуется, т.к. УЗЧ включается только на короткое время. После проверки функционирования УЗЧ в колонку встроено реле К1.
Некоторые малогабаритные акустические системы имеют отсек для батарей, что позволяет сохранять работоспособность всей системы сигнализации при пропадании сетевого напряжения. От батарей следует запитать только УЗЧ через развязывающий диод.
Детали сенсора воды (R11…R13, С11, С12, VT1, XS1) установлены на отдельной плате, соединяемой с основным блоком через стереокабель, помещенный внутрь алюминиевой трубки. После распайки деталей плату сенсора покрывают водонепроницаемым лаком для предотвращения коррозии. С этой же целью разъем датчика воды XS1 выбран с позолоченными контактами, чем достигнута надежная регистрация появленияводы. Средний контакт 3-штырькового разъема XS1 удален. Отметим, что в дежурном режиме при отсутствии воды питание на сенсор подано постоянно. При наличии воды датчик включается лишь на короткое время (около 0,1 с) проверки ее присутствия сигналом с вывода Р1.1 микроконтроллера с интервалом между измерениями не менее 12с, как отмечено выше. Этим исключается сколько-нибудь длительное пропускание постоянного тока через воду, которое может привести к изменению ее электропроводности и отказу датчика.
В активном режиме токопотребление от батареи G1 повышается до 50 мА. Если реле К1 отсоединить, токопотребление падает до 21 мА (по цепи 3,3 В оно примерно в 2,5 раза ниже). В любом случае эти параметры вполне приемлемы, особенно если срабатывание сигнализации не ожидается частым, что, как правило, имеет место на практике.
Основным потребителем тока является микросхема памяти DD3, тактируемая на частоте микроконтроллера (16 МГц) в момент обращения. Мы не смогли найти менее «прожорливую» флэш-память с SPI-интерфейсом. а использование микросхем памяти с более медленным интерфейсом I2C недопустимо по скорости. Примененная нами память на 1 Мбит позволяет записать фонограмму длительностью около 15с. Можно применить и большую по объему память. Однако, следует учесть, что команды интерфейса SPI памяти различных фирм-производителей могут быть несовместимы. Кроме того, даже в пределах одного изготовителя некоторые команды памяти объема 2 Мбит и выше имеют несколько отличный формат, что потребует небольшой модификации программы микроконтроллера. Однако полагаем, что прилагаемый исходный текст ее достаточно полно прокомментирован, и модификация интерфейса памяти не составит проблем.
Основной блок устройства собран на печатной плате, разработанной с помощью системы Eagle, размерами 57×42 мм (рис.2 и 3) из двустороннего фольгированного стеклотекстолита. Фольга на обратной стороне платы использована в качестве общего провода. Большинство деталей установлено со стороны печатных проводников. Плата помещена в герметичный пластикевый корпус. Выносной датчик воды собран на отдельной плате размерами 10×21 мм (рис.4 и 5). Платы рассчитаны на установку SMD-деталей (для поверхностного монтажа) типоразмера 0402. Исключением являются L1, С2, С11, С12, С19. R11, R12 и R21 типоразмера 0603. Все конденсаторы должны быть керамические на напряжение не менее 6,3 В. При необходимости на посадочные места под корпуса 0402 можно установить детали в больших корпусах типа 0603.
Конденсаторный микрофонный капсюль ВМ1 установлен на обратной стороне платы вместе с держателем батареи и выключателем SA1 (рис.6). Примененный капсюль ЕМ6022Р можно заменить любым другим, подходящим по размеру, с чувствительностью не менее 42 дБ. ОУ DA3 заменим на любой другой с аналогичной разводкой выводов и малым потреблением. Кнопки SB1 и SB2 — модели KSL201GLFS фирмы С-and-К, выключатель SA1 — KAJ01LAGT фирмы E-Switch, разъем XS2 — LPPB041NFSC-RC фирмы Sullins для программирования микроконтроллера.
Программа микроконтроллера разработана в свободной версии среды IAR Embedded Workbench. Для программирования использовался инструмент MSP-FET430UIF, однако можно использовать и более простой программатор MSP-EXP430G2, предлагаемый фирмой Texas Instruments по цене всего 4,30 USD. В любом случае для сопряжения разъемов программаторов с XS2 потребуется изготовить переходник.
Если запись файлов через USB-порт не требуется, можно исключить микросхему DD1 (рис.1) со всеми связанными с ней деталями, кроме R10, который «притягивает» вход Р1.2 микроконтроллера на землю. Аналогично, если не требуется запись с микрофона, можно не устанавливать на плату микросхему DA1 с соответствующей обвязкой и кнопку SB1. При этом вход Р1.3 микроконтроллера следует соединить с общим проводом схемы через «притягивающий» резистор сопротивлением 1…10 кОм. Можно исключить и оба упомянутых блока, подсоединяя их к схеме извне лишь на время записи. Никаких изменений в программе микроконтроллера при такой модификации не потребуется. Микрофонный усилитель должен обеспечивать размах сигнала на выходе 2,5 В в соответствии с опорным напряжением АЦП. Звуковые файлы, предназначенные для записи через USB-порт, должны быть в несжатом формате WAV и содержать 8-битные монофонические РСМ-фонограммы с частотой дискретизации 8 кГц.
Большинство программ звуковых процессоров умеют работать с такими файлами. В крайнем случае, частоту дискретизации фонограммы можно преобразовать, например, с помощью свободно распространяемой программы Audacity. Однако такая перекодировка может привести к некоторому ухудшению качества звучания.
Перед записью файла в устройство его следует обработать с помощью программы convertWAV.exe для Windows. Эта программа проверяет WAV-файл на указанное выше соответствие параметров, выделяет из него фрагмент «data» и записывает его в отдельный файл. Программа написана на языке С, скомпилирована в VisualStudio 2008 и имеет только текстовый интерфейс. Перед использованием ее следует поместить в папку на диске, содержащую звуковые файлы. Затем включают программу текстовой консоли Windows (cmd.exe) и в ее окне (после перехода в нужную папку) вводят команду convertWAV.exe fail.wav fail.dat. Где fail.wav — ИМЯ WAV-файла с фонограммой, а fail.dat — желаемое имя выходного файла.
Полученный таким образом файл можно непосредственно записать в микроконтроллер, например, с помощью стандартной утилиты HyperTerminal для работы с СОМ-портом. Перед ее включением следует подсоединить USB-кабель от устройства к компьютеру (предполагается, что драйвер виртуального СОМ-порта для DD1 предварительно установлен). Затем нужно сконфигурировать используемый СОМ-порт на скорость обмена 38400 Бод 8-битными словами с одним стоповым битом и отказаться от проверки четности и контроля трафика. После этого в закладке «Установки» в разделе ASCII необходимо установить задержку в 1 мс между посылаемыми символами. На этом настройка порта заканчивается.
Пересылка данных начинается после выбора опции передачи текстового файла в меню передачи и навигации на полученный выше файл в открывшемся окне. Упомянутая задержка между символами необходима, чтобы дать микроконтроллеру возможность записать принятый по USB байт в микросхему памяти DD3. Конечно, для записи требуется гораздо меньше времени, но HyperTerminal не поддерживает меньшие задержки. Фактическая скорость записи фонограмм при этом получается невысокой, однако вполне приемлемой для небольших файлов.
Следует упомянуть, что, несмотря на используемый режим передачи текстового файла программой HyperTerminal, пересылаемый файл не является текстовым. Тем не менее, HyperTerminal успешно его пересылает за исключением одной неприятной особенности. Если значение посланного байта равно 13 и непосредственно за ним в файле следуют один или несколько байтов со значением 10, то последние просто не посылаются (?!)… Для устранения этого явления программа convertWAV.exe заменяет значение таких байтов с 10 на 11. Изменение в звучании фонограммы при такой модификации на слух совершенно незаметно. Отказ от перевода файлов из двоичного формата в текстовый для корректной работы HyperTerminal позволяет сократить их объем и время пересылки в 2 раза.
Литература
1. P.Forstner. Low-Cost Speech With MSP430. — Texas Instruments Application Report SLAA405, 2009.
2. K.Tam, V.Chan. A Low-Cost 12-Bit Speech CODEC Design Using the MSP430F13x. — Texas Instruments Application Report SLAA131, 2001.