Аналоговый вход Raspberry Pi
Хотя вы можете очень легко подключить аналоговые устройства ввода-вывода к Arduino, с Raspberry Pi (Raspi) это не так просто. На Raspi нет аналоговых выводов GPIO; все GPIO Raspi являются цифровыми. Проблема может быть решена путем добавления дополнительных аналого-цифровых процессоров (АЦП) поверх Raspi; еще лучше добавить маленький Arduino (скажем, Arduino nano) поверх Raspi. Однако простые устройства аналогового ввода резистивного типа можно очень легко подключить к Raspi, добавив небольшую схему резистор-конденсатор и затем измерив время зарядки конденсатора. Вот программа для измерения интенсивности света, а затем распечатка его на мониторе с использованием LDR (фоторезистора) и конденсатора.
Интерфейс датчика
Допустим, наше аналоговое устройство представляет собой фоторезистор (LDR), который изменяет свое сопротивление в зависимости от интенсивности света. Конденсатор мы будем использовать маленькой емкости, чтобы время зарядки было точным. Любой электролитический конденсатор емкостью 1 мкФ будет работать для нашей цели. С большим конденсатором время зарядки увеличивается, так же как и число измеренных значений. Кроме того, очень большой конденсатор (100 мкФ или более) может не заряжаться полностью. Принципиальная электрическая схема аналогового датчика на Raspi показана на рис.1.
Детали выводов разъема на плате Raspi B показаны на рис. 2. Конденсатор работает как резервуар для воды, а LDR действует как тонкий трубопровод, чтобы заполнить его.
Программа analog.py (см. рис) написана на скрипте Python, который позволяет входному выводу Raspi принимать сигнал от датчика типа LDR и выводить значения интенсивности выходного сигнала на экран монитора.
Экран вывода программы показан на рис. 3. Переменная чтения в коде - не что иное, как счетчик. Значение счетчика является измерением входного сигнала LDR, косвенно пропорционального интенсивности света. После того как конденсатор полностью зарядится, подключенный контакт GPIO (GPIO 17) распознает «1» и счетчик останавливается.
В коде сначала мы устанавливаем вывод GPIO как Out, а затем устанавливаем его как Low. Затем мы устанавливаем вывод GPIO как In. LDR медленно заряжает конденсатор до «1», и в тот момент, когда вывод GPIO становится «1», процесс переворачивается - показание становится «0», а на GPIO снова низкий уровень. Мы сохранили время бездействия в 0,5 секунды, в течение которого один цикл заканчивается с явным запасом. Как только это состояние будет достигнуто, мы сбрасываем вывод GPIO на низкий уровень, и цикл продолжается. В основном, в течение 400 мс (миллисекунд) конденсатор полностью заряжается, и каждые 0,5 секунды мы сбрасываем вывод GPIO, так что цикл подсчета полностью очищен от цикла сброса. Направьте свет электрического фонарика на LDR, и значение изменится в зависимости от интенсивности света. Абсолютного значения измерения как такового не существует. Число варьируется равномерно в зависимости от интенсивности от 75000 (темный) до 50 (прямой свет светодиодного фонарика), и вы должны брать результаты из этого диапазона. Примечание. Процесс не очень эффективен. Если компьютер Raspi занят или многозадачен, результаты могут отличаться.
Материал взят из журнала Electronics For You за March 2015 |