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

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


🔌 Проект: расширение количества входов через PCF8574 — несколько геркон-датчиков на одной I2C шине

В больших проектах (дисплей, часы реального времени, EEPROM) цифровые пины Arduino быстро заканчиваются — модуль PCF8574 добавляет 8 дополнительных входов/выходов через те же два провода I2C, которые уже заняты другими модулями, а геркон-датчик в этом проекте показывает, как использовать один из этих новых входов для открытия/закрытия двери или окна.

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

PCF8574 — расширитель портов ввода-вывода: он не измеряет ничего сам, а просто предоставляет Arduino 8 дополнительных "виртуальных" пинов (P0-P7), доступных по той же I2C шине SDA/SCL. Адрес модуля на шине задаётся тремя адресными перемычками/выводами A0-A2 (посажены на GND или VCC) — при всех трёх на GND типичный адрес 0x20. Это позволяет поставить на одну шину несколько таких расширителей с разными адресами и получить десятки дополнительных пинов, используя всего 2 провода.

Каждый пин PCF8574 может быть и входом, и выходом одновременно — переключение между режимами происходит просто записью 1 (вход, пин "подвешен" на внутренний резистор) или 0 (выход, пин притянут к земле) в соответствующий бит. В этом проекте все 8 пинов оставлены входами (во все пины записана 1), и геркон-датчик подключён на пин P0 — его размыкание/замыкание читается как 0 или 1 в соответствующем бите байта, который Arduino получает одним I2C-запросом сразу по всем 8 пинам. Остальные 7 пинов (P1-P7) свободны для ещё семи геркон- или других пороговых датчиков по той же схеме.

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

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

  1. PCF8574: SDA → A4, SCL → A5, VCC → 5V, GND → GND. Адресные перемычки A0-A2 оставьте как есть (по умолчанию адрес 0x20 при всех на GND).
  2. Геркон-датчик KY-025: сигнальный выход (D0 или OUT) → пин P0 модуля PCF8574, VCC → 5V, GND → GND.
  3. Для добавления второго датчика подключите его таким же образом на пин P1 модуля, и так далее до P7 — без дополнительных проводов на сам Arduino.

Скетч

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

#include <Wire.h>

const int PCF8574_ADDR = 0x20; // адрес при A0-A2 на GND

byte readPCF8574() {
  Wire.requestFrom(PCF8574_ADDR, 1); // один байт = состояние всех 8 пинов P0-P7
  if (Wire.available()) {
    return Wire.read();
  }
  return 0xFF; // если связи нет — считаем все пины "высокими"
}

void setup() {
  Serial.begin(9600);
  Wire.begin();

  // переводим все 8 пинов в режим входа — просто пишем в модуль байт из всех единиц
  Wire.beginTransmission(PCF8574_ADDR);
  Wire.write(0xFF);
  Wire.endTransmission();
}

void loop() {
  byte state = readPCF8574();

  bool reedP0 = bitRead(state, 0); // геркон на пине P0

  Serial.print("P0 (геркон): ");
  Serial.println(reedP0 ? "разомкнут" : "замкнут");

  // для датчика на P1 было бы: bitRead(state, 1); на P2 — bitRead(state, 2); и так далее.

  delay(300);
}

Дополнительных библиотек не требуется — только стандартный `Wire.h`, протокол PCF8574 предельно простой (один байт на чтение/запись). Если устройство не отвечает — проверьте реальный адрес отдельным скетчем-сканером шины I2C, он зависит от положения перемычек A0-A2.

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

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

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

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

← 🕰️ программируемый таймер включения по времен…🎛️ регулируемый источник аналогового напряжен… →

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

Все 2 товара сразу в корзину: 196 ₽ 176 ₽ (экономия 20 ₽)

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

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

Корзина


Поиск



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