Давайте посмотрим, как использовать датчик прерывистого луча в скрипте Python на Raspberry Pi! Некоторое время у меня было несколько таких, и на днях я наконец-то распаковал одну.
Датчики с прерывистым лучом обнаруживают объекты, пересекающие линию их «видимости», с помощью инфракрасного излучения. Они состоят из двух частей:
- Излучатель: излучает луч инфракрасного света. У него два провода - один для питания, другой для заземления.
- Приемник: когда направлен на излучатель, принимает инфракрасный луч. Он имеет три провода - один для питания, один для заземления и третий для данных.
И излучатель, и приемник должны быть подключены к источнику питания 5 В (Adafruit говорит, что 3,3 В также будут работать, но ожидаем более короткого диапазона), и вы можете использовать один и тот же источник для обоих, если хотите. Оба также нуждаются в заземлении, но они не обязаны его использовать совместно.
Излучатель и приемник работают вместе, поэтому, когда что-то проходит между ними, прерывая инфракрасный луч, происходит событие, которое ваш код может уловить и использовать. Эти события обнаруживаются с помощью третьего провода на приемнике для подключения к выводу GPIO на Pi, который установлен как вход. С точки зрения настройки и кодирования датчики размыкания луча очень похожи на кнопки или датчики магнитных дверей, о которых я писал раньше.
Эти датчики довольно дешевы, я получил свой от Adafruit (страница продукта здесь) за пару долларов каждый. Они продают их разных размеров - в основном, чем больше размер, тем дальше друг от друга вы можете разместить их и при этом ожидать, что они будут работать. Я мог бы предположить, что более крупные также действительно нуждаются в питании 5 В, а не 3,3 В, но я их не пробовал.
В будущем я собираюсь использовать несколько из этих датчиков в более крупном проекте. В этом посте я просто расскажу, как подключить его к Pi и как написать базовый скрипт Python, который запускает события при изменении состояния датчика.
Проводка
Я использовал макетную плату, чтобы подключить датчик к Pi следующим образом:
- Красные провода на эмиттере и приемнике подключены к выводам питания 5 В на Pi.
- Черные провода на эмиттере и приемнике подключены к контактам заземления на Pi.
- Белый провод на приемнике подключен к GPIO 17 на Pi.
Программное обеспечение
Я написал простой скрипт Python, чтобы регистрировать каждый раз, когда изменяется состояние датчика…
Код разбивается на две части: настройка и обработка событий… сначала настройка:
- В строке 3 я устанавливаю номер контакта GPIO, к которому подключен провод данных приемника. Я использовал 17, любой доступный порт GPIO подойдет.
- В строке 11 GPIO установлен в режим нумерации Broadcom.
- Строка 12 настраивает GPIO 17 как вход с включенным подтягивающим резистором. Если вы хотите узнать больше о настройке контактов GPIO с помощью Python, SparkFun имеет хорошее руководство.
- Строка 13 сообщает модулю GPIO, что мы хотим запускать функцию
break_beam_callback
при изменении состояния GPIO 17. - Строка 15 останавливает выход из программы до тех пор, пока мы не закончим с ней, ожидая, пока пользователь нажмет Enter.
- Если пользователь нажимает ввод, мы очищаем ресурсы GPIO в строке 16 перед выходом.
Функция, обрабатывающая события от датчика, называется break_beam_callback
и определяется в строке 5. Вот как это работает:
- Функция принимает параметр
channel
, который в данном случае не используется, но требуется, чтобы он работал как обратный вызов для функцииadd_event_detect
модуля GPIO. Он содержит номер контакта GPIO, с которого произошло событие. - Строка 6 проверяет, высокий или низкий уровень на выводе 17.
- Если это так, выполняется строка 7 и сообщает, что луч был восстановлен (что-то, что ранее блокировало обзор излучателя приемником, теперь исчезло).
- Если на выводе 17 низкий уровень, выполняется строка 9 и сообщает, что луч был прерван (что-то только что заблокировало вид приемника на излучатель).
Вот и все!
Демо-время!
Вот короткое демонстрационное видео, показывающее, как эта установка используется, чтобы сообщить, когда автомобиль проезжает через датчик ... это то, над чем я хочу больше работать в более крупном проекте, над которым я работаю, но об этом позже!
Вы делаете что-нибудь интересное с Pi и датчиками? Если так, я бы хотел услышать об этом. Оставьте мне сообщение в комментариях ниже или найдите меня в Twitter.