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

Полный контроль над вашим телевизором с помощью Alexa и Arduino IoT Cloud

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

Arduino Nano 33 IoT
× 1
Резистор 330 Ом
× 1
ИК-приемник (общий)
пример. VS1838B
× 1
ИК-передатчик (общий)
× 1
Перемычки (общие)
× 1
Макет (общий)
× 1

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

Веб-редактор Arduino
Arduino IoT Cloud
Arduino Amazon Alexa Официальный навык Arduino

Об этом проекте

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

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

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

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

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

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

  • ПИТАНИЕ / РЕЖИМ ОЖИДАНИЯ
  • КАНАЛЫ С 1 ПО 9
  • УВЕЛИЧИТЬ ГРОМКОСТЬ
  • УМЕНЬШИТЬ ГРОМКОСТЬ
  • MUTE
  • ПОДКЛЮЧИТЬ КАНАЛ
  • КАНАЛ ВНИЗ

Мы увидим значения, поступающие через Serial Monitor , отображается как rawData . Давайте пока запомним их в текстовом файле и присвоим каждому списку собственное имя массива ( chan1 , chan2 и так далее). Следующие значения приведены только для справки и генерируются пультом дистанционного управления телевизора Samsung.

  КАНАЛ 1 без знака 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}; КАНАЛ 2 без знака 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 без знака int chan3 [67] ={4500,4500, 500,1700, 550,1700, 550,1700, 500,600, 550,550 , 550,600, 500,600, 550,550, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,600, 550,550, 550,550, 550,600, 550,550, 550 , 1700, 500 , 600, 550,550, 550,1700, 550,1650, 550,1700, 550,1700, 500,1700, 600}; КАНАЛ 4 без знака int chan4 [67] ={4450,4450, 550,1700, 550,1700, 500 , 1700, 550,600, 500,600, 550,550, 600,550, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,550 , 550,600, 500,1700, 550,1700, 550,1700, 500,600, 550,1700, 500,1700, 550,1700, 550,1700, 500}; КАНАЛ 5 без знака int chan5 [67] ={4500,4500, 500,1700, 550,1700, 550,1700, 550,550, 550,550, 550,550, 600,550, 550,550, 550,1700, 550,1650, 550,1700, 550,550, 550,600 , 500,600, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,1700, 500,600, 550,550, 550,600, 550,550, 550,550, 550,1700, 550,1700, 500,600, 550,1700, 500,1700, 550,1700 , 550,1700, 500}; КАНАЛ 6 беззнаковый int chan6 [67] ={4500,4500, 550,1650, 550,1700, 550,1700, 500,600, 550,550, 550,600, 500,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 600,550 , 500,600, 550,550, 600,550, 550,550, 550,1700, 500,600, 550,1700, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,600, 550,1700, 500,600, 550,1650, 600,1650, 550,1700 , 550,1650, 600}; КАНАЛ 7 без знака int chan7 [67] ={4500,4500, 550,1700, 500,1700, 550,1750, 500,550, 550,600, 500,650, 500,550, 550,550, 550,1750, 500,1700, 500,1700, 550,650, 450,650 , 500,550, 550,600, 500,650, 500,550, 550,600, 500,1700, 550,1750, 500,600, 500,550, 550,600, 500,650, 500,1750, 450,1700, 550,600, 500,650, 500,1700, 500,1700, 550,1750 , 500,1700, 500}; КАНАЛ 8 без знака int chan8 [67] ={4450,4550, 500,1700, 550,1700, 550,1650, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600 , 500,600, 550,550, 550,600, 500,1700, 550,600, 500,1700, 550,1700, 500,600, 550,550, 550,650, 450,600, 550,550, 550,1700, 550,550, 550,600, 500,1700, 550,1700, 550,1700 , 500,1700, 550}; КАНАЛ 9 без знака int chan9 [67] ={4450,4500, 550,1700, 550,1700, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,1700, 500,600, 550,550 , 550,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,600, 550,550, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,550, 550,1700, 550,1700, 500,1700 , 550,1700, 550}; VOLUME UPunsigned int volUp [67] ={4500,4500, 550,1700, 500,1750, 500,1700, 550,600, 500,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,650, 450,600 , 550,600, 500,650, 450,650, 500,1700, 500,1750, 500,1750, 500,550, 550,600, 500,650, 500,550, 550,600, 500,650, 500,600, 500,600, 500,1700, 550,1750, 450,1750, 500,1700 , 550,1700, 500}; VOLUME DOWNunsigned int volDown [67] ={4450,4550, 500,1700, 550,1700, 550,1650, 550,600, 550,550, 550,600, 500,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600 , 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,600, 500,1700, 550,600, 500,600, 500,600, 550,550, 550,600, 500,650, 500,1700, 500,650, 500,1700, 500,1750, 500,1700 , 550,1700, 500}; КАНАЛ UPunsigned int chanUp [67] ={4500,4450, 550,1700, 550,1650, 550,1700, 550,550, 550,600, 550,550, 550,550, 600,550, 550,1650, 550,1700, 550,1650, 600,550, 550,550 , 550,600, 500,600, 550,550, 550,550, 550,1700, 550,550, 600,550, 550,1650, 550,600, 550,550, 550,550, 550,1700, 550,550, 550,1700, 550,1700, 550,550, 550,1650, 600,1650 , 550,1700, 550}; КАНАЛ ВНИЗ [67] ={4500,4450, 600,1650, 550,1700, 550,1650, 550,600, 550,550, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600 , 550,550, 550,550, 550,550, 600,550, 550,550, 550,600, 500,600, 550,1650, 600,550, 550,550, 550,550, 600,1650, 550,1700, 500,1700, 600,1650, 550,550, 600,1650, 550,1700 , 500,1700, 550};  

Часть 2:Arduino IoT Cloud

Из основного Arduino IoT Cloud страницу, мы создадим новую вещь и присвойте ему осмысленное имя. Назовем его TVRemoteController . . Затем мы выберем доску, которую собираемся использовать. Для этого урока мы использовали Arduino Nano 33 IoT, но если у вас есть другая совместимая плата, это тоже будет хорошо, просто имейте в виду, что распиновка и поведение библиотеки IR могут измениться. Если на этом этапе вы не видите свою доску, возможно, вы пропустили Начало работы Процедура, которую мы упомянули выше, если это так, вернитесь к этому процессу.

После этого мы добавим одно свойство на нашу вещь , он будет представлять собой наш телевизор. В разделе Умный дом выберите "TV" в качестве типа свойства, установите для него значение "Read &Write" и в разделе "Update" выберите "When the value changes"

Вот что Свойства взгляд на нашу Вещь в этот момент должен выглядеть так:

Часть 3:Веб-редактор Arduino

Пришло время нажать кнопку «ИЗМЕНИТЬ ЭСКИЗ», после чего мы перейдем в веб-редактор, где мы сможем добавить некоторый собственный код в эскиз, автоматически созданный IoT Cloud.

Первое, что нам нужно добавить, - это библиотека IR Remote от Кена Ширриффа.

  #include   

Затем нам нужно настроить один двумерный массив для наших каналов и 6 массивов для нужных нам команд. Если вы помните, в Части 1 мы захватили некоторые данные IR, которые теперь будем использовать для заполнения наших массивов

  const unsigned int chan [9] [67] ={{chan1}, {chan2}, {chan3}, {chan4}, {chan5}, {chan6}, {chan7}, {chan8}, {chan9}}; const беззнаковый int volUp [67] ={...}; const unsigned int volDown [67] ={...}; const беззнаковый int chanUp [67] ={...}; const unsigned int chanDown [67] ={...}; const unsigned int onoff [67] ={...}; const unsigned int mute [67] ={...};  

Затем давайте настроим ИК-библиотеку и необходимую частоту (для этого типа приложений она всегда будет 38 кГц)

  IRsend irsend; const int freq =38;  

Нам также понадобится функция для отправки ИК-команд и мигания встроенного светодиода (на этом этапе в основном для целей отладки). Используемое значение задержки будет зависеть от марки и модели вашего телевизора, поэтому не стесняйтесь настраивать его, если что-то не работает должным образом (неправильные команды или команды не получены).

  void sendIR (const unsigned int buf []) {digitalWrite (LED_BUILTIN, HIGH); irsend.sendRaw (buf, 67, freq); задержка (300); digitalWrite (LED_BUILTIN, LOW);}  

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

  void onTvChange () {Serial.println ("=================="); Serial.println ("Switch:" + String (tv.getSwitch ())); Serial.println ("Объем:" + String (tv.getVolume ())); Serial.println ("Канал:" + String (tv.getChannel ())); Serial.println ("Без звука:" + String (tv.getMute ())); Serial.println ("=================="); если (первый) {prevSwitch =tv.getSwitch (); prevVolume =tv.getVolume (); prevChannel =tv.getChannel (); prevMute =tv.getMute (); первый =ложь; возвращение; } // Громкость изменилась if (tv.getVolume ()> prevVolume) {tv.setMute (false); prevMute =false; для (int k =prevVolume + 1; k <=tv.getVolume (); k ++) {sendIR (volUp); Serial.println ("Запрошенный объем:" + String (tv.getVolume ()) + "Set:" + String (k)); } prevVolume =tv.getVolume (); } иначе, если (tv.getVolume ()  =tv.getVolume (); k--) {sendIR (volDown); Serial.println ("Объем изменен:" + String (tv.getVolume ()) + "Set:" + String (k)); } prevVolume =tv.getVolume (); } // Отключение звука изменено if (tv.getMute ()! =PrevMute &&tv.getMute ()) {prevMute =tv.getMute (); sendIR (без звука); Serial.println ("Отключение звука изменено:" + String (tv.getMute ())); } иначе, если (tv.getMute ()! =prevMute &&! tv.getMute ()) {prevMute =tv.getMute (); sendIR (без звука); Serial.println ("Отключение звука изменено:" + String (tv.getMute ())); } // Канал изменен if (tv.getChannel ()! =PrevChannel) {int newChannel =tv.getChannel (); если (newChannel> 0 &&newChannel <10) {sendIR (chan [newChannel-1]); } else if (newChannel> 9) {if (newChannel> prevChannel) {for (int ch =prevChannel; ch  newChannel; ch--) {sendIR (chanDown); Serial.println ("Chan запрошен:" + String (newChannel) + "Set:" + String (ch)); }}} prevChannel =newChannel; Serial.println ("Канал изменен:" + String (tv.getChannel ())); } // Вкл. / Выкл. Изменено if (tv.getSwitch ()! =PrevSwitch) {prevSwitch =tv.getSwitch (); если (tv.getSwitch ()) {sendIR (chan [6]); } else {sendIR (вкл.); } Serial.println ("Переключатель изменен:" + String (tv.getSwitch ())); }  

Часть 4. Amazon Alexa

Теперь нам понадобится приложение Amazon Alexa . который можно загрузить из Apple App Store или Google Play Store. После установки войдите в систему с существующей учетной записью или создайте новую.

Давайте рассмотрим шаги, необходимые для установки Arduino Alexa Skill и настройки его для доступа и управления нашим телевизором. Мы проследим последовательность изображений ниже, чтобы увидеть все необходимые шаги.

Мы закончили, пришло время управлять телевизором с помощью голоса, задавая такие вопросы, как

  • «Алекса, прибавь громкости на телевизоре».
  • «Алекса, выключить ТВ» или «Алекса, включить ТВ».
  • «Алекса, следующий канал на ТВ».

Получайте удовольствие от игры с Alexa и IoT Cloud. Если у вас есть вопросы и / или вы строите этот проект, дайте нам знать в комментариях ниже.

Спасибо,

Команда Arduino

Код

Ардуино

Схема


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

  1. Включение Alexa Control для потолочного вентилятора
  2. Ультразвуковой левитационный аппарат с использованием ARDUINO
  3. Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android
  4. Вольтметр своими руками с использованием Arduino и смартфона
  5. Монитор сердечного ритма с использованием Интернета вещей
  6. Использование Интернета вещей для удаленного управления манипулятором
  7. IOT - Smart Jar с использованием ESP8266, Arduino и ультразвукового датчика
  8. Узнавайте температуру своего дома откуда угодно с помощью Arduino Cloud!
  9. Управление Arduino Rover с помощью Firmata и контроллера Xbox One
  10. Управление увлажнителем Arduino