Датчик вибрации для Arduino: устройство и пример сигнализации

Как устроены модули вибрации Logo sensors v1.5 и 140С001 и как собрать на них охранную сигнализацию со светодиодной шкалой.
Принцип действия
Датчик вибрации фиксирует внешние механические воздействия и часто служит основой для разного рода сигнализаций. Чувствительный элемент — гибкая металлическая пружинка внутри пластиковой трубки, которая начинает колебаться при любом толчке. Сигнал с неё усиливается операционным усилителем LM386 и подаётся на аналоговый выход.
Два варианта модуля
Распространены два похожих модуля: Logo sensors v1.5 и 140С001.


У обоих есть выводы GND, Vcc и аналоговый выход A0, потенциометр для настройки чувствительности, светодиод наличия питания и монтажное отверстие для крепления к поверхности.
Модуль 140С001 дополнен цифровым выводом D0. Когда вибрация достигает порога, на нём появляется логический ноль; порог задаётся тем же потенциометром. Благодаря выводу D0 и отдельному светодиоду его состояния этот датчик может работать автономно, без контроллера.
Проект: охранная сигнализация
Идея проекта проста: при ударе по поверхности, на которой закреплён датчик, динамик подаёт сигнал тревоги. Для удобства настройки относительный уровень сигнала отображается на светодиодной шкале. Список деталей:
- плата Arduino Uno;
- датчик вибрации 801S или Logo sensors v1.5;
- светодиодная шкала;
- динамик 8 Ом;
- резистор 500 Ом и транзистор КТ503Е;
- макетная плата и соединительные провода.
Шкала — это сборка из 10 независимых светодиодов, катоды которых расположены со стороны надписи на корпусе. Аноды подключаются к цифровым выводам D3–D12, а катоды идут на землю через ограничивающие резисторы 220 Ом.

Логика скетча
Аналоговый выход датчика заведён на вход A0, динамик управляется с вывода 13, частота сигнала — 587. Вход Arduino представляет собой 10-битный АЦП, поэтому считанные значения лежат в диапазоне от 0 до 1023.
В цикле значение читается через analogRead, выводится в последовательный порт и пересчитывается в число горящих светодиодов строкой countled=map(avalue,20,1000,0,9). Затем шкала обновляется, и после паузы 100 мс проверяется условие тревоги: если светодиодов больше восьми, вызывается tone(soundPin,freq,10000), то есть звук длится 10 секунд.
В покое на входе фиксируется значение от 0 (у 140С001) до 9–10 (у Logo sensors v1.5). При вибрации, например от удара по столу с закреплённым датчиком, сигнал возрастает многократно, что сразу видно по шкале. Порог срабатывания подбирают экспериментально.
Типичные проблемы
- Не горит светодиод питания — нужно проверить наличие и полярность питания датчика.
- Аналоговый сигнал не меняется при вибрации — стоит проверить соединение с входом контроллера и подстроить уровень потенциометром.