Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство

Компоненты и материалы

Arduino Nano 33 IoT 1
Резистор 330 Ом 1
IR-приемник (generic, например VS1838B) 1
IR-передатчик (generic) 1
Перемычки (generic) 1
Макетная плата (generic) 1

Приложения и онлайн-сервисы

О проекте

Примечание: Это руководство может быть устаревшим, перейдите сюда для более актуальной версии.

Введение: Arduino IoT Cloud

Arduino IoT Cloud — платформа, позволяющая любому легко создавать IoT-подключенные объекты. Для управления телевизором через Alexa мы также используем официальный Arduino Alexa Skill.

Если вы новичок в Arduino IoT Cloud, рекомендуем сначала ознакомиться с вводным проектом, который даст обзор и проведет через настройку одной из поддерживаемых плат, IoT Cloud Things и Properties и поможет начать работу.

Часть 1: Как управлять телевизором

Самый простой способ управлять любым телевизором — сделать вид, что мы его собственный ИК-пульт. Для этого нужно прослушать сигналы пульта, захватить данные и имитировать их с Arduino. После сборки схемы загрузим этот скетч. Он преобразует ИК-импульсы от нажатий кнопок пульта в массив беззнаковых целых. Направьте пульт на IR-приемник Arduino и нажмите:

Значения появятся в Serial Monitor как rawData. Запишите их в текстовый файл, присвоив каждому списку имя массива (chan1, chan2 и т.д.). Приведенные ниже значения — только для справки, сгенерированные пультом Samsung TV.

CHANNEL 1 unsigned int chan1[67] = {4450,4500, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,600, 500,600, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,600, 500,1700, 550,1700, 550,1700, 500,1700, 550,1700, 500};
CHANNEL 2 unsigned int chan2[67] = {4500,4500, 550,1700, 500,1700, 550,1700, 550,550, 550,550, 550,600, 500,600, 550,600, 500,1700, 550,1700, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,600, 550,1700, 500,600, 550,550, 550,600, 500,600, 550,550, 550,650, 450,1700, 550,600, 500,1700, 550,1700, 500,1700, 550,1700, 550,1700, 500};
... (остальные массивы каналов 3-9, volUp, volDown, chanUp, chanDown, onoff, mute)

Часть 2: Arduino IoT Cloud

На главной странице Arduino IoT Cloud создадим новый Thing с понятным именем. Назовем его TVRemoteController. Выберем используемую плату. В этом руководстве — Arduino Nano 33 IoT, но подойдет любая совместимая, только учтите, что распиновка и поведение IR-библиотеки могут отличаться. Если плату не видно — возможно, вы пропустили процедуру Getting Started, вернитесь к ней.

Добавим одно Property к нашему Thing — оно будет представлять телевизор. В категории Smart Home выберем «TV» как Property Type, установим «Read & Write», а в «Update» — «When the value changes».

Вид Properties нашего Thing должен выглядеть так:

Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство

Часть 3: Arduino Web Editor

Нажмите кнопку «EDIT SKETCH», которая перенесет в Web Editor, где можно добавить пользовательский код к автоматически сгенерированному скетчу IoT Cloud.

Первое — подключить библиотеку IR Remote от Ken Shirriff.

#include <IRremote.h>

Настроим двумерный массив для каналов и 6 массивов для команд. В Части 1 мы захватили IR-данные — теперь используем их для заполнения массивов.

const unsigned int chan[9][67] = { {chan1}, {chan2}, {chan3}, {chan4}, {chan5}, {chan6}, {chan7}, {chan8}, {chan9} };
const unsigned int volUp[67] = {...};
const unsigned int volDown[67] = {...};
const unsigned int chanUp[67] = {...};
const unsigned int chanDown[67] = {...};
const unsigned int onoff[67] = {...};
const unsigned int mute[67] = {...};

Настроим IR-библиотеку и требуемую частоту (для таких применений всегда 38 кГц).

IRsend irsend;
const int freq = 38;

Понадобится функция для отправки IR-команд и мигания встроенным LED (на этом этапе в основном для отладки). Значение задержки зависит от марки и модели телевизора — меняйте, если команды не работают как надо.

void sendIR(const unsigned int buf[]) {
  digitalWrite(LED_BUILTIN, HIGH);
  irsend.sendRaw(buf, 67, freq);
  delay(300);
  digitalWrite(LED_BUILTIN, LOW);
}

Финальный шаг — завершить сгенерированный callback onTvChange() пользовательским кодом для отправки IR-команд при изменении TV property командами Alexa. Например, если громкость увеличена — виртуально нажать Volume Up, если канал установлен на 7 — отправить последовательность для кнопки 7, и т.д.

void onTvChange() {
  Serial.println("==================");
  Serial.println("Switch:"+String(tv.getSwitch()));
  Serial.println("Volume:"+String(tv.getVolume()));
  Serial.println("Channel:"+String(tv.getChannel()));
  Serial.println("Mute:"+String(tv.getMute()));
  Serial.println("==================");
  if (first){
    prevSwitch = tv.getSwitch();
    prevVolume = tv.getVolume();
    prevChannel = tv.getChannel();
    prevMute = tv.getMute();
    first = false;
    return;
  }
  // Громкость изменилась
  if (tv.getVolume() > prevVolume) {
    tv.setMute(false);
    prevMute = false;
    for (int k = prevVolume + 1; k <= tv.getVolume(); k++) {
      sendIR(volUp);
      Serial.println("Volume requested:"+String(tv.getVolume())+" Set:"+String(k));
    }
    prevVolume = tv.getVolume();
  } else if (tv.getVolume() < prevVolume) {
    tv.setMute(false);
    prevMute = false;
    for (int k = prevVolume - 1; k >= tv.getVolume(); k--) {
      sendIR(volDown);
      Serial.println("Volume changed:"+String(tv.getVolume())+" Set:"+String(k));
    }
    prevVolume = tv.getVolume();
  }
  // Mute изменился
  if (tv.getMute() != prevMute && tv.getMute()) {
    prevMute = tv.getMute();
    sendIR(mute);
    Serial.println("Mute changed:"+String(tv.getMute()));
  } else if (tv.getMute() != prevMute && !tv.getMute()) {
    prevMute = tv.getMute();
    sendIR(mute);
    Serial.println("Mute changed:"+String(tv.getMute()));
  }
  // Канал изменился
  if (tv.getChannel() != prevChannel) {
    int newChannel = tv.getChannel();
    if (newChannel > 0 && newChannel < 10) {
      sendIR(chan[newChannel-1]);
    } else if (newChannel > 9) {
      if (newChannel > prevChannel) {
        for (int ch = prevChannel; ch < newChannel; ch++) {
          sendIR(chanUp);
          Serial.println("Chan requested:"+String(newChannel)+" Set:"+String(ch));
        }
      } else if (newChannel < prevChannel) {
        for (int ch = prevChannel; ch > newChannel; ch--) {
          sendIR(chanDown);
          Serial.println("Chan requested:"+String(newChannel)+" Set:"+String(ch));
        }
      }
    }
    prevChannel = newChannel;
    Serial.println("Channel changed:"+String(tv.getChannel()));
  }
  // Вкл/Выкл изменился
  if (tv.getSwitch() != prevSwitch) {
    prevSwitch = tv.getSwitch();
    if (tv.getSwitch()) {
      sendIR(chan[6]); // пример: канал 7 для включения
    } else {
      sendIR(onoff);
    }
    Serial.println("Switch changed:"+String(tv.getSwitch()));
  }
}

Часть 4: Amazon Alexa

Нужен Amazon Alexa app из Apple App Store или Google Play Store. Установите, войдите в аккаунт или создайте новый.

Пройдем шаги установки Arduino Alexa Skill и настройки для доступа и управления телевизором. Следуйте последовательности изображений ниже.

Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство

Готово! Теперь можно голосом управлять телевизором:

Веселитесь с Alexa и IoT Cloud. Вопросы и результаты — в комментариях ниже.

Спасибо,

Команда Arduino

Схемы

Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство

Производственный процесс

  1. Управление потолочным вентилятором через Alexa: пошаговое руководство
  2. Создание ультразвукового левитатора на Arduino: пошаговое руководство
  3. Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
  4. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  5. IoT-монитор пульса в реальном времени на Arduino и MAX30100
  6. Удаленное IoT-управление самодельной манипулятором
  7. Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
  8. Мониторинг температуры дома из любой точки через Arduino IoT Cloud
  9. Управление Arduino-роботом через Firmata и геймпад Xbox One
  10. DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением