ИК-приемник и пульт
Назначение ИК-приемника
ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. ИК-датчик воспринимает инфракрасный сигнал только на частоте 38 кГц (иногда 40кГц). Именно такое свойство позволяет датчику игнорировать много посторонних световых шумов от ламп освещения и солнца. Сигналы датчик принимает от пульта с ИК излучателем. Приемники инфракрасного излучения получили сегодня широкое применение в бытовой технике, благодаря доступной цене, простоте и удобству в использовании. Эти устройства позволяют управлять приборами с помощью пульта дистанционного управления и их можно встретить практически в любом виде техники.

Рисунок 1. ИК-приемник
Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде. Датчик имеет три вывода. Если посмотреть на датчик со стороны приёмника ИК сигнала, то:
- слева будет — выход на контроллер;
- по центру — отрицательный контакт питания (земля);
- и справа — положительный контакт питания (2.7 — 5.5В).
Распознавание сигналов с пульта
Собираем схему с ИК-приемником
Рисунок 2. Схема с ИК-приемником
Программа для распознавания сигналов с пульта
#include "IRremote.h" //подключаем библиотеку
IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
decode_results results; //создаем переменную, хранящую результат
void setup() {
Serial.begin(9600); //настраиваем работу с монитором порта
irrecv.enableIRIn(); //запускаем прием ИК сигнала
}
void loop() {
if ( irrecv.decode( &results )) { //если данные пришли
Serial.println( results.value, HEX ); //выводим их в монитор порта
irrecv.resume(); //принимаем следующую команду
}
}
Включение светодиода с пульта
Собираем схему с ИК-приемником и светодиодом
Рисунок 3. Схема с ИК-приемником и светодиодом
Программа для включения светодиода с пульта
#include "IRremote.h" //подключаем библиотеку
IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
decode_results results; //создаем переменную, хранящую результат
int led = 6; //объявляем светодиод
void setup() {
pinMode(led, OUTPUT); //настраиваем пин светодиода как выход
Serial.begin(9600); //настраиваем работу с монитором порта
irrecv.enableIRIn(); //запускаем прием ИК сигнала
}
void loop() {
if ( irrecv.decode( &results )) { //если данные пришли
Serial.println( results.value, HEX ); //выводим их в монитор порта
switch ( results.value ) {
case 0xFF30CF: //если нажимаем клавишу "1", то светодиод включается
digitalWrite(led, HIGH);
break;
case 0xFF6897: //если нажимаем клавишу "0", то светодиод выключается
digitalWrite(led, LOW);
break;
}
irrecv.resume(); //принимаем следующую команду
}
}
Управляем яркостью светодиода с пульта
#include "IRremote.h" //подключаем библиотеку
IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
decode_results results; //создаем переменную, хранящую результат
int led = 6; //объявляем светодиод
int brightness; //создаем переменную, задающую яркость свечения светодиода
void setup() {
pinMode(led, OUTPUT); //настраиваем пин светодиода как выход
Serial.begin(9600); //настраиваем работу с монитором порта
irrecv.enableIRIn(); //запускаем прием ИК сигнала
}
void loop() {
if ( irrecv.decode( &results )) { //если данные пришли
Serial.println( results.value, HEX ); //выводим их в монитор порта
analogWrite(led, brightness);
switch ( results.value ) {
case 0xFFA857: //если нажимаем клавишу "+", то яркость увеличивается на 10
brightness = brightness + 10;
break;
case 0xFFE01F: //если нажимаем клавишу "-", то яркость уменьшается на 10
brightness = brightness - 10;
break;
}
irrecv.resume(); //принимаем следующую команду
}
}
Передача ИК сигналов между двумя Arduino
Собираем схему передатчика с ИК-светодиодом
Рисунок 4. Схема передатчика с ИК-светодиодом
Собираем схему с ИК-приемником и светодиодом
Рисунок 5. Схема с ИК-приемником и светодиодом
Программируем ИК-передатчик
void setup()
{
pinMode(4, OUTPUT);
}
void loop()
{
digitalWrite(4, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(4, LOW);
delay(1000); // Wait for 1000 millisecond(s)
}
Программируем ИК-приемник
#include "IRremote.h" //подключаем библиотеку
IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
decode_results results; //создаем переменную, хранящую результат
int led = 6; //объявляем светодиод
void setup() {
pinMode(led, OUTPUT); //настраиваем пин светодиода как выход
Serial.begin(9600); //настраиваем работу с монитором порта
irrecv.enableIRIn(); //запускаем прием ИК сигнала
}
void loop() {
if ( irrecv.decode( &results )) { //если данные пришли
digitalWrite(led, HIGH);
else {
digitalWrite(led, LOW);
}
irrecv.resume(); //принимаем следующую команду
}
}
Подробнее о switch…case можно прочитать [здесь](http://arduino.ru/Reference/SwitchCase (http://arduino.ru/Reference/SwitchCase) "SwitchCase").
Задание
- Подключите сервомотор к Arduino и запрограммируйте управление поворотом сервомотора с ПДУ.