Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba

Без лишних прелюдий сразу к делу. Квартира автоматизирована технологией Z-Wave, а пылесос iRobot Roomba 770 с сетью никак не связан и убирается по своему расписанию. Пришло время добавить пылесос в сеть Z-Wave! В этом мне поможет Z-Wave плата для разработчиков — Z-Uno.
Какие преимущества дает автоматизация пылесоса с помощью Z-Wave?

  • Возможность удобно настроить расписание из Веб-интерфейса
  • Получить данные с пылесоса о батареи и сенсорах
  • Управлять из мобильного приложения
  • Использовать в сценариях имитирующих присутствие человека в доме


Документация по управлению iRobot Roomba открыта. Из нее следует, что общение с пылесосом происходит через разъем Mini-DIN по UART со скоростью 115200, уровень TTL 5В.
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba

Вся документация по Z-UNO доступна на http://z-uno.z-wave.me/, в нее входят описание всех доступных функций, примеры, схема.
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba

Z-Uno использует UART с уровнем TTL 3.3В, поэтому на линию Rx Z-UNO нужно поставить делитель напряжения из резисторов номиналом 1кОм и 2.2кОм.
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba

При подключении Roomba к Arduino существует проблема, что Roomba выдает очень маленький ток на Tx, поэтому данные могут теряться, если подобная проблема будет на Z-UNO, то совместно с делителем напряжения нужно использовать транзистор:
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba
http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Arduino_Tutorial.pdf

Z-Uno может питаться от 3.3В, от 5В через штатный регулятор напряжения и от 7 — 20В через второй штатный регулятор напряжения. Во время уборки напряжение питания iRobot Roomba составляет примерно 14В, когда пылесос находится на базе напряжение поднимается до 20В. Если подключить Z-Uno к питанию iRobot Roomba напрямую, то линейный регулятор напряжения на Z-Uno начинает очень сильно греться, что приведет к отключению питания по температуре, поэтому нужно использовать либо радиатор, либо Switching регулятор напряжения. Я выбрал второй вариант и использую очень компактный китайский регулятор напряжения MP1584EN.
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba
Краткие характеристики регулятора напряжения MP1584EN:

  • Входное напряжение: 4.5-28В
  • Выходное напряжение: 0.8-20В (регулируемое)
  • Выходной ток: 3А
  • Эффективность: 96%

Регулятор напряжения и делитель напряжения уместились на обратной стороне Z-UNO, при этом не увеличив габариты платы.
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba

Подключение Z-Uno к iRobot Roomba 770
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba

Уборка-Док станция

Со скетчом Уборка-Док станция Z-Uno по радио принимает команды ВКЛ/ВЫКЛ и по UART пылесосу отправляет команды Clean (Уборка) и Seek Dock (Искать док станцию). При получении радиокоманды Z-Uno один раз мигает встроенным светодиодом. Радиокоманду Вкл/Выкл может отправить любое Z-Wave устройство: брелок, выключатель, контроллер и др.
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba
Скетч Уборка-Док станция для Z-Uno по управлению пылесосом Roomba#define LED_PIN 13
byte roombaState = 0;
ZUNO_SETUP_CHANNELS(ZUNO_SWITCH_BINARY(getter, setter));

void setup() {
pinMode(LED_PIN, OUTPUT);
Serial1.begin();
}

void loop() { /*Empty*/ }

void setter(byte value) {
digitalWrite (LED_PIN, HIGH); // Turn On LED
if (value) {
Serial1.write(128); // Roomba START Communication
Serial1.write(131); // SAFE MODE
Serial1.write(135); // Clean
roombaState = 1;
}
else {
digitalWrite (LED_PIN, LOW);
Serial1.write(128); // Roomba START Communication
Serial1.write(131); // SAFE MODE
Serial1.write(143); // Seek Dock
roombaState = 0;
}
}

byte getter() {
return roombaState;
}

После заливки скетча нужно добавить Z-Uno в Z-Wave контроллер. Z-Uno отображается как выключатель с кнопками On и Off.
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba

Чтение заряда батареи

Добавим к функции включение-выключение пылесоса функцию по считыванию заряда батареи.
Со скетчом Чтение заряда батареи Z-Uno периодически или по запросу отправляет заряд батареи пылесоса Roomba на Z-Wave контроллер.

Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba
Скетч Чтение заряда батареи пылесоса Roomba и Уборка-Док станция для Z-Uno#define LED_PIN 13
byte roombaState = 0;
word batteryValue = 0;

ZUNO_SETUP_CHANNELS(ZUNO_SWITCH_BINARY(getter, setter),ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_VOLTAGE, SENSOR_MULTILEVEL_SCALE_VOLT, SENSOR_MULTILEVEL_SIZE_ONE_BYTE, 1, getterBattery));

void setup() {
pinMode(LED_PIN, OUTPUT);
Serial1.begin();
}

void loop() {
// Get battery value every 1 minute
byte data[2] = {0,0}; // array to store data from battery
byte i = 0;
Serial1.write(142); // Send a packet of sensor data bytes
Serial1.write(22); // Get battery value
delay(200);
while (Serial1.available()) {
data[i++] = Serial1.read();
}

// highbyte is shifted left eight bits, lowbyte is added to highbyte
// encoder_count=highbyte<<8+lowbyte
batteryValue= (data[0]<<8)+data[1];

zunoSendReport(2); // Send Battery every 30 seconds
delay(30000);
}

void setter(byte value) {
if (value) {
digitalWrite (LED_PIN, HIGH);
Serial1.write(128); // Roomba START Communication
Serial1.write(131); // SAFE MODE
Serial1.write(135); // Clean
roombaState = 1;
}
else {
digitalWrite (LED_PIN, LOW);
Serial1.write(128); // Roomba START Communication
Serial1.write(131); // SAFE MODE
Serial1.write(135); // Stop Clean
roombaState = 0;
}
}

byte getter() {
return roombaState;
}

byte getterBattery() {
return batteryValue;
}

Теперь Z-Uno отображается как 2-х канальное устройство с функциями выключателя и многоуровнего датчика, т.е. отображаются кнопки On/Off и заряд в вольтах.
Разрабатываем Z-Wave устройство для управления пылесосом iRobot Roomba

При необходимости можно добавить прямое управление, реализовать считывание датчика температуры, отчет о встрече со стеной и оповещение при невозможности проехать. Можно добавить функцию, которая позволила бы найти застрявшего под диваном Roomba, путем отправки ему команды проиграть мелодию.
Z-Uno конечно же не единственный вариант радио управления Roomba, есть RooWiFi и много проектов типа Arduino+ESP8266, но если у вас уже есть Z-Wave сеть, то почему бы не использовать Z-Uno для управления пылесосом Roomba!

Для желающих сэкономить магазин 5smart.ru дарит скидку 10% на все оборудование Z-Wave. Купон GT_SUMMER.