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

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


🔀 Проект: многозонная сигнализация через мультиплексор CD74HC4067

В другом проекте на сайте мультиплексор CD74HC4067 просто демонстрирует принцип опроса нескольких аналоговых датчиков на одном пине. Здесь та же идея применяется для практической задачи: Arduino по очереди опрашивает несколько "зон" (например, несколько комнат с одинаковыми пороговыми датчиками) через один мультиплексор и поднимает тревогу, если хотя бы в одной из них показание превысило порог — не называя, что именно это за датчики, принцип работает с любым аналоговым сенсором.

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

Принцип переключения каналов такой же, как и в демонстрационном проекте: 4 цифровых пина (S0-S3) задают 4-битный код номера канала (от 0000 до 1111, то есть каналы 0-15), и мультиплексор подключает выбранный канал к общему сигнальному пину SIG, который Arduino читает обычным `analogRead()`. Разница в этом проекте — не в самом мультиплексоре, а в логике опроса: код проходит по нескольким зонам ПОДРЯД в цикле, за каждую проверяет превышение порога, и включает общий зуммер, если хотя бы одна зона сейчас "в тревоге" — без разделения по каналам в самом сигнале тревоги (хотя при необходимости легко вывести в Serial именно номер сработавшей зоны).

Главное практическое преимущество такого подхода — не тратить по одному аналоговому пину Arduino на каждую зону (которых у UNO/Nano всего 6), а подключить гораздо больше зон через один мультиплексор, используя всего 5 пинов (4 на выбор канала + 1 общий сигнальный) независимо от того, 3 зоны или все 16.

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

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

  1. CD74HC4067: S0 → D2, S1 → D3, S2 → D4, S3 → D5, SIG → A0, EN → GND (постоянно включён), VCC → 5V, GND → GND.
  2. Подключите нужные аналоговые датчики зон в любые свободные каналы C0-C15 мультиплексора (в примере используются каналы 0, 1 и 2 для трёх зон).
  3. Зуммер: сигнал → D8, GND → GND.

Скетч

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

const int S0 = 2, S1 = 3, S2 = 4, S3 = 5;
const int SIG_PIN = A0;
const int BUZZER_PIN = 8;

const int ZONE_CHANNELS[3] = {0, 1, 2}; // номера каналов мультиплексора, используемых как зоны
const int ZONE_THRESHOLD = 600;         // подберите под свои датчики зон

void selectChannel(int channel) {
  digitalWrite(S0, bitRead(channel, 0));
  digitalWrite(S1, bitRead(channel, 1));
  digitalWrite(S2, bitRead(channel, 2));
  digitalWrite(S3, bitRead(channel, 3));
}

void setup() {
  Serial.begin(9600);
  pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  bool anyZoneAlarmed = false;

  for (int i = 0; i < 3; i++) {
    selectChannel(ZONE_CHANNELS[i]);
    delayMicroseconds(50); // короткая пауза на переключение канала перед чтением
    int value = analogRead(SIG_PIN);

    Serial.print("Зона ");
    Serial.print(i);
    Serial.print(": ");
    Serial.println(value);

    if (value > ZONE_THRESHOLD) {
      anyZoneAlarmed = true;
    }
  }

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

  delay(200);
}

Дополнительных библиотек не требуется — только `digitalWrite()`, `analogRead()` и `tone()`. При добавлении новых зон просто добавьте номер канала в массив `ZONE_CHANNELS` и увеличьте размер циклов соответственно.

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

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

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

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

← 🚦 автоматическая остановка конвейера по датч…⏰ напоминание-будильник по расписанию на час… →

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

Все 2 товара сразу в корзину: 146 ₽ 131 ₽ (экономия 15 ₽)

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

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

Корзина


Поиск



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