Эксперимент c Arduino №14. ИК пульт дистанционного управления

Введение

Давайте теперь научимся управлять электроникой дистанционно. Самый простой и доступный способ – с помощью инфракрасного пульта дистанционного управления. Такой способ дистанционного управления крайне распространен и привычен каждому.

Благодаря своей дешевизне, простоте, экономичности и универсальности, ИК пульт всегда будет занимать свое место среди устройств дистанционного управления, наряду с Bluetooth, радио, и WiFi.

Принцип действия

ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты.

Под воздействием инфракрасного излучения в фотодиоде начинает течь ток. Сигнал поступает на встроенный усилитель и далее – на полосовой фильтр, настроенный на фиксированную частоту, который защищает приемник от помех.

Чтобы сигнал от пульта ДУ принимался ИК приемником Ардуино, пульт должен быть настроен на соответствующую частоту. Поэтому не каждый пульт ДУ подойдет для нашего ИК приемника.

Схема подключения

Разберем на распиновку ИК приемника. Традиционный ИК-приемник имеет три контакта:

Распиновка ИК приемника для пульта ДУ
  • Питание (VCC, 5V)
  • Земля (GND)
  • Данные (выходное напряжение, VOUT)

Для удобства можно использовать и готовые модули ИК приемника, которые дополнят ИК приемник RC-фильтром.

Давайте же соберем что-нибудь!

Задача

Светодиод, управляемый дистанционно.

Необходимые компоненты

Итак, нам понадобится:

  • 1 пульт ДУ. Подойдет практически любой ИК пульт дистанционного управления.
  • Плата Ардуино, макетная плата, перемычки

В качестве светодиода будем использовать встроенный светодиод ардуино.

Схема сборки

Соберем такую схему:

Скетч

Для работы нашего скетча нам понадобится специальная библиотека — Arduino-IRremote, которую потребуется установить.

Загрузим в ардуино такой скетч:

/**
 * (C) jarduino.ru
 * 
 * Эксперимент № 14. ИК пульт дистанционного управления
 *
 * Эксперименты с ардуино.
 * Управление arduino с помощью ИК пульта ДУ
 */
#include <IRremote.h> // подключаем библиотеку для ИК приемника

// Константы программы
const int irPin = A0; // аналоговый порт для ИК приемника
const int ledPin = 13; // порт для светодиода

// Глобальные переменные
bool ledState = false;

IRrecv irRec(irPin); // Инициализируем объект ИК приемника
decode_results irData; // переменная для получения данных от ИК приемника

void setup()
{
	Serial.begin(9600); // Иницилизация последовательного порта, для вывода отладочной информации

	irRec.enableIRIn(); // запускаем прием инфракрасного сигнала

	pinMode(ledPin, OUTPUT);
}


void loop()
{
	if (irRec.decode(&amp;irData)) // Получение данных с ИК приемник
	{
		// Данные пришли - анализируем, выполняем команды с пульта:
		Serial.println(irData.value); // выводим полученные данные на порт

		if (irData.value == 16738455) // соответветствует цифре 1 на пульте
		{
			ledState = !ledState; // переключить состояние светодиода
			digitalWrite(ledPin, ledState); // обновить состояние светодиода
		}

		irRec.resume(); // принимаем следующий сигнал на ИК приемнике
	}

	delay(100); // небольшая пауза, 0,1 сек.
}

Результат

Если вы используете типовой пульт ДУ для ардуино, то нажимайте на кнопку 1, и встроенный светодиод будет то зажигаться, то гаснуть.

Если вы используете какой-то другой пульт, то программу потребуется настроить на код нажимаемой вами кнопки. Для этого программа выводит все коды, получаемые от пульта.

Объяснение

Для работы с пультом нам потребуется объявить два объекта: типа IRrecv – для приемника и типа decode_results – для разбора полученных приемником данных.

IRrecv irRec(irPin); // Инициализируем объект ИК приемника

decode_results irData; // переменная для получения данных от ИК приемника

При объявлении объекта приемника вы должны указать аналоговый порт, к которому подключен приемник.

Чтобы приемник начал работать на прием, необходимо его включить. Мы это делаем в функции setup():

irRec.enableIRIn(); // запускаем прием инфракрасного сигнала

Метод decode() позволяет получить данные от приемника.

irRec.decode(&amp;irData);

Если decode() возвращает значение > 0, то сигнал поступил, и его можно проанализировать.

Чтобы понять какой именно сигнал получил, мы анализируем свойство value объекта данных:

 if (irData.value == 16738455) // соответветствует цифре 1 на пульте

Чтобы продолжить получение данных, надо вызвать метод resume():

irRec.resume(); // принимаем следующий сигнал на ИК приемнике

Заключение

Теперь вы умеете управлять устройством Ардуино не вставая с дивана 😉. Не нужно разводить кнопки. Или кнопки можно просто продублировать пультом.

Если вы уже знаете как работать с реле и силовым ключом, то вы можете сделать дистанционное включение и выключение чего угодно – освещения, аквариума, входной двери и т.п.

1 ответ на “Эксперимент c Arduino №14. ИК пульт дистанционного управления”

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *