Датчик наклона и вибрации SW-520D: подключение к Arduino

Устройство модуля SW-520D, его характеристики, подключение к Arduino через прерывание и пример GSM-сигнализации.
Назначение и состав модуля
SW-520D фиксирует вибрацию и изменение положения в пространстве. Обычно он продаётся в виде модуля: сам датчик в цилиндрическом корпусе с двумя выводами распаян на плате с обвязкой. На плате находятся компаратор LM393, подстроечный резистор для регулировки чувствительности и два SMD-светодиода. Один показывает наличие питания, второй загорается при срабатывании. Выводов три: два для питания и один сигнальный.

Микросхема LM393 сравнивает на входах два сигнала: опорный и полезный, идущий от датчика. Уровень опорного задаётся подстроечным резистором R3, от него и зависит чувствительность. По результату сравнения на выходе D0 устанавливается высокий или низкий логический уровень. Светодиод LED1 индицирует питание, а LED2 светится, когда на D0 присутствует логический ноль, то есть датчик сработал.

Как работает чувствительный элемент
Датчик представляет собой полый цилиндр, внутри которого свободно перекатываются два металлических шарика. В зависимости от положения корпуса они замыкают или размыкают электроды. Поэтому поведение датчика определяется углом наклона, и без знания его внутреннего устройства оно может показаться нелогичным.
Коммутация механическая, так что ресурс ограничен: для подобных датчиков называют порядка 100000 срабатываний. Контакты способны коммутировать напряжение до 20 В. Корпус датчика герметичен и не боится воды и пыли, но на плату модуля это не распространяется. По заявлению производителей, SW-520D может заменять ртутные датчики наклона. Датчик можно использовать и отдельно, без платы модуля.
Технические характеристики
| Вертикальный угол срабатывания | 45 |
| Горизонтальный угол срабатывания | 10 |
| Максимальный ток электродов | 300 мА |
| Рабочее напряжение | 3,3–5 В |
| Выходной ток компаратора | более 15 мА |
| Тип выхода | цифровой |
| Сопротивление разомкнутых контактов | более 10 МОм |
| Сопротивление замкнутых контактов | менее 30 Ом |
| Размер платы | 32×14 мм |
| Размер модуля с датчиком | 45×14 мм |
Подключение к Arduino
Для подключения нужны три провода: питание, земля и сигнал. В примере сигнальный вывод соединён со входом D2.

Состояние датчика можно просто читать с цифрового входа, но в большой программе контроллер способен пропустить короткое срабатывание. Надёжнее использовать внешние прерывания. На Arduino Nano и подобных платах они доступны на выводах D2 и D3. В простейшем скетче прерывание назначается вызовом attachInterrupt(0, detectFunc, CHANGE), то есть реагирует на любую смену уровня на D2. Обработчик только поднимает флаг, а основной цикл, увидев его, выводит сообщение в терминал на скорости 9600 и сбрасывает флаг.
Пример: GSM-сигнализация
Модуль применяют в квест-комнатах, игрушках, охранных и противоугонных системах, спортивных тренажёрах, бытовых приборах, детекторах детонации. В качестве примера рассматривается сигнализация, в которой датчик закреплён на окне охраняемого помещения.
Основа схемы: плата Arduino Nano и GSM-модуль SIM800L, который питается через DC-DC преобразователь MP2307DN. Логические уровни между контроллером и модемом согласуются резисторами. Выход SW-520D заведён на вход внешнего прерывания D2. С модемом контроллер общается через библиотеку SoftwareSerial на выводах 10 и 9 со скоростью 9600.
После подачи питания Arduino следит за уровнем на D2. При любой его смене в терминал выводится сообщение о тревоге, а модему отправляется AT-команда набора номера вида ATD<номер>;. Номер владельца записан в программе в международном формате. Если модем ответил OK, вызов продолжается 20 секунд, после чего командой ATH соединение разрывается. При неудачном наборе попытка повторяется через 200 мс. Ответа модема на каждую команду программа ждёт до 2 секунд.