DIY сигнализация для рюкзака на Arduino и компасе LSM303
Компоненты и материалы
| Arduino UNO (или Nano/Pro Mini для компактности) | × | 1 |
| LSM303DLHC — акселерометр + магнетометр (компас) I2C | × | 1 |
| Пьезо-сирена 3 кГц (громкая, активная) | × | 1 |
| Крона 9В + переходник на Jack | × | 1 |
| Джек 6.35 мм (стерео, с переключателем) + вилка — «ключ» арма/дизарма | × | 1 |
| Перемычки, макетка/щит | × | 1 набор |
Схема подключения
LSM303 (I2C)
- SDA → A4 (SDA)
- SCL → A5 (SCL)
- VIN → 5V
- GND → GND
Пьезо-сирена
- + → D13
- - → GND
Ключ (6.35 мм джек)
Разрывает цепь питания от кроны к Arduino. Вилка вставлена — цепь замкнута (armed). Вилка вынута — разорвана (disarmed). Можно заменить на рид-реле + магнит, RFID, кнопку с кодом и т.д.

Библиотеки
- Adafruit_LSM303DLHC
- Adafruit_Sensor (зависимость)
Установка: Sketch → Include Library → Add .ZIP Library.
Код прошивки
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LSM303_U.h>
#include <Adafruit_LSM303.h>
const int sens = 10; // порог срабатывания в градусах
Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(12345);
void setup() {
pinMode(13, OUTPUT);
if (!mag.begin()) {
// Ошибка инициализации — мигаем быстро
while (1) {
digitalWrite(13, HIGH); delay(500);
digitalWrite(13, LOW); delay(500);
}
}
delay(5000); // время на установку рюкзака
digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); // сигнал «armed»
}
int getDeg() {
sensors_event_t event;
mag.getEvent(&event);
float heading = atan2(event.magnetic.y, event.magnetic.x) * 180 / PI;
if (heading < 0) heading += 360;
return (int)heading;
}
void loop() {
int oldDeg = getDeg();
delay(1000);
int newDeg = getDeg();
if (oldDeg != 0 && newDeg != 0) {
int diff = newDeg - oldDeg;
if (diff > 180) diff -= 360;
if (diff < -180) diff += 360;
if (abs(diff) >= sens) {
digitalWrite(13, HIGH); // сирена ВКЛ (пока не сбросить питание)
}
}
}
Примечание: в оригинальном коде использовалось простое сравнение newDeg < oldDeg-sens или > oldDeg+sens, что ломается при переходе через 0°/360°. Версия выше корректно обрабатывает переход через север.
Сборка и тест
- Соберите схему, загрузите код.
- При включении: 2 коротких бипа → 3 сек тишина → 1 длинный бип = «armed».
- Поверните датчик — сирена завывает. Чувствительность меняется константой
sens(градусы). - Если при старте 2 длинных бипа — проверьте I2C-проводку.
- Избегайте сильных магнитных полей (динамики, телефоны, металл). Держите датчик горизонтально.
Монтаж в рюкзак


- Прорезьте отверстия для сирены (боковая стенка) и джека-ключа (доступный, но неброский).
- Закрепите плату и датчик на жёстком основании (картон, пластик) — датчик должен быть параллелен полу.
- Крепление: стяжки, горячий клей, велкро.
Дальнейшие идеи
- Добавить GPS + GSM/Lora для уведомлений на телефон.
- Использовать акселерометр LSM303 для детекции ударов/поднятия.
- Миниатюризировать: Arduino Pro Mini + LiPo + зарядка + корпус 3D-печати.
- Применить к двери, холодильнику, банке с печеньем — любой подвижной объект.
Схемы

Производственный процесс
- Проектирование безопасных (fail-safe) систем управления для надежности и безопасности
- Надёжный домашний мониторинг с Home Assistant на Raspberry Pi: движение, алермы и видеозахват
- Создание headless сигнализации утечки воды на Raspberry Pi 2 с Adafruit T‑Cobbler Plus
- Система сигнализации с детектором движения на Java и Reactive Blocks — Развертывание на Raspberry Pi и отправка SMS
- Робот-будильник на колесах: умная мобильная система пробуждения на Raspberry Pi и Google Calendar
- Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
- SERENA: Пользовательская система сигнализации на Arduino Mega 2560 с TFT Touchscreen
- Оценка безопасности сигнализации с Arduino и RF-модулями 433 МГц
- Монитор уровня и температуры воды на Arduino: ультразвук, LCD и тревога
- Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код