Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

DIY сигнализация для рюкзака на Arduino и компасе LSM303

Компоненты и материалы

Arduino UNO (или Nano/Pro Mini для компактности) × 1
LSM303DLHC — акселерометр + магнетометр (компас) I2C × 1
Пьезо-сирена 3 кГц (громкая, активная) × 1
Крона 9В + переходник на Jack × 1
Джек 6.35 мм (стерео, с переключателем) + вилка — «ключ» арма/дизарма × 1
Перемычки, макетка/щит × 1 набор

Схема подключения

LSM303 (I2C)

Пьезо-сирена

Ключ (6.35 мм джек)

Разрывает цепь питания от кроны к Arduino. Вилка вставлена — цепь замкнута (armed). Вилка вынута — разорвана (disarmed). Можно заменить на рид-реле + магнит, RFID, кнопку с кодом и т.д.

DIY сигнализация для рюкзака на Arduino и компасе LSM303

Библиотеки

Установка: 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°. Версия выше корректно обрабатывает переход через север.

Сборка и тест

  1. Соберите схему, загрузите код.
  2. При включении: 2 коротких бипа → 3 сек тишина → 1 длинный бип = «armed».
  3. Поверните датчик — сирена завывает. Чувствительность меняется константой sens (градусы).
  4. Если при старте 2 длинных бипа — проверьте I2C-проводку.
  5. Избегайте сильных магнитных полей (динамики, телефоны, металл). Держите датчик горизонтально.

Монтаж в рюкзак

DIY сигнализация для рюкзака на Arduino и компасе LSM303
DIY сигнализация для рюкзака на Arduino и компасе LSM303

Дальнейшие идеи

Схемы

DIY сигнализация для рюкзака на Arduino и компасе LSM303

Производственный процесс

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