Перейти к содержимому


Фотография

Урок №8. Инфракрасный пульт управления

Пульт управления

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 admin

admin

    Администратор

  • Администраторы
  • 32 сообщений

Отправлено 22 Ноябрь 2014 - 09:58

Прикрепленный файл  187.jpg   80,08К   4 скачиваний

 

  На фото представлен комплект, состоящий из передатчика и приемника. Передатчик- это обычный пульт дистанционного управления. Внутри у него расположена батарейка, излучающий инфракрасный диод и электронный модуль, который формирует некоторый сигнал, при нажатии на любую из клавиш. Конечно, каждой кнопке соответствует свой сигнал. Приемник –это маленькая платка, на который расположен фотоприемник, индикаторный светодиод, разъем для подключения питания и выхода принятого сигнала. Приемник подключается к Arduino очень просто. Вывод  « VCC» приемника подключается к разъему «5V» платы Arduino, «GND»  подключаем к «GND», вывод «OUT» приемника подключается к одному из разъемов Arduino, который мы в программе определим как вход для приема сигналов от пульта. Конечно же, сигнал излучаемый пультом, совершенно не соответствует надписи на кнопке. Чтобы научится с помощью этого пульта чем либо управлять, нам сначала нужно узнать, какие именно сигналы излучает пульт, а потом уже эти сигналы использовать для управления. Напишем программу, которая будет выводить на экран компьютера сигнал от пульта. Нам остается запомнить  эти сигналы и применить их в другой программе, которую мы создадим для управления чем либо с пульта .

 

  Текст программы для вывода  кодов пульта на экран компьютера:

#include <IRremote.h>
int RECV_PIN = 11; // назначаем 11-ый вывод для подключения фотоприемника
IRrecv irrecv(RECV_PIN);  // назначаем имена переменным
decode_results results;
void setup()
{
  Serial.begin(9600);  // устанавливает скорость обмена данными с компьютером
  irrecv.enableIRIn(); //  старт приема
}
void loop() {  // бесконечно выполняемая функция
  if (irrecv.decode(&results)) 
{ // если сигнал принят
    Serial.println(results.value); // выводим его на экран компьютера
    irrecv.resume();  // ждем прием следующего сигнала
}
}

  Из текста программы видно, что 11 разъем Arduino выбран для подключения к нему сигнального вывода фотоприемника. Загружаем программу в Arduino, открываем монитор порта окно этой кнопкой:

 

Прикрепленный файл  2.JPG   26,59К   4 скачиваний

 

  Теперь направляем пульт на фотоприемник и кратковременно нажимаем любую кнопку на пульте. В окне терминала должны появиться коды команд. Мы можем убедиться, что коды кнопок отличаются друг от друга. Нет двух одинаковых. И это правильно,  иначе две разные кнопки будут выполнять одну и ту же команду. Теперь запомним код двух кнопок, например код кнопки «1» и код кнопки «3». Выглядят он и у нас вот так:

 

Прикрепленный файл  112.jpg   36,84К   4 скачиваний

 

  Здесь мы видим, что, кроме кодов кнопок,  выводятся так ошибки в виде 4294967295. Это связано с несовершенством программы, поэтому на них можно не обращать внимание.
  Нам нужно запомнить два кода – 16724175 и 16743045.
  Напишем программу, которая будет выполнять какое-нибудь  действие при получении кода одной  запомненных кнопок. Для этого возьмем на плате Arduino два порта- 4 и 5, настроим их в качестве «выходов», подключим к ним разноцветные светодиоды через токоограничительные резисторы. Программа будет следить за состоянием входа, к которому подключен фотоприемник. Два запомненных кода клавиш мы впишем в программу. При получении  первого кода Arduino  включит один из светодиодов, при получении второго кода- включит другой светодиод. Как только на выходе фотоприемника появятся сигналы с кодами, Arduino будет сравнивать каждый полученный код с теми кодами, которые хранятся у ней в памяти. Как только эти коды совпадут- светодиоды включаются.

  Вот текст программы:

//   16724175 и 16743045 - коды кнопок 1 и 2
#include <IRremote.h>
int LED_1 = 4; // определяем порт для 1-го светодиода
int LED_2 = 5; // определяем порт для 2-го светодиода
int RECV_PIN = 11; // назначаем 11-ый вывод для подключения фотоприемника
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()  
{
  pinMode(LED_1, OUTPUT); //определяем выводы на светодиоды как "выходы"
  pinMode(LED_2, OUTPUT); //определяем выводы на светодиоды как "выходы"
  Serial.begin(9600);  // устанавливает скорость обмена данными с компьютером
  irrecv.enableIRIn(); // функция начала приема
}
void loop() {
  if (irrecv.decode(&results)) { // если сигнал принят
    Serial.println(results.value);  // выводим его на экран компьютера
    if (results.value ==  16724175) // если принятый код равен одному из запомненных нами
    {
      digitalWrite(LED_1,HIGH);   // то включаем первый светодиод
      delay(2000);  // ждем две секунды
      digitalWrite(LED_1,LOW);  // и гасим его
    }
    if (results.value == 16743045)  // если принятый код равен второму из запомненных нами
    {
      digitalWrite(LED_2,HIGH);  // то включаем второй светодиод
      delay(2000);  // ждем две секунды
      digitalWrite(LED_2,LOW);  // и гасим его
    }
    irrecv.resume(); // ждем прием следующего сигнала
  }
}

Конечно, с помощью пульта можно не только включать, но и выключать светодиоды. Это и будет вашим домашним заданием - одна кнопка включает, другая выключает светодиод.
  У нас есть плата драйвера для управления двумя моторами.  Сделаем маленькое изменение в программе- и вот мы уже с помощью пульта можем управлять электромоторами. Изменения в программе небольшие. Если светодиоды мы включали подачей сигнала  «высокого уровня» на выход Arduino, то моторами через драйвер можно управлять подачей «низкого уровня» на «выход».

  Наверняка у вас дома есть и другие пульты, например , от телевизора. Вы можете прочитать коды этих пультов и использовать их для управления. А можно сделать более интересную конструкцию. Возьмите пульт от телевизора и прочитайте код кнопки включения телевизора. Теперь можно написать программу, которая будет излучать этот код при нажатии кнопки на Arduino. Для этого вам еще понадобится излучающий инфракрасный светодиод. Его можно купить, а можно извлечь из неисправного пульта любой домашней аппаратуры.  Таким образом, можно сделать один пульт для всех домашних приборов.
  Более подробно о работе с инфракрасным пультом управления будет рассмотрено в наших следующих уроках.



#2 Марат

Марат

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 18 Июль 2015 - 19:24

Скажите пожалуйста, почему первая программа (для вывода  кодов пульта на экран компьютера) не работает?

Компилятор выдает:

 

Arduino: 1.6.5 (Windows XP), Плата"Arduino Uno"

C:\Arduino\libraries\RobotIRremote\src\IRremoteTools.cpp:5:16: error: 'TKD2' was not declared in this scope
 int RECV_PIN = TKD2; // the pin the IR receiver is connected to
                ^
Ошибка компиляции.
 



#3 admin

admin

    Администратор

  • Администраторы
  • 32 сообщений

Отправлено 19 Июль 2015 - 14:02

У вас ошибка в строке.

int RECV_PIN = TKD2; // the pin the IR receiver is connected to

Такой ошибки нет в вышеприведенной первой программе. Вы привели ошибку при компиляции какой то другой программы.



#4 sator_nr

sator_nr

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 08 Февраль 2016 - 21:22

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

Upd: проблема решена удалением файлов IRremoteTools.cpp и IRremoteTools.h.






Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных