Электронные компоненты, Микроконтроллеры Arduino, Сенсоры и Радиодетали

Наши контакты: г. Москва,
ул. Молодогвардейская, д.54с4
тел: +7 (495) 143-93-53     
  +7 (977) 404-81-30
WApp: +7 (977) 947-63-06
E-mail: sales@yourduino.ru

Удаленное управление Arduino с помощью ИК сенсора

Опубликовано: 21.03.2018

   В качестве приемника мы будем использовать ИК датчик VS1838b (https://www.yourduino.ru/product/infrakrasnyy-datchik-vs1838b). Работает он на частоте 38 кГц, напряжение питания: 2.7-5.5 В, максимальный потребляемый ток 1.5 мА, угол приема сигнала 900. Заявленная дальность — до 20 метров прямой видимости.

   Управлять мы будем трехцветным RGB-диодом с общим катодом. На каждую ногу повесим резистор номиналом 220 Ом, чтобы ограничить ток, протекающий через диоды. Также понадобится макетка и набор соединительных проводов. Пульт управления, я думаю, у вас найдется и не один. Ну и, конечно, сама плата Arduino.

   Собираем всю конструкцию по схеме:

 

   Каждый раз, когда мы нажимаем кнопку на пульте, передатчик будет передавать определённый сигнал. Для каждой кнопки он будет разным. Нам будет необходимо узнать соответствие нажатой кнопки и полученного сигнала. Используем такой скетч:

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

   Загружаем скетч в плату, запускаем монитор порта, нажимаем кнопки на пульте и видим коды, приходящие в монитор порта.

   Замечания по коду:

  • Библиотеку IRremote.h искать в интернете не надо. Необходимо её установить из меню управления библиотеками.
  • Код отслеживает только одиночные нажатия. Если зажать кнопку на пульте, то сперва выведется код кнопки, а после этого сразу же код повтора.

   Так как нам нужно управлять 3 диодами (красным, голубым и зеленым), то для этого мы задействуем 3 кнопки на пульте: «1», «2» и «3». И еще одну большую красную кнопку, чтобы все диоды погасить.

   Для каждой кнопки у меня получились вот такие коды:

   «1» - 16582903

   «2» - 16615543

   «3» - 16599223

   «Выкл» - 16580863

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

#include <IRremote.h> // подключаем библиотеку для работы с IR
IRrecv irrecv(7); // указываем пин, к которому подключен IR приемник
decode_results results; //сигналы, принимаемые от пульта
//задаем коды для управления каждым светодиодом,
//предварительно считанные c помощью Serial Monitor
#define switch_RED_LED 16582903    //Кнопка "1"
#define switch_BLUE_LED 16615543  //Кнопка "2"
#define switch_GREEN_LED 16599223   //Кнопка "3"
#define TURN_OFF 16580863   //Кнопка выключения всех диодов
#define RED_LED 2 //задаем имена для пинов, управляющих светодиодами
#define BLUE_LED 3
#define GREEN_LED 4
 
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // инициализируем инфракрасный приёмник
  pinMode(RED_LED, OUTPUT);  //устанавливаем пины всех
  pinMode(BLUE_LED, OUTPUT); //используемых светодиодов как выходные
  pinMode(GREEN_LED, OUTPUT); //чтобы управлять ими
  digitalWrite(RED_LED, LOW); //гасим все светодиоды
  digitalWrite(BLUE_LED, LOW);
  digitalWrite(GREEN_LED, LOW);
}
 
void loop()
{
  if (irrecv.decode(&results))  // была нажата кнопка на пульте
  {
    Serial.println(results.value);
    switch (results.value) {
      case switch_RED_LED:
        if (digitalRead(RED_LED) == LOW) {
          digitalWrite(RED_LED, HIGH);
        } else {
          digitalWrite(RED_LED, LOW);
        }
        break;
      case switch_BLUE_LED:
        if (digitalRead(BLUE_LED) == LOW) {
          digitalWrite(BLUE_LED, HIGH);
        } else {
          digitalWrite(BLUE_LED, LOW);
        }
        break;
      case switch_GREEN_LED:
        if (digitalRead(GREEN_LED) == LOW) {
          digitalWrite(GREEN_LED, HIGH);
        } else {
          digitalWrite(GREEN_LED, LOW);
        }
        break;
      case TURN_OFF:
        digitalWrite(RED_LED, LOW);
        digitalWrite(BLUE_LED, LOW);
        digitalWrite(GREEN_LED, LOW);
        break;
    }
    irrecv.resume(); // ожидаем следующее нажатие
  }
}

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

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

   На этом все! Спасибо за внимание. Надеюсь, что статья была для вас полезной, а вы смогли почерпнуть для себя много нового и интересного😊 До скорых встреч.

Комментарии (0)
Пока нет комментариев
Вы не представились
Не правильно введен e-mail
Нам интересно Ваше мнение
Все поля обязательны к заполнению
Перед публикацией комментарии проходят модерацию

Главное меню

Каталог

Полезные ссылки

Цена
от
до
0 Корзина: 0 руб.
Заказ в один клик