ИК приемник KY-022. Датчики. Ардуино

Arduino IR Receiver
Arduino IR Receiver
Arduino IR Receiver

Привет! Сегодня сделаем обзор на приемник ИК сигнала KY-022 для Ардуино. А также, соберем простую схему и напишем программу, чтобы обработать сигналы от пульта дистанционного управления и научиться управлять Ардуино с помощью таких пультов.

В прошлый раз мы делали обзор на модуль фоторезистора. Пожалуйста, посмотрите его, если уже забыли или пропустили.

Сегодня возьмем новый датчик для Ардуино и попробуем расшифровать невидимые инфракрасные сигналы от пульта дистанционного управления.

Для выполнения этого урока нам понадобятся

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • IR модуль KY-022
  • Пульт ДУ
  • Кабель USB

Что такое инфракрасный свет

Инфракрасное излучение, это такой же свет, какой мы видим вокруг нас. Единственное отличие от простого дневного света, это частота и длина волны. Инфракрасное излучение находится за пределами видимого глазом человека диапазона света. Поэтому мы его не видим. Но, если бы видели, он был бы таким же светом, как луч фонарика или лампы.

Поскольку ИК свет, это вид света. Для работы приемника ИК сигналов требуется прямая видимость между приемником и источником. Он не может работать через стены как wifi или bluetooth.

Спектр электромагнитного излучения
Спектр электромагнитного излучения

ИК приемник KY-022

Модуль KY-022 это приемник ИК сигналов, сигнальный светодиод и сопротивление для него. У модуля три контакта. Питание 5 вольт, земля и контакт вывода данных. С него мы будем получать код сигнала.

Подключим модуль к Ардуино по схеме.

Принципиальная схема подключения ИК приемника KY-022
Принципиальная схема подключения ИК приемника KY-022

Библиотека IRremote.h

Для удобной работы с модулем для Ардуино уже готова библиотека IRremote.h. Скачайте и установите ее с помощью менеджера библиотек. И затем откройте код программы IRreceiveDump из примеров.

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

Загрузим программу в Ардуино, подключим схему и попробуем пульт.

Данные от пульта ДУ считанные на модуле KY-022
Данные от пульта ДУ считанные на модуле KY-022

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

Данные от пульта samsung на модуле KY-022
Данные от пульта samsung на модуле KY-022

Полный текст программы

#include <IRremote.h>

#if defined(ESP32)
int IR_RECEIVE_PIN = 15;
#else
int IR_RECEIVE_PIN = 11;
#endif

IRrecv IrReceiver(IR_RECEIVE_PIN);

// On the Zero and others we switch explicitly to SerialUSB
#if defined(ARDUINO_ARCH_SAMD)
#define Serial SerialUSB
#endif

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);

    Serial.begin(115200);
#if defined(__AVR_ATmega32U4__) || defined(SERIAL_USB) || defined(SERIAL_PORT_USBVIRTUAL)
    delay(2000); // To be able to connect Serial monitor after reset and before first printout
#endif
    // Just to know which program is running on my Arduino
    Serial.println(F("START " __FILE__ " from " __DATE__));
    IrReceiver.enableIRIn();  // Start the receiver
    IrReceiver.blink13(true); // Enable feedback LED

    Serial.print(F("Ready to receive IR signals at pin "));
    Serial.println(IR_RECEIVE_PIN);
}

void dump() {
    // Dumps out the decode_results structure.
    // Call this after IRrecv::decode()
    int count = IrReceiver.results.rawlen;
    IrReceiver.printResultShort(&Serial);

    Serial.print(" (");
    Serial.print(IrReceiver.results.bits, DEC);
    Serial.println(" bits)");
    Serial.print("Raw [");
    Serial.print(count, DEC);
    Serial.print("]: ");

    for (int i = 0; i < count; i++) {
        if (i & 1) {
            Serial.print(IrReceiver.results.rawbuf[i] * MICROS_PER_TICK, DEC);
        } else {
            Serial.write('-');
            Serial.print((unsigned long) IrReceiver.results.rawbuf[i] * MICROS_PER_TICK, DEC);
        }
        Serial.print(" ");
    }
    Serial.println();
}

void loop() {
    if (IrReceiver.decode()) {
        Serial.println();
        dump();
        IrReceiver.resume(); // Receive the next value
    }
}

Заключение

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

Где купить

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

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