Представляю вниманию мою мотосигнализацию на базе Arduino UNO в паре c акселерометром MMA7361. Принцип работы таков: Arduino опрашивает акселерометр, считывает данные по осям X, Y, Z и если есть отклонения от значений, которые были при включении сигнализации, больше допустимой величины — включается сирена; т.е. никаких данных вносить не нужно, не важно под каким углом Вы оставили свой мотоцикл, хоть на бок его положили, после включения сигнализации у осей X, Y, Z появляются текущие координаты и если в момент опроса текущие координаты хотя бы по одной оси отличаются от предыдущих на величину больше установленной нами (для этого использовал потенциометр) — срабатывает сигнализация. Другими словами, если Ваш мотоцикл трогают, наклоняют, пытаются перемещать, в общем, создают движение — включается сирена.
Для реализации нам понадобится:
Arduino UNO
Акселерометр MMA7361
Потенциометр
Сирена — я взял 110dB DC 6 ~ 16V
Соединительные провода
Кнопка Вкл/Выкл
Кронштейн для крепления акселерометра — делал сам
Источник питания — я взял Крону, так же можно запитаться от бортовой сети мотоцикла
Корпус, в котором всё это разместить — я взял от убитого блока питания
Подключение комплектующих к Arduino UNO
Акселерометр MMA7361 | Arduino UNO | Потенциометр | Arduino UNO | Сирена | Arduino UNO |
X | Pin A5 | Левый контакт | GND | Минус | GND |
Y | Pin A4 | Центральный контакт | Pin A2 | Плюс | Pin 11 |
Z | Pin A3 | Правый контакт | Pin 7 | ||
SL | 3.3V | ||||
5V | Pin 8 | ||||
GND | GND |
Немного поясню подключение, у вас наверно возникнет вопрос, а почему питание акселерометра 5V я подключаю к Pin 8, а не напрямую к 5V, сделано это для экономии, т.е. питание на акселерометр подаётся только в момент опроса. Чтобы акселерометр всегда выдавал значения его необходимо принудительно вывести из режима сна, подав на выход SL (Sleep) питание 3.3V.
Теперь о потенциометре, для чего же он нужен, а нужен он для удобства выбора чувствительности сигнализации, т.е. вращая его Вы подбираете значение отклонения для координат, при котором будет срабатывать сигнализация. В скетче этот параметр называется changelvl и имеет диапазон от 2 до 20, т.е. если повернуть потенциометр против часовой стрелки до упора будет 2, а по часовой стрелки до упора соответственно 20. Чувствительность подбирается индивидуально, у меня например сигнализация стабильно работает (без ложных срабатываний) при changelvl равном 4. Узнать значение changelvl можно в «мониторе порта» вращая потенциометр.
Несколько пояснений к скетчу, который Вы сможете скачать в конце статьи
defaultn = 2; // число срабатываний-циклов — т.е. если на протяжении двух циклов (два раза подряд) имеется отклонение координат на величину выбранную потенциометром, срабатывает сигнализация — менять не рекомендую.
delay(6000); // задержка после включения — т.е. у Вас есть 6 сек. после включения сигнализации на то, чтобы закрыть сидушку и поставить мотоцикл неподвижно, по истечении 6 сек. начнётся опрос акселерометра.
delay(3000); // время работы сирены при срабатывании — т.е. сирена будет орать 3 сек.
И в заключении небольшое видео
Ссылки для скачивания как и обещал: скетч и библиотека для работы с акселерометром.
P.S. — огромная благодарность moom за помощь в проекте.