🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


🚨 Проект: охранная сигнализация нескольких дверей через расширитель PCF8574

В другом проекте на сайте расширитель портов PCF8574 просто демонстрирует принцип на одном геркон-датчике. Здесь та же идея применяется для реальной задачи: несколько геркон-датчиков на разных дверях/окнах подключены к одному PCF8574, и зуммер срабатывает, как только любая из них открывается.

Как это работает

Принцип расширения входов такой же, как и в демонстрационном проекте: PCF8574 добавляет 8 дополнительных пинов (P0-P7) через те же два провода I2C, и Arduino получает состояние всех 8 пинов одним запросом в виде одного байта, где каждый бит соответствует одному пину. Разница — в применении: вместо одного датчика на P0 здесь используются несколько пинов одновременно (например, P0-P3 для четырёх разных дверей), и код проверяет каждый бит отдельно, определяя не только факт тревоги, но и то, какая конкретно дверь сейчас открыта.

Важная деталь безопасности: герконы обычно подключаются так, что замкнутое состояние (дверь закрыта) соответствует одному уровню сигнала, а разомкнутое (дверь открыта) — другому. Если какой-то провод случайно оборвётся, сигнал на этом пине перейдёт в состояние "дверь открыта" (так как подтягивающий резистор на входе PCF8574 держит разомкнутую линию в HIGH) — то есть обрыв провода физически воспринимается системой как открытая дверь, а не как "всё спокойно", что само по себе неплохое свойство для охранной системы.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. PCF8574: SDA → A4, SCL → A5, VCC → 5V, GND → GND. Адресные перемычки A0-A2 оставьте как есть (адрес 0x20 при всех на GND).
  2. Геркон-датчик каждой двери: сигнальный выход → свой пин P0, P1, P2, P3 модуля PCF8574 (по одной двери на пин), VCC → 5V, GND → GND.
  3. Зуммер: сигнал → D8, GND → GND.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

#include <Wire.h>

const int PCF8574_ADDR = 0x20;
const int BUZZER_PIN = 8;
const int DOOR_COUNT = 4; // сколько дверей подключено (P0-P3)

byte readPCF8574() {
  Wire.requestFrom(PCF8574_ADDR, 1);
  if (Wire.available()) {
    return Wire.read();
  }
  return 0xFF;
}

void setup() {
  Serial.begin(9600);
  Wire.begin();
  pinMode(BUZZER_PIN, OUTPUT);

  Wire.beginTransmission(PCF8574_ADDR);
  Wire.write(0xFF); // все 8 пинов в режим входа
  Wire.endTransmission();
}

void loop() {
  byte state = readPCF8574();
  bool anyDoorOpen = false;

  for (int door = 0; door < DOOR_COUNT; door++) {
    bool open = bitRead(state, door); // подберите полярность по своей распайке герконов
    if (open) {
      anyDoorOpen = true;
      Serial.print("Дверь ");
      Serial.print(door);
      Serial.println(" открыта!");
    }
  }

  if (anyDoorOpen) {
    tone(BUZZER_PIN, 2500, 100);
  }

  delay(300);
}

Дополнительных библиотек не требуется — только стандартный `Wire.h`. При добавлении новых дверей на пины P4-P7 просто увеличьте `DOOR_COUNT` до 8.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🌿 точный климат-контроль теплицы на HTU21D с…🔔 сигнализация выхода частоты генератора NE5… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 167 ₽ 150 ₽ (экономия 17 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA