В этом руководстве показано, как создать оптический барьер. Барьер обнаруживает любое движение между передатчиком и приёмником. Передатчиком служит лазерный модуль (Keyes KY-008), который излучает красный свет (длина волны: 650 нм). Лазерный детектор/приёмник — это немаркированный модуль, который возвращает либо LOW, либо HIGH (без «аналоговых значений» между ними).
Как подключить лазерный модуль и лазерный детектор к Arduino?
Лазерный модуль имеет три вывода. Используются только два: вывод «-» подключается к одному из контактов GND Arduino. Вывод «S» лазерного модуля подключается к контакту «2» Arduino. Таким образом, лазер можно включать и выключать, подавая соответственно LOW или HIGH.

Модуль-детектор также имеет три вывода. Его вывод «VCC» подключается к контакту «5V» Arduino, а GND — к GND Arduino. Наконец, сигнальный вывод «OUT» модуля подключается к контакту «3».
Как запрограммировать световой/оптический барьер?
Сначала задаются номера контактов для лазера и приёмника. Затем вывод лазера устанавливается в режим OUTPUT, а вывод приёмника — в режим INPUT. Далее лазер включается установкой «pinLaser» в HIGH. Чтобы отслеживать состояние светового барьера, запускается последовательное соединение.
В функции loop считывается значение, полученное от приёмника. Оно может быть либо LOW, либо HIGH. Значение LOW означает, что лазер не достигает детектора — например, что-то прошло через световой барьер и находится между лазером и детектором. Затем считанное значение выводится в консоль. В конце добавляется задержка в 1000 мс для удобства (чтобы монитор порта не «мигал» значениями).
const int pinLaser = 2; // выходной сигнал лазерного модуля/лазерной указки
const int pinReceiver = 3; // входной сигнал приёмника/детектора (модуль возвращает только цифровое состояние)
void setup() {
pinMode(pinLaser, OUTPUT); // установить вывод лазера как выход
pinMode(pinReceiver, INPUT); // установить вывод приёмника как вход
digitalWrite(pinLaser, HIGH); // включить лазер
Serial.begin(9600); // настроить последовательное соединение для вывода в консоль
}
void loop() {
int value = digitalRead(pinReceiver); // приёмник возвращает либо LOW, либо HIGH (аналоговых значений нет!)
Serial.println(value); // вывести значение в консоль
delay(1000); // подождать 1000 мс
}
Если код был успешно загружен на Arduino, вывод в Serial Monitor (Инструменты → Монитор порта, Ctrl+Shift+M) должен выглядеть следующим образом:

Примечания:
Светодиод на модуле детектора, расположенный рядом с приёмником, показывает, подключён ли детектор к источнику питания.