Измерение аналоговых датчиков на Raspberry Pi с одним GPIO-пином
В отличие от многих микроконтроллеров, Raspberry Pi предлагает только цифровые GPIO-пины. Они могут выдавать высокий (3,3 В) и низкий (0 В) логические уровни, но не могут напрямую считывать аналоговые напряжения. К счастью, простая техника заряда RC-цепи позволяет извлечь диапазон значений от датчиков с переменным сопротивлением, таких как фоторезисторы и термисторы, используя всего один GPIO-пин.
Почему это работает
В классической RC-цепи резистор и конденсатор соединены последовательно. При подаче напряжения напряжение на конденсаторе растет экспоненциально. Время, необходимое для достижения 63 % напряжения питания, задается постоянной времени t = RC, где t — время (секунды), R — сопротивление (Ом), C — емкость (Фарады). Измеряя, за какое время конденсатор заряжается до порога высокого уровня GPIO (≈2 В на 3,3 В Pi), вы получаете значение, пропорциональное сопротивлению датчика — и, следовательно, измеряемой физической величине.
Например, с резистором 10 кОм и конденсатором 1 мкФ постоянная времени составляет 10 мс. Фоторезистор, показывающий 1 МОм в темноте, даст постоянную времени около 1 с, что позволяет легко различать свет и темноту.
Практическая реализация
Для гарантированного определенного сопротивления между шиной 3,3 В и GPIO-пином включите резистор 2,2 кОм последовательно с фоторезистором. Полная последовательность измерений:
- Разряд конденсатора: Настройте GPIO как выход и установите низкий уровень.
- Начало заряда: Переключите GPIO в режим входа. Ток течет через резистивную сетку в конденсатор, вызывая рост напряжения.
- Измерение времени подъема: Инкрементируйте счетчик (или используйте высокоточный таймер), пока GPIO не прочитает высокий уровень (≈2 В). Прошедшее время равно RC-постоянной датчика.
- Повторение: Верните GPIO в выход, установите низкий уровень и повторяйте для непрерывного мониторинга.
Для более детального руководства см. официальную документацию Raspberry Pi GPIO и статью об RC-цепи на Википедии. Онлайн-калькулятор RC-постоянной времени поможет подобрать значения компонентов под диапазон вашего датчика.
Производственный процесс
- Экономичная карта температур помещений с дешевыми датчиками
- Датчик слежения за линией на Raspberry Pi — простой детектор двери/линии KY‑033
- Создание аудио-эффектов, управляемых датчиками, с набором Satellite CCRMA
- Измерение аналоговых датчиков на Raspberry Pi с одним GPIO-пином
- Чтение аналоговых датчиков на Raspberry Pi без встроенного АЦП
- Создание IoT с Java ME 8 на Raspberry Pi: Часть 1 — интеграция GPIO-датчиков
- Чтение аналоговых датчиков с Raspberry Pi и Zabbix: пошаговое руководство
- Низкокостный ИК-датчик приближенности для Raspberry Pi с использованием только цифровых пинов
- Мастерство GPIO Raspberry Pi: подключение PIR-датчика движения на B+/Model 2
- Использование АЦП MCP3008 для чтения аналоговых датчиков с Raspberry Pi