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

Создание анимированной умной LED-ленты с управлением через Alexa на базе Arduino

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

Arduino UNO 1
Raspberry Pi 3 Model B 1
NeoPixel лента (WS2812) 1

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

О проекте

Зачем нужна LED-лента

Я всегда восхищался адресуемыми RGB LED-лентами. Их бесконечные цветовые эффекты и возможности анимации пробудили мое творческое воображение, поэтому несколько лет назад я разработал библиотеку для плат Arduino под названием ALA (Arduino Light Animations). Теперь Alexa дает возможность управлять освещением и эффектами голосом — это просто здорово!

Обзор проекта

Проект состоит из следующих компонентов:

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

Первая часть описана в проекте Web-Controlled LED Animations with Raspberry Pi and Arduino на Hackster.io. Она проведет вас через подключение Raspberry Pi, Arduino и WS2812 LED-ленты. По завершении этого этапа вы сможете управлять анимациями со смартфона или ПК через веб-браузер.

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

Amazon IoT

Аппаратная часть готова? Переходим в облако! Мы будем использовать платформу AWS IoT для управления нашим «устройством» из интернета.

Мы используем «Device Shadow» (тень устройства) — копию состояния вещи вместе с желаемыми изменениями. Raspberry Pi подпишется на канал уведомлений, публикующий изменения («дельта») этой тени. Подробнее об AWS IoT платформе и API можно узнать здесь.

Создание IoT-вещи (Thing)

  1. Войдите в AWS Console. Если у вас еще нет аккаунта, создайте бесплатный.
  2. Убедитесь, что вы находитесь в регионе US East (N. Virginia) или EU (Ireland) (в правом верхнем углу).
  3. Найдите «IoT» и выберите сервис AWS IoT. Нажмите Get Started, чтобы закрыть вводное руководство (если оно есть).
  4. Сначала создайте политику безопасности для нашей «вещи». Перейдите в меню Secure > Policies и нажмите Create a Policy. Заполните:
    • Name: LightStripPolicy
    • Action: *
    • Resource: *
    • Effect — Allow: отмечено
    • Нажмите «Create»
  5. Теперь создайте IoT Thing:
    • Выберите Manage > Things и создайте новую вещь через Register a Thing > Create a single thing.
    • В поле Name введите LS01. Остальное по умолчанию, нажмите Next.
    • Нажмите Create certificate в разделе One-click certificate creation.
    • Скачайте 3 сертификата для устройства и Root CA (для Root CA может потребоваться правый клик → «Сохранить как...»).
    • После скачивания нажмите Activate.
    • Нажмите Attach a Policy, выберите созданную ранее LightStripPolicy и нажмите Register Thing.
  6. Запишите AWS IoT Endpoint. Нажмите Settings в левом нижнем углу страницы AWS IoT и скопируйте Endpoint.

Настройка Raspberry Pi для прослушивания «Thing»

Установите AWS IoT Device SDK для Python на Raspberry Pi:

sudo pip3 install AWSIoTPythonSDK

Скачайте репозиторий LightStrip с GitHub и распакуйте:

mkdir -p /home/pi/LightStrip
cd /home/pi/LightStrip
wget https://github.com/bportaluri/LightStrip/archive/master.zip
unzip master.zip

Скопируйте четыре скачанных сертификата в папку /home/pi/LightStrip/LightStrip-master/pi.

Отредактируйте скрипт lightstripcfg.py (например, через nano):

cd /home/pi/LightStrip/LightStrip-master/pi
nano lightstripcfg.py

Настройте параметры под вашу конфигурацию:

Сохраните файл (Ctrl+X, затем Y).

Запустите скрипт lightstrip.py:

sudo python3 lightstrip.py

Скрипт покажет доступные USB-порты. Arduino обычно подключается к /dev/ttyACM0, поэтому запустите с указанием порта:

sudo python3 lightstrip.py /dev/ttyACM0

Клиент подключится к сервису тени устройства Amazon и подпишется на изменения тени LS01. При успешном подключении скрипт обновит свой статус в тени устройства и получит подтверждение.

Для проверки вернитесь в консоль AWS IoT, выберите Manage > Things, откройте устройство LS01 и перейдите в меню Shadow. Нажмите Edit в разделе Shadow Document и вставьте следующий JSON:

{ "desired": { "animation": "101" } }

При нажатии Save будет отправлено «дельта»-сообщение MQTT-клиенту на Raspberry Pi, которое включит LED-ленту.

Следующий JSON установит синий цвет:

{ "desired": { "color": "0066CC" } }

На этом этапе вы можете управлять LED-лентой через AWS IoT — поздравляю!

AWS Lambda-функция

AWS Lambda позволяет запускать код в облаке без управления серверами. Это идеальный мост между Alexa Skills Kit (который добавит голосовое управление на последнем шаге).

  1. Войдите в AWS Console, выберите сервис Lambda.
  2. Убедитесь, что вы в том же регионе (US East (N. Virginia) или EU (Ireland)).
  3. Нажмите Create Function → Author from scratch:
    • Name = LightStrip
    • Runtime = Python 3.6
    • Role = Create a Custom Role. Откроется новая вкладка — нажмите «Allow» для создания роли lambda_basic_execution.
    • Existing role: lambda_basic_execution
    • Нажмите Create Function
  4. Запишите Lambda ARN ID в правом верхнем углу.
  5. Нажмите на блок LightStrip для открытия редактора кода.
    • Code entry type: Edit code inline
    • Runtime: Python 3.6
    • Handler: lambda_function.lambda_handler
  6. Вставьте код из файла LightStrip\lambda\lambda_function.py в редактор.
  7. Создайте еще один файл ala_controller.py и вставьте код из LightStrip\lambda\ala_controller.py.
  8. Нажмите оранжевую кнопку Save в правом верхнем углу.

Навык Alexa (Alexa Skill)

Теперь создадим пользовательский навык Light Strip для Alexa.

  1. Перейдите в Amazon Developer Console и войдите (при необходимости зарегистрируйтесь).
  2. Перейдите в Alexa > Alexa Skills Kit (Get Started).
  3. Нажмите Add a New Skill (правый верхний угол) и заполните вкладку Skill Information:
    • Skill Type: Custom Interaction Model
    • Language: English (U.S.)
    • Name: LightStrip
    • Invocation Name: light strip
    • Нажмите Save
  4. Запишите Skill ID.
  5. Выберите меню Interaction Model → Launch Skill Builder.
  6. Нажмите Code Editor и вставьте содержимое файла LightStrip/alexaskill/lightstrip_skill.json.
  7. Нажмите Save Model и Build Model. Сборка займет несколько минут. Затем вернитесь через кнопку Skill Information.
  8. Перейдите в меню Configuration.
    • В Service Endpoint Type выберите AWS Lambda ARN и вставьте ARN Lambda-функции, записанный ранее.
    • Остальное по умолчанию, нажмите Save.

Связывание навыка Alexa с Lambda-функцией

  1. Вернитесь к вашей Lambda-функции. Справа в списке предопределенных триггеров выберите Alexa Skills Kit — он добавится к функции.
  2. Настройте:
    • Application Id = Skill ID, записанный выше.
    • Нажмите Add, затем Save.

Готово!

Проект завершен. Попробуйте следующие голосовые команды:

Навык LightStrip поддерживает более сложные диалоги:

Я: Alexa, open Light Strip
Alexa: Welcome to LightStrip — LED-лента засветится синим
Я: Launch an animation
Alexa: Do you want a relaxing or exciting animation?
Я: Relaxing
Alexa: OK — LED-лента покажет случайную анимацию
Я: Next animation
Alexa: OK — будет показана другая случайная анимация

Для лучшего понимания модели взаимодействия ниже приведена полная VUI-диаграмма навыка.

Улучшения и доработки

Автозапуск AlaWeb при загрузке

Небольшое улучшение — настроить автозапуск скрипта lightstrip.py при загрузке Raspberry Pi, чтобы не запускать его вручную после каждого включения или сбоя. Инструкции по настройке автозапуска можно найти в репозитории проекта.

Добавление и настройка анимаций

Навык Light Strip уже содержит 20 вариантов анимаций. Однако библиотека ALA позволяет легко создавать свои анимации, выбирая пресет, цветовую палитру и скорость. Вы можете добавить свои анимации или изменить существующие в скрипте ala_controller.py. Примерно на строке 80 находится список настроек анимаций, который можно модифицировать под свои предпочтения.

Код

Весь необходимый код проекта доступен на GitHub: https://github.com/bportaluri/LightStrip

Схемы

Схема подключения прилагается в разделе Schematics оригинального проекта.

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

  1. Панель управления полётным симулятором 2020 на Arduino Nano: LCD и CDI-дисплеи
  2. Панель переключателей и LED для Microsoft Flight Simulator 2020 на Arduino
  3. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
  4. Умные самозавязывающиеся туфли с встроенной сборкой энергии
  5. Пошаговое руководство: сборка умного четырёхногого робота на Arduino
  6. Точное управление сервоприводом через MPU6050 (Arduino, SG90, MG996R)
  7. Бесшовное управление яркостью светодиодов с помощью Bolt IoT и Arduino UNO
  8. Модуль GPS u-blox LEA-6H 02: Интеграция с Arduino и Python
  9. Умная робо-рука на Arduino: простое DIY-руководство
  10. Освоение распознавания и синтеза речи на Arduino Due