🛒
0 товар.
0 руб.
Логотип

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

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

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

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

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

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

Практическое преимущество — не тратить по одному аналоговому пину на зону (их у UNO/Nano всего 6), а подключить гораздо больше зон через один мультиплексор, используя всего 5 пинов независимо от числа зон.

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

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

  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);
    if (analogRead(SIG_PIN) > ZONE_THRESHOLD) anyZoneAlarmed = true;
  }
  if (anyZoneAlarmed) tone(BUZZER_PIN, 2500, 100);
  delay(200);
}
                

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

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

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

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

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

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

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

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

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

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

Корзина

Поиск


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