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

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


🔀 Проект: опрос нескольких аналоговых датчиков через мультиплексор CD74HC4067

У Arduino Uno/Nano всего 6 аналоговых входов — мультиплексор CD74HC4067 позволяет подключить к плате сразу до 16 аналоговых датчиков через один-единственный аналоговый пин, переключая каналы программно. В этом проекте в канал 0 подключён фоторезистор, а остальные 15 каналов остаются свободными для любых других аналоговых модулей.

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

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

У модуля часто есть ещё и пин EN (enable), обычно активный по низкому уровню — его нужно подключить к GND, чтобы мультиплексор был постоянно включён (если его оставить "в воздухе" или подать на него HIGH, каналы могут не переключаться). Поскольку каналы опрашиваются последовательно, а не параллельно, между переключением канала и самим измерением стоит дать сигналу короткую паузу на стабилизацию — для таких медленных датчиков, как фоторезистор, это несущественные доли миллисекунды.

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

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

  1. CD74HC4067: S0 → D2, S1 → D3, S2 → D4, S3 → D5, SIG → A0, EN → GND, VCC → 5V, GND → GND.
  2. Модуль фоторезистора (аналоговый выход AO): подключите его AO к каналу C0 мультиплексора, VCC и GND модуля — к общим 5V/GND (не через мультиплексор, только сигнальная линия идёт через него).
  3. Для добавления второго датчика в будущем просто подключите его аналоговый выход к C1 и читайте, выставив на S0-S3 комбинацию "0001" вместо "0000".

Скетч

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

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

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

// Выставляет на адресных пинах 4-битный номер канала (0-15)
void selectChannel(int channel) {
  digitalWrite(S0, channel & 0x01);
  digitalWrite(S1, (channel >> 1) & 0x01);
  digitalWrite(S2, (channel >> 2) & 0x01);
  digitalWrite(S3, (channel >> 3) & 0x01);
}

void loop() {
  selectChannel(0);       // канал 0 — фоторезистор
  delayMicroseconds(50);  // короткая пауза на стабилизацию сигнала после переключения канала
  int lightValue = analogRead(SIG_PIN);

  Serial.print("Канал 0 (свет): ");
  Serial.println(lightValue);

  // Пример опроса ещё одного свободного канала (если туда что-то подключено):
  // selectChannel(1);
  // delayMicroseconds(50);
  // int secondValue = analogRead(SIG_PIN);

  delay(300);
}

Никаких дополнительных библиотек не требуется — вся логика строится на `digitalWrite()` для выбора канала и обычном `analogRead()`. Если показания "скачут" между каналами — увеличьте паузу `delayMicroseconds()` после `selectChannel()`.

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

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

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

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

← ⚙️ регулятор скорости и направления DC-мотора…🧯 анализатор утечки бытового газа на MQ-6 с … →

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

Все 2 товара сразу в корзину: 144 ₽ 130 ₽ (экономия 14 ₽)

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

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

Корзина


Поиск



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