Низкокостный ИК-датчик приближенности для Raspberry Pi с использованием только цифровых пинов
Платы Raspberry Pi работают на процессоре Broadcom BCM2835, который предлагает 26 общего назначения входов/выходов (GPIO). Хотя Python-библиотеки вроде RPi.GPIO делают управление этими пинами простым, заметное ограничение по сравнению с Arduino — отсутствие настоящих аналоговых входов. GPIO-пины строго цифровые: пин, настроенный как выход, может выдавать только 0 В (LOW) или 3,3 В (HIGH). Когда настроен как вход, любое напряжение ниже 0,8 В интерпретируется как LOW, а любое выше 1,3 В — как HIGH.
Во многих реальных приложениях — мониторинг температуры, измерение расстояния, 감지 интенсивности света — базовый сигнал по своей природе непрерывен. Полагаться на бинарный выход «вкл/выкл» часто недостаточно. Типичный обходной путь — добавить внешний аналого-цифровой преобразователь (АЦП), такой как MCP3008, TLC549 или MCP23017, которые общаются по SPI или I²C. Эти чипы недороги по отдельности, но в комбинации с коммерческими датчиками общая стоимость может подняться до $20–$30, а сборка становится громоздкой — проблема для робототехнических проектов, требующих множества датчиков.
К счастью, существует простой, но эффективный подход, устраняющий необходимость во внешнем АЦП. Преобразуя аналоговое измерение в временной сигнал, цифровые пины Raspberry Pi могут косвенно дискретизировать непрерывные данные. Время — естественно аналоговая величина, и техника опирается на классический принцип заряда RC (резистор-конденсатор).
DIY ИК-датчик приближенности
Схема использует только недорогие компоненты: горсть ИК-светодиодов, фототранзистор, NPN-транзистор 2N3904, керамический конденсатор 100 нФ и низковольтные резисторы. Точные номера деталей взаимозаменяемы; ключ — поддержание правильных электрических характеристик.
Ключевое примечание о компоненте: Конденсатор 100 нФ может быть низкопрофильным керамическим или класс-1 керамическим/пленочным конденсатором для оптимальной стабильности.
Настройка оборудования
- Питание: Подключите +5 В и GND к внешнему источнику 5 В. Соедините GND с землей Raspberry Pi.
- Назначение GPIO: Выберите один GPIO-пин (например,
PIN_A) как триггерный выход, и другой (например,PIN_B) как измерительный вход.
Принцип измерения
Когда PIN_A переводится в HIGH, ИК-светодиоды освещают целевую поверхность. Отраженный свет активирует фототранзистор, который производит ток, пропорциональный интенсивности отражения. Этот ток заряжает конденсатор через транзистор 2N3904. Время, за которое напряжение на конденсаторе пересекает цифровой порог Raspberry Pi на PIN_B, обратно пропорционально току фототранзистора, а значит, прямо пропорционально расстоянию до отражающего объекта.
Python-поток управления
# 1. Убедиться, что конденсатор полностью разряжен
GPIO.setup(PIN_B, GPIO.OUT)
GPIO.output(PIN_B, 0)
time.sleep(0.01) # 10 мс для превышения 200×RC (≈0,00005 с)
# 2. Переключить PIN_B в режим ввода
GPIO.setup(PIN_B, GPIO.IN)
# 3. Запустить ИК-светодиоды
GPIO.setup(PIN_A, GPIO.OUT)
GPIO.output(PIN_A, 1)
# 4. Измерить длительность LOW на PIN_B
counter = 0
start_time = time.time() * 1000 # миллисекунды
while GPIO.input(PIN_B) == 0 and counter < 1e4:
counter += 1
elapsed = time.time() * 1000 - start_time
# elapsed (в мс) ≈ k × расстояние
С резистором 4,3 кОм и конденсатором 100 нФ RC-постоянная времени составляет 0,43 мс. Транзистор 2N3904 усиливает ток фототранзистора примерно в 150 раз, позволяя светодиодам потреблять около 50 мА каждый во время активации. Полученная временная задержка elapsed линейно масштабируется с расстоянием, предоставляя простое аналого-временное преобразование без какого-либо специализированного АЦП-оборудования.
Этот метод предлагает компактную, низкокостную альтернативу традиционным АЦП-базированным датчикам приближенности, делая его идеальным для встраиваемой робототехники, хоббийных проектов и образовательных демонстраций.
Производственный процесс
- Подключение нескольких DS18B20 1-Wire датчиков к Raspberry Pi для точного мониторинга температуры
- Как подключить однопроводный датчик температуры DS1820 к Raspberry Pi через GPIO
- Интеграция данных сенсоров в Raspberry Pi: практическое руководство
- Подключение ультразвукового датчика HC‑SR04 к Raspberry Pi 3 — полное руководство
- Датчик слежения за линией на Raspberry Pi — простой детектор двери/линии KY‑033
- Измерение аналоговых датчиков на Raspberry Pi с одним GPIO-пином
- Построение DIY инфракрасного датчика движения для Raspberry Pi — пошаговое руководство
- Чтение аналоговых датчиков на Raspberry Pi без встроенного АЦП
- Подключение цифрового термометра DS18B20 1-Wire к Raspberry Pi — пошаговое руководство
- Чтение линейного Холловского датчика с Raspberry Pi: руководство по Java и особенности ADC0832