
Интернет-магазин «Неглупый Дом»
TCRT5000 — отражательный оптический датчик: он светит инфракрасным светодиодом вниз и измеряет, сколько света отразилось обратно, что позволяет отличать светлую поверхность от тёмной без контакта. В этом проекте зуммер подаёт сигнал каждый раз, когда датчик пересекает границу между светлым и тёмным участком.
Внутри TCRT5000 находится пара ИК светодиод + фототранзистор, направленные в одну сторону. Светлая поверхность отражает больше инфракрасного света обратно на фототранзистор, тёмная — заметно меньше (чёрный цвет поглощает инфракрасный свет почти так же хорошо, как видимый). Разница в количестве отражённого света меняет сопротивление фототранзистора, а значит и напряжение на аналоговом выходе модуля.
В отличие от разобранного ранее на сайте ИК-барьера на отдельных приёмнике и передатчике (где свет проходит МЕЖДУ двумя модулями по прямой), TCRT5000 — именно отражательный датчик: излучатель и приёмник находятся в одном корпусе и смотрят в одну сторону вниз/вперёд, реагируя на то, что происходит прямо под/перед датчиком, а не на прямую видимость между двумя точками.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
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 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.