Программа
Проверим связь с помощью двух простых программ.
Пусть передатчик просто мигает светодиодом: 500 миллисекунд горит, другие 500 — не горит.
const byte ledPin = 2;
void setup(){
pinMode(ledPin, OUTPUT);
}
void loop(){
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
Ардуино на стороне приёмника будет каждые 100 мс считывать сигнал от ИК-детектора и передавать в последовательный порт на компьютер слово «received» если сигнал есть и «-» если его нет.
const byte photoPin = 3;
void setup() {
Serial.begin(9600);
pinMode(photoPin, OUTPUT);
}
void loop() {
byte v = digitalRead(photoPin); // считываем данные с детектора
if(v == LOW){ // проверяем, что детектор выдает LOW
Serial.println("received");
} else {
Serial.println("-");
}
delay(100);
}
Загружаем программы, подаем питание и выставляем приемник и передатчик таким образом, чтобы светодиод и фотодиод смотрели друг на друга своими линзами.

Затем открываем монитор последовательного порта приёмника и проверяем, приходит ли сигнал. В случае успеха, картина будет такая:

Если в мониторе отображаются одни минусы, сигнал детектор ничего не видит. Возможные причины:
- неверно собрана схема детектора: проверяем все соединения, особенно фотодиод и транзистор;
- нарушена соосность светодиода и фотодиода, а следовательно сигнал передатчика уходит в сторону от приёмника;
- не хватает мощности излучателя: можно попробовать пододвинуть детектор поближе к излучателю.
Другая плохая ситуация, когда приемник постоянно выдает «received», хотя должен делать это с периодом 1 сек. Если схемы собраны правильно, то вероятнее всего детектор засвечен паразитным ИК излучением.
В данной ситуации можно попробовать две вещи:
- приделать к фотодиоду бленду, которую можно сделать с помощью кусочка термоусадочной трубки;
- подобрать другой ИК спектр, для которого в данных условиях не будет паразитов-конкурентов, засвечивающих детектор.
На текущем этапе уже можно передавать с помощью ИК линии связи простые сигналы. Например, управлять включением и выключением какого-то устройства или робота. Чтобы обеспечить обмен текстом и числами, используем стандартную библиотеку и класс Serial. Об этом далее.