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

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


🚧 Проект: сигнализатор границы (линии) на датчике отражения TCRT5000 со звуковым сигналом

TCRT5000 — отражательный оптический датчик: он светит инфракрасным светодиодом вниз и измеряет, сколько света отразилось обратно, что позволяет отличать светлую поверхность от тёмной без контакта. В этом проекте зуммер подаёт сигнал каждый раз, когда датчик пересекает границу между светлым и тёмным участком.

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

Внутри TCRT5000 находится пара ИК светодиод + фототранзистор, направленные в одну сторону. Светлая поверхность отражает больше инфракрасного света обратно на фототранзистор, тёмная — заметно меньше (чёрный цвет поглощает инфракрасный свет почти так же хорошо, как видимый). Разница в количестве отражённого света меняет сопротивление фототранзистора, а значит и напряжение на аналоговом выходе модуля.

В отличие от разобранного ранее на сайте ИК-барьера на отдельных приёмнике и передатчике (где свет проходит МЕЖДУ двумя модулями по прямой), TCRT5000 — именно отражательный датчик: излучатель и приёмник находятся в одном корпусе и смотрят в одну сторону вниз/вперёд, реагируя на то, что происходит прямо под/перед датчиком, а не на прямую видимость между двумя точками.

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

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

  1. TCRT5000: аналоговый выход (A0 на самом модуле, если есть компаратор — можно использовать и цифровой D0) → A0 Arduino, VCC → 5V, GND → GND.
  2. Зуммер: сигнал → D8, GND → GND.
  3. Расположите датчик на высоте нескольких миллиметров над поверхностью — слишком большое расстояние заметно снижает количество отражённого света и надёжность срабатывания.

Скетч

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

const int SENSOR_PIN = A0;
const int BUZZER_PIN = 8;
const int THRESHOLD = 500; // подберите по месту: распечатайте значения светлого/тёмного участка в мониторе порта

bool lastOnDark = false;

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

void loop() {
  int raw = analogRead(SENSOR_PIN);
  bool onDark = raw > THRESHOLD; // подберите знак сравнения по своей распайке — у разных плат логика может быть обратной

  Serial.println(raw);

  if (onDark != lastOnDark) { // поймали момент пересечения границы
    tone(BUZZER_PIN, 2000, 150);
  }
  lastOnDark = onDark;

  delay(20);
}

Дополнительных библиотек не требуется — только встроенная `tone()` для пассивного зуммера (для активного зуммера достаточно `digitalWrite`/`delay` вместо `tone`). Перед первым использованием распечатайте в монитор порта значение `raw` над светлым и над тёмным участком, чтобы подобрать правильное значение `THRESHOLD` между ними.

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

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

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

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

← 🌀 защитное отключение привода при превышении…👏 хлопковый выключатель на электретном микро… →

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

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

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

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

Корзина


Поиск



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