[Перевод] Голосовое управление Roomba с помощью Alexa и эмулятора Belkin-Wemo

Роботом-пылесосом iRobot Roomba можно управлять голосовыми командами, запуская уборку или отправляя пылесос в док-станцию. Я уже рассказывал о том, как «общаться» с Roomba через сервер ioBroker. Сегодня речь пойдёт о системе голосового управления, для которой не нужен подобный сервер. Тут, для прямого подключения робота к Amazon Echo, будет использоваться эмулятор Belkin-Wemo.

qv1yrzqlens2tw6zmsariepu6qg.jpeg

Если вы не хотите сами заниматься модификацией робота — вот и вот — пара готовых решений.

Компоненты


В этом проекте используются следующие компоненты:

Интерфейс для взаимодействия с роботом


Команды пылесосу можно отправлять, пользуясь его последовательным портом. Он представлен 7-контактным разъёмом Mini-DIN, расположенным под верхней крышкой устройства. Обмен данными по нему организован с использованием протокола iRobot Roomba Open Interface.
e13c6f70fd5ed15fe7517eceae2b83df.png

iRobot Roomba Open Interface

Разборка робота


Разберём Roomba. Снимем контейнер для мусора и щётки, после чего, открутив 4 винта, снимем нижнюю крышку и вытащим батарею.
25f86a5061e10e16df6cbd7f934e14a8.png

Разборка нижней части робота

Уберём бампер, отстегнём верхнюю декоративную часть корпуса и открутим винты, находящиеся под ней. Пару винтов на ручке можно оставить.

b6f0890b551a732e25cb4739b94e6014.png

Разборка верхней части робота

Снимем верхнюю часть корпуса.

13b569129f122b50a2b4a613646e0d1f.jpg

Roomba со снятой верхней частью корпуса

Сборка устройства для управления роботом


Теперь нужно собрать аппаратные компоненты нашего проекта в соответствии со следующей схемой. Наша конструкция подключается к последовательному порту робота.
f450e5ed759cc47baa070e2112de0344.png

Подключение ESP8266 к Roomba

Не забудьте установить выходное напряжение на модуле преобразователя MP1584EN, воспользовавшись подстроечным резистором, на который указывает стрелка. Этот модуль поддерживает входное напряжение в диапазоне от 4,5 до 28 В, а выходное — от 0,8 до 20 В.

d4badd6175080e02670fe3272115aaed.png

Понижающий преобразователь напряжения MP1584EN

Запись программы в WiFi-модуль ESP8266


Теперь пришло время записать программу в WiFi-модуль ESP8266. Вот архив с необходимыми для этого материалами. Обратите внимание на то, что тут закомментирован отладочный вывод данных на последовательный порт, так как он может помешать обмену данными с Roomba.

Откройте Arduino-приложение. Прежде чем записывать программу в модуль, нужно отредактировать код, соответствующий тому, который приведён ниже, и внести в него данные о WiFi-подключении. Тут же, если надо, можно поменять имя робота. Оно появится в приложении Alexa.

/**************************************/
//  https://myhomethings.eu           //
//  Generic ESP8266 module            //
//  Flash size: 1M (no SPIFFS)        //
/**************************************/

#include 
#include 
#include 
#include "Switch.h"
#include "UpnpBroadcastResponder.h"

const char* ssid = "SSID";
const char* password = "Password";
const char* RoombaFriendlyName = "iRobot Roomba";

Switch *switchRoomba = NULL;
UpnpBroadcastResponder upnpBroadcastResponder;

void setup_wifi() 
{
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
  }
}

bool switchRoombaOn()
{
  Serial.write(128);  // Подготовка OI к работе
  delay(50);
  Serial.write(131);  // Переключение в безопасный режим
  delay(50);
  Serial.write(135);  // Запуск стандартной программы уборки
  return true;
}

bool switchRoombaOff()
{
  Serial.write(128);  // Подготовка OI к работе
  delay(50);
  Serial.write(131);  // Переключение в безопасный режим
  delay(50);
  Serial.write(143);  // Отправка робота в док-станцию
  return false;
}

void setup()
{
  Serial.begin(115200);
  setup_wifi();
  
  upnpBroadcastResponder.beginUdpMulticast();
  switchRoomba = new Switch(RoombaFriendlyName, 80, switchRoombaOn, switchRoombaOff);
  upnpBroadcastResponder.addDevice(*switchRoomba);
}

void loop()
{
  upnpBroadcastResponder.serverLoop();
  switchRoomba -> serverLoop();
}

После того, как код отредактирован, а программа записана в модуль, нужно найти в корпусе робота место для размещения новых компонентов. Далее, надо собрать корпус Roomba в порядке, обратном порядку его разборки. При этом стоит обратить внимание на размещение в нём проводов.
8d11360f57db46898c4db96883e4b218.jpg

Собранный робот

Подключение робота к Alexa


Откройте приложение Alexa на телефоне и добавьте в него новое устройство, пылесос iRobot Roomba, или попросите Alexa самостоятельно поискать новые устройства.
4a4fbcd870209c751f2d6ba1b25018b0.png

iRobot Roomba и приложение Alexa

Теперь с помощью Alexa можно управлять роботом, отдавая ему голосовые команды.

Планируете оснастить свой iRobot Roomba голосовым управлением?

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru