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

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


⚠️ Проект: сигнализация неисправного датчика в комплекте термисторов KY-001/013/028/015

В другом проекте на сайте четыре датчика комплекта KY-001/013/028/015 просто сравниваются визуально на экране LCD1602. Здесь та же идея сравнения четырёх термисторов используется для практической задачи — автоматически заметить, если один из датчиков вышел из строя или отвалился, по тому, что его показания перестали быть похожими на остальные три.

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

Как и в проекте с LCD, этот проект не пытается перевести показания термисторов в градусы (для этого нужны паспортные коэффициенты, которых производитель бюджетных модулей обычно не даёт) — сравниваются именно относительные числа `analogRead()`. Если все четыре датчика физически находятся в одинаковых условиях (например, рядом друг с другом на столе), их показания должны быть близки друг к другу — обрыв провода, короткое замыкание или физическое повреждение одного термистора обычно резко меняет его показание (например, оно "залипает" на 0 или на максимум 1023), заметно выделяясь на фоне трёх остальных.

Код вычисляет среднее значение по всем четырём датчикам, а затем проверяет, не отклоняется ли какой-то один из них от этого среднего больше, чем на заданный порог — если да, этот конкретный датчик считается подозрительным, и зуммер подаёт сигнал.

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

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

  1. Каждый из четырёх датчиков комплекта: сигнальный аналоговый выход → свой аналоговый пин (A0, A1, A2, A3), VCC → 5V, GND → GND.
  2. Зуммер: сигнал → D8, GND → GND.

Скетч

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

const int SENSOR_PINS[4] = {A0, A1, A2, A3};
const int BUZZER_PIN = 8;
const int DEVIATION_THRESHOLD = 150; // подберите по месту, пока все 4 датчика исправны

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

void loop() {
  int values[4];
  long sum = 0;
  for (int i = 0; i < 4; i++) {
    values[i] = analogRead(SENSOR_PINS[i]);
    sum += values[i];
  }
  int average = sum / 4;

  bool anyOutlier = false;
  for (int i = 0; i < 4; i++) {
    if (abs(values[i] - average) > DEVIATION_THRESHOLD) {
      anyOutlier = true;
      Serial.print("Подозрение на неисправность датчика №");
      Serial.println(i);
    }
  }

  if (anyOutlier) {
    tone(BUZZER_PIN, 2500, 200);
  }

  delay(1000);
}

Дополнительных библиотек не требуется — только `analogRead()` и `tone()`. Перед использованием распечатайте в мониторе порта нормальные показания всех четырёх исправных датчиков, чтобы подобрать реалистичный `DEVIATION_THRESHOLD` — естественный разброс между дешёвыми термисторами разных экземпляров нужно учитывать, а не принимать за неисправность.

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

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

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

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

← 📻 удалённое переключение станций FM-радио на…🚪 отображение состояния дверей на TM1637 чер… →

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

Все 2 товара сразу в корзину: 280 ₽ 252 ₽ (экономия 28 ₽)

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

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

Корзина


Поиск



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