Считывание аналоговых датчиков с одним контактом GPIO
В отличие от некоторых других устройств, Raspberry Pi не имеет аналоговых входов. Все 17 контактов GPIO - цифровые. Они могут выводить высокие и низкие уровни или считывать высокие и низкие уровни. Это отлично подходит для датчиков, которые обеспечивают цифровой вход для Pi, но не так хорошо, если вы хотите использовать датчик, который этого не делает.
Для датчиков, которые действуют как переменные резисторы, таких как LDR (светозависимые резисторы) или термисторы (датчики температуры), есть простое решение. Это позволяет вам измерять несколько уровней с помощью одного вывода GPIO. В случае датчика освещенности это позволяет измерять различные уровни освещенности.
Он использует базовую схему зарядки «RC» (статья в Википедии), которая часто используется как введение в электронику. В этой схеме вы последовательно подключаете резистор к конденсатору. Когда на эти компоненты подается напряжение, напряжение на конденсаторе возрастает. Время, за которое напряжение достигает 63% от максимума, равно сопротивлению, умноженному на емкость. При использовании светозависимого резистора это время будет пропорционально уровню освещенности. Это время называется постоянной времени:
t =RC где t - время, R - сопротивление (Ом), C - емкость (фарады)
Таким образом, хитрость заключается в том, чтобы рассчитать, сколько времени требуется точке в цепи, чтобы достичь напряжения, достаточного для регистрации как «High» на выводе GPIO. Это напряжение составляет примерно 2 вольта, что, на мой взгляд, достаточно близко к 63% от 3,3 В. Таким образом, время, необходимое схеме для изменения входа GPIO с низкого на высокий, равно «t».
С резистором 10 кОм и конденсатором 1 мкФ t равно 10 миллисекундам. В темноте наш LDR может иметь сопротивление 1 МОм, что дает время в 1 секунду. Вы можете рассчитать другие значения с помощью онлайн-калькулятора постоянной времени.
Чтобы гарантировать постоянное сопротивление между 3,3 В и выводом GPIO, я вставил резистор 2,2 кОм последовательно с LDR.
Теория
Вот последовательность событий:
- Установите вывод GPIO в качестве выхода и установите его на низкий уровень. Это снимает любой заряд в конденсаторе и гарантирует, что обе стороны конденсатора находятся под напряжением 0 В.
- Установите вывод GPIO в качестве входа. Это запускает ток через резисторы и через конденсатор на землю. Напряжение на конденсаторе начинает расти. Время, необходимое для этого, пропорционально сопротивлению LDR.
- Следите за выводом GPIO и считывайте его значение. Пока ждем, увеличиваем счетчик.
- В какой-то момент напряжение конденсатора вырастет настолько, что вывод GPIO будет считаться высоким (примерно 2 В). Затраченное время пропорционально уровню освещенности, видимому LDR.
- Установите вывод GPIO в качестве выхода и повторите процесс по мере необходимости.
Подробнее:Считывание аналоговых датчиков с помощью одного вывода GPIO
Производственный процесс
- Отображение расхода температуры в доме с помощью дешевых датчиков
- Датчик отслеживания линии с RPi
- Управление эффектом с помощью реальных датчиков
- Считывание аналоговых датчиков с одним контактом GPIO
- Аналоговые датчики без аналоговых входов на Raspberry Pi
- Java ME 8 + Raspberry Pi + Sensors =IoT World (Часть 1)
- Считывание аналоговых датчиков с помощью Raspberry Pi и Zabbix Supervisor
- Простой аналоговый датчик приближения с цифровым интерфейсом (для Raspberry Pi) [последнее обновление:7 февраля 2014 …
- Raspberry Pi GPIO с датчиком движения PIR:Лучшее руководство
- Аналоговые датчики на Raspberry Pi с использованием MCP3008