Анимированный умный свет с Alexa и Arduino
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
| ||||
| ||||
|
Об этом проекте
Почему именно световая полоса
Меня всегда восхищали адресуемые светодиодные ленты RGB. Бесконечные цветовые эффекты и возможности анимации всегда привлекали мое творчество, поэтому несколько лет назад я решил разработать библиотеку для плат Arduino под названием ALA (Arduino Light Animations). Алекса теперь дает мне возможность управлять освещением и эффектами в комнате с помощью голоса, и это круто!
Обзор проекта
Есть компоненты, необходимые для этого проекта.
- Amazon Алекса: Пользовательский навык Alexa (Light Strip) определяет модель голосового взаимодействия и переводит команды (намерения), которые передаются функции Lambda.
- Amazon Lambda :Сценарий Python, который получает сообщения от Alexa и отправляет обновления в службу Интернета вещей.
- Amazon IoT :Служба Интернета вещей хранит «тень объекта», которая является представлением состояния полосы RGB. Каждый раз, когда тень обновляется, подписанные клиенты MQTT (Raspberry PI) получают уведомление.
- Raspberry PI :На этом небольшом ПК работает клиент MQTT для получения сообщений от службы Amazon IoT. С другой стороны, он будет питать и отправлять команды на плату Arduino через порт USB.
- Ардуино :Этот красивый микроконтроллер будет запускать библиотеку ALA для управления светодиодной лентой, получающей команды от Raspberry PI через последовательный порт USB. Вы можете использовать плату Arduino Uno, Nano или Mega.
- WS8212 Светодиодная лента RGB :Это адресуемые светодиодные ленты, поэтому каждым светодиодом можно управлять индивидуально. Это позволяет создавать красивые и красочные световые анимации.
В проекте нет ничего сложного, но есть много взаимосвязанных частей. Я предлагаю вам следовать предлагаемой структуре, чтобы построить свой проект на прочном фундаменте, прежде чем переходить к следующему шагу. Чтобы упростить задачу, я разделил проект на два подпроекта.
первая часть Проект описан в моем проекте LED-анимации с веб-управлением с Raspberry Pi и Arduino Hackster.io и проведет вас через шаги, необходимые для подключения Raspberry PI, платы Arduino и светодиодной ленты WS8212. В конце этого этапа вы сможете управлять светодиодной анимацией со смартфона или ПК с помощью веб-браузера.
вторая часть описанного здесь проекта добавит голосовое управление к предыдущей реализации с использованием Amazon Alexa. Чтобы правильно настроить всю цепочку, необходимо выполнить несколько шагов, так что наберитесь терпения и внимательно следуйте инструкциям.
Amazon IoT
Доделали аппаратную часть? Пришло время перейти в облако! Мы будем использовать платформу AWS IoT для управления нашей «вещью» из Интернета.
Мы будем использовать «тень устройства», которая является копией состояния объекта вместе с желаемыми изменениями. Raspberry PI подпишется на канал уведомлений, который публикует изменения («дельта») этой тени. Перейдите по этой ссылке, чтобы получить дополнительную информацию о платформе AWS IoT и API.
Создайте объект Интернета вещей
Войдите в Консоль AWS. Если вы еще этого не сделали, вам необходимо создать бесплатную учетную запись.
Убедитесь, что вы вошли в систему Восток США (Северная Вирджиния) или ЕС (Ирландия) зона в правом верхнем углу.
Найдите «IoT» и выберите AWS IoT . услуга. Нажмите Начать . кнопку (если есть), чтобы закрыть вводное руководство.
Сначала нам нужно создать политику безопасности для нашей "вещи". Перейдите в Безопасность> Политики меню и нажмите Создать политику . кнопку и введите следующую информацию:
- Название:LightStripPolicy
- Действие:*
- Ресурс:*
- Эффект - Разрешить:установлен.
- Нажмите "Создать".
Теперь мы можем создать Интернет вещей Вещь .
- Выберите Управление . > Вещи меню и создайте новую вещь AWS IoT, нажав Зарегистрировать вещь кнопка (или Создать в правом верхнем углу), а затем нажмите Создать единый объект .
- Введите "LS01" в поле "Имя". Оставьте значения по умолчанию для других полей и нажмите Далее . .
- Нажмите Создать сертификат . кнопка в Создание сертификата в один клик раздел.
- Загрузите 3 сертификата для своего устройства и корневой центр сертификации. Для корневого центра сертификации вам может потребоваться щелкнуть правой кнопкой мыши и затем сохранить его.
- После загрузки сертификатов нажмите Активировать кнопка.
- Нажмите Прикрепить политику кнопку и выберите LightStripPolicy вы создали ранее, а затем нажмите Зарегистрировать вещь .
Прежде чем двигаться дальше, вам необходимо записать конечную точку AWS IoT. Щелкните Настройки в нижнем левом углу веб-страницы AWS IoT, откройте его и обратите внимание на конечную точку.
Настройте Raspberry PI для прослушивания "Вещи"
Сначала нам нужно установить AWS IoT Device SDK для Python . с помощью следующей команды в командной строке Raspberry PI:
sudo pip3 установить AWSIoTPythonSDK
Теперь загрузите репозиторий LightStrip с GitHub и разархивируйте его.
mkdircd / home / pi / LightStripwget https://github.com/bportaluri/LightStrip/archive/master.zipunzip master.zip
Скопируйте четыре сертификата, которые вы загрузили при создании IoT Thing в папке / home / pi / LightStrip / LightStrip-master / pi папка.
Отредактируйте lightstripcfg.py сценарий. Вы можете использовать любой текстовый редактор. Вот команды для nano редактор.
cd / home / pi / LightStrip / LightStrip-master / pinano lightstripcfg.py
Теперь отредактируйте настройки, чтобы они соответствовали вашей конфигурации.
- AWSIOT:введите указанную ранее конечную точку AWS IoT.
- ROOT_CA:имя файла сертификата корневого CA
- CERTIFICATE:имя файла сертификата.
- PRIVATE_KEY:имя файла закрытого ключа
- DEVICE_NAME:оставьте "LS01" без изменений.
Закройте редактор nano и сохраните файл, нажав Ctrl + X, а затем Y.
Запустите скрипт lightstrip.py следующим образом.
sudo python3 lightstrip.py
Скрипт перечислит подключенные USB-порты. Arduino должен быть подключен к / dev / ttyACM0, поэтому запустите сценарий, передавая порт следующим образом.
sudo python3 lightstrip.py / dev / ttyACM0
Тестовый клиент подключится к сервису Amazon Thing Shadow и подпишется на изменения LS01 теневое устройство. После успешного подключения клиентский сценарий обновит свой статус до тени устройства LS01 и получит подобное сообщение подтверждения.
Чтобы убедиться, что все работает правильно, вернитесь в консоль AWS IoT и выберите Управление> Вещи меню, затем откройте LS01 устройство. Выберите Тень меню, и вы увидите состояние тени устройства.
Нажмите Изменить в разделе «Теневой документ» и вставьте следующий документ JSON в поле «Теневое состояние».
{"желаемый":{"анимация":"101"}}
Вот что вы должны увидеть.
При нажатии на ссылку «Сохранить» клиенту MQTT на Raspberry PI будет отправлено сообщение «дельта», которое включит светодиодную полосу.
Следующий документ JSON изменит цвет на синий.
{"желаемый":{"цвет":"0066CC"}}
На данный момент мы можем управлять нашей светодиодной лентой из сервиса ASW IoT, так что вы должны гордиться собой.
Функция AWS Lambda
AWS Lambda позволяет запускать код в облаке без выделения серверов и управления ими. Это идеальный мост между Alexa Skills Kit, который позволит использовать голосовое управление на последнем этапе этого проекта.
Войдите в Консоль AWS. В списке служб выберите Лямбда . .
Убедитесь, что вы вошли в тот же регион, который использовали на предыдущем шаге: Восток США (Северная Вирджиния) или ЕС (Ирландия) зона в правом верхнем углу.
Нажмите Создать функцию . кнопка. Нажмите Автор с нуля . и настройте следующим образом:
- Name =LightStrip
- Время выполнения =Python 3.6
- Роль =Создать особую роль. Откроется новая вкладка. Просто нажмите кнопку «Разрешить», чтобы создать новую роль с именем lambda_basic_execution.
- Существующая роль:lambda_basic_execution
- Нажмите Создать функцию . кнопка
Обратите внимание на идентификатор Lambda ARN ID в правом верхнем углу.
Щелкните LightStrip . поле, чтобы открыть раздел кода функции.
Тип ввода кода:встроенное редактирование кода
- Время выполнения:Python 3.6
- Обработчик:lambda_function.lambda_handler
lambda_function.py сценарий должен быть уже определен. Вставьте код из LightStrip \ lambda \ lambda_function.py файл в редактор кода.
Создайте еще один файл с именем ala_controller.py и вставьте код из LightStrip \ lambda \ ala_controller.py файл в редактор кода.
Вот так все должно выглядеть.
По завершении нажмите оранжевый значок Сохранить . кнопку в правом верхнем углу.
Алекса Навык
Теперь мы можем создать специальный навык Light Strip для Alexa.
Перейдите в консоль разработчика Amazon и войдите в систему при необходимости. Возможно, вам сначала потребуется зарегистрировать свою учетную запись.
Перейдите в Alexa> Набор навыков Alexa (начало работы) .
Нажмите Добавить новый навык в правом верхнем углу и введите следующие данные в поле Информация о навыках вкладка:
- Тип навыка:индивидуальная модель взаимодействия.
- Язык:английский (США)
- Имя:LightStrip
- Имя вызова:световая полоса
- Нажмите "Сохранить".
Это создает навык. Обратите внимание на идентификатор навыка.
Выберите Модель взаимодействия и затем щелкните Запустить конструктор навыков . кнопка.
Щелкните Редактор кода . кнопку и вставьте содержимое LightStrip / alexaskill / lightstrip_skill.json файл в текстовом поле.
Нажмите Сохранить модель . и Модель сборки кнопки. Построение модели займет несколько минут, так что наберитесь терпения. Нажмите Информация о навыках . кнопку, чтобы вернуться на страницу конфигурации навыков.
Теперь нажмите Конфигурация . меню.
В поле "Тип конечной точки службы" выберите AWS Lambda ARN . а затем вставьте указанную выше лямбда-функцию ARN.
Оставьте все значения по умолчанию и нажмите Сохранить Кнопка ниже.
Подключите навык Alexa к функции лямбда
Вернитесь к своей лямбда-функции. Справа находится список предопределенных триггеров. Выберите Набор навыков Alexa и он будет добавлен к вашей функции.
Настройте следующим образом:
- Application Id =идентификатор навыка, который вы указали выше.
- Нажмите "Добавить".
- Нажмите "Сохранить".
Готово
Теперь проект завершен. Попробуйте выполнить следующие голосовые команды:
- Открытая световая полоса
- Включите
- Установите яркость на 20 процентов.
- Установите яркость на 50 процентов.
- Установить красный цвет.
- Установите бирюзовый цвет.
- Выключить
- Запустите захватывающую анимацию.
- Запустите расслабляющую анимацию.
Навык LightStrip также позволяет более совершенное голосовое взаимодействие
- Я:Алекса, открой световую полосу
- Alexa:Добро пожаловать в LightStrip - светодиодная лента будет светиться синим светом.
- Я:запустить анимацию
- Алекса:Хотите расслабляющую или захватывающую анимацию?
- Я:расслабляющий
- Алекса:ОК - светодиодная лента будет показывать случайную анимацию.
- Я:следующая анимация
- Alexa:ОК - будет отображаться другая случайная анимация.
Чтобы лучше понять модель взаимодействия, вот полная диаграмма VUI навыка.
Улучшения и уточнения
Автоматически запускать AlaWeb при загрузке
Небольшое улучшение проекта - автоматический запуск сценария lightstrip.py при загрузке, поэтому вам не нужно запускать его вручную каждый раз, когда вы включаете Raspberry PI или что-то пойдет не так, и вам придется выполнить сброс. Следуйте этим инструкциям.
Добавление и настройка анимации
Для навыка «Световая полоса» уже определены 20 вариантов анимации. Однако библиотека ALA позволяет легко настраивать собственные анимации, выбирая предустановку анимации, цветовую палитру и скорость. Вы можете добавить свои собственные анимации или настроить существующие в скрипте ala_controller.py. Примерно в строке 80 вы увидите список настроек анимации, которые вы можете изменить или улучшить по своему вкусу.
Код
LightStrip
Весь код, необходимый для этого проекта https://github.com/bportaluri/LightStripСхема
Производственный процесс
- ЖК-панель с Arduino для симулятора полета
- Переключатель / светодиодная панель с Arduino для FS2020
- Arduino с Bluetooth для управления светодиодом!
- Умная обувь (автоматическая шнуровка и выработка электроэнергии)
- Четвероногий Arduino
- Управление серводвигателем с помощью Arduino и MPU6050
- Управление яркостью светодиода с помощью Bolt и Arduino
- u-blox LEA-6H 02 GPS-модуль с Arduino и Python
- Простая и умная роботизированная рука с использованием Arduino
- Распознавание и синтез речи с помощью Arduino