Умный USB-коммутатор с Alexa: голосовое управление питанием USB-устройств
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino MKR1000 | 1 | Основной микроконтроллер с Wi-Fi |
| Конденсатор 0.1 мкФ 0805 | 8 | Фильтрация питания |
| Светодиод (любой) | 4 | Индикация состояния портов |
| Тактильная кнопка (длинная) | 4 | Локальное управление портами |
| INA219 (SOIC-8) | 1 | Мониторинг тока и напряжения |
| LM3526M | 2 | Ключи высокого стороны с защитой |
| USB-разъем вертикальный | 4 | Выходные порты |
| Резистор 1 кОм 0805 | 4 | Ограничение тока светодиодов |
| Шунтирующий резистор 0.1 Ом | 1 | Измерение тока для INA219 |
| Конденсатор 1 мкФ 0805 | 1 | Стабилизация питания |
Необходимые инструменты
- 3D-принтер (для корпуса)
- Паяльная станция
Программное обеспечение и сервисы
- Amazon Alexa Skills Kit — для голосового управления
- Tinamous — MQTT-брокер и платформа IoT
- AWS Lambda — хостинг навыка Alexa
О проекте
Всё больше устройств питание от USB: ленты, лампы, стики для стриминга, увлажнители. Большинство из них — «глупые», без возможности удалённого управления. Этот проект решает проблему: 4 независимых USB-порта с индивидуальным управлением питанием через интернет и голосовые команды Alexa.
Зачем это нужно
- Управление USB-светом и декором
- Выключение Fire TV / Chromecast в детской по расписанию
- Перезагрузка зависших плат разработки (ESP, Raspberry Pi Pico и т.д.)
- Удалённый ребут датчиков в недоступных местах (чердак, подвал)
- Мониторинг потребления тока разрабатываемых устройств
- Обнаружение пропадания питания (с уведомлением на телефон)
Режимы работы
- Простое включение/выключение — через Alexa или приложение Tinamous.
- Умное выключение — для ламп с сенсорным управлением: кратковременное отключение питания выключает лампу, но восстанавливает её, чтобы следующий раз она включилась прикосновением.
- Таймер — автоматическое отключение по расписанию (например, в 20:00).
- Мониторинг питания — INA219 измеряет ток (до 1 кГц семплирования), напряжение и мощность на каждом порту.
- Детекция сбоев питания — при работе от батареи MKR1000 сообщает о пропадании внешнего питания.
Аппаратная часть
Основа — Arduino MKR1000. Два LM3526M обеспечивают высокостороннее коммутирование с защитой от перегрузки и короткого замыкания. INA219 мониторит суммарный ток и напряжение. Добавлены светодиоды и кнопки для локального управления (опционально).
Печатная плата заказана на DirtyPCBs (доступна также на OSHPark). В репозитории GitHub есть варианты на 2 и 4 порта. Внимание: в 2-портной версии USB-разъемы перепутаны (неверная полярность) — их можно установить на обратной стороне платы, что даже удобнее. 4-портная версия исправляет это и добавляет два порта.


Питание контроллера
Три варианта (перемычка JP6):
- Внутреннее — от 5V пина Arduino (только малые нагрузки).
- Внешнее через USB Micro (J2) — 5В от блока питания.
- Внешнее через клеммник (JP8) — для толстых проводов и больших токов.
Внешнее питание также запитывает Arduino через пин VIN. При установке 0R резисторов на R10, R11 и разъеме J2 получается USB-пропуск (USB passthrough) — удобно для перезагрузки отлаживаемых устройств без износа портов ПК.
Корпус
Модель для 3D-печати включена в проект. Используются вставки M3 под нагрев. Крышка имеет варианты: с/без отсека для батареи, с/без ножек для крепления. Основание настраивается под выбранный вариант питания (OpenSCAD).


Подключение к Tinamous
Используем MQTT через TLS (порт 8883). Tinamous — приватная платформа IoT (можно использовать свой MQTT-брокер).
Шаг 1: Обновление прошивки WiFi101
- Загрузите скетч FirmwareUpdater (Примеры → WiFi101).
- Инструменты → WiFi101 Firmware Updater.
- Обновите прошивку, затем добавьте домен
tinamous.comдля загрузки SSL-сертификатов.
Шаг 2: Настройка secrets.h
#define SECRET_SSID "Ваш_SSID"
#define SECRET_PASS "Пароль_WiFi"
#define MQTT_SERVER "ВашАккаунт.tinamous.com"
#define MQTT_SERVERPORT 8883
#define MQTT_USERNAME "UsbSwitch.ВашАккаунт"
#define MQTT_PASSWORD "Пароль_устройства"
#define MQTT_CLIENT_ID "UsbSwitch"
#define DEVICE_USERNAME "UsbSwitch"
Шаг 3: Регистрация устройства в Tinamous
Devices → Add Device. Укажите имя UsbSwitch. Теги для Alexa: Alexa.SmartDevice, MultiPort, Alexa.PowerController, SmartPlug.
Шаг 4: State Variables для портов
В настройках устройства добавьте поля:
PortCount= 4Port-1..Port-4— имена портов для Alexa- Поля
powerState-port-1..powerState-port-4(тегAlexa.PowerController)
Шаг 5: Загрузка прошивки
Загрузите скетчи из репозитория (файлы: AlexaUsbSwitcher.ino, TinamousMQTTClient.ino, UsbControl.ino, WiFiClient.ino, Secrets.h).
Навык Alexa (Tinamous SmartHome Skill)
Навык универсален: он создаёт устройства в Alexa на основе тегов в Tinamous. Код на C# (.NET Core), деплой через AWS Lambda.
Создание Lambda-функции
- Регион: eu-west-1 (Ирландия) для английского (UK).
- Роль: Simple Microservices (добавьте права на CloudWatch Logs).
- Публикация из Visual Studio (AWS Toolkit).
- Опубликуйте версию (Actions → Publish new version).
- Добавьте триггер Alexa Smart Home с Skill ID.
Создание навыка в Alexa Console
- Тип: Smart Home Skill API, версия payload v3.
- Lambda ARN (версия с суффиксом
:1,:2...). - Account Linking: OAuth-приложение создаётся через Alexa Bot в Tinamous (или используйте опубликованный навык).
- Включите тестирование: «Show this skill in the Alexa App» = Yes.
Отладка навыка
- Избегайте спецсимволов в endpointId (звездочка ломает, решётка — ок).
- Логируйте всё. Нет логов → проблема с авторизацией или триггером.
- AWS и Alexa — одни аккаунты.
- Lambda и Skill в одном регионе.
- Неправильный формат ответа → устройства не появляются.
- Для разработки используйте Amazon Household (второй взрослый аккаунт).
Результат
После обнаружения устройств: "Алекса, включи USB-порт 1", "Алекса, выключи USB-свет". Работает!
Код прошивки (основные файлы)
AlexaUsbSwitcher.ino— главная логика, автоматика, INA219, MQTT-паблишTinamousMQTTClient.ino— MQTT/SSL, обработка команд "@UsbSwitch Turn On Port-1"UsbControl.ino— управление LM3526M, индикация, защитаWiFiClient.ino— подключение к Wi-Fi, пинг, переподключениеSecrets.h— ваши настройки (не коммитить в git!)
Ресурсы
- GitHub: ThingySticks/USBPowerSwitcher (папка
Arduino/StandAlone/, 4-портная версия) - Файлы печатной платы:
.brdи.schдля OSHPark / DirtyPCBs - Модели корпуса для 3D-печати (OpenSCAD/STL)
Производственный процесс
- Освоение оператора switch в C#: синтаксис, примеры и лучшие практики
- TI представляет ультра‑компактные высокоэффективные зарядные BQ25790/BQ25792 buck‑boost
- Эффективный датчик пропадания питания 230 VAC для Raspberry Pi — дешёвый, компактный и безопасный
- Умный выключатель питания AC под управлением SMS с Raspberry Pi и Hologram
- Ветровая энергетика: превращение движения воздуха в чистую электроэнергию
- Освоение молотков-кувалд: полное руководство для современной кузнечной работы
- Автоматические кованые прессы: особенности, преимущества и применение
- Силовые патроны: определение, применение и преимущества
- Силовые патроны: подробное руководство для высокоточной обработки
- Гидроэлектроэнергетика: полное руководство по использованию энергии воды