Волна Z. Используем Z-Uno, чтобы сделать свое устройство для умного дома
Эксплойт
Существует масса готовых решений для умного дома, но дешевле и интереснее делать самому. В этой статье мы разберемся, как создать устройство с поддержкой Z-Wave, не покупая комплект разработчика за 6000 долларов. Делать мы будем детектор дыма, а поможет нам в этом плата Z-Uno.
Под словосочетанием «умный дом», которое нынче через раз заменяют на «интернет вещей», скрывается довольно простая вещь — автоматизация повседневных домашних нужд (по крайней мере тех, что в принципе могут быть автоматизированы). Подключение при этом может быть проводным или беспроводным, причем проводной вариант всегда обходится дороже, поскольку требует серьезных монтажных работ. Беспроводной проще и менее монументальный — конфигурацию можно потом менять в любой момент.
У каждого из беспроводных протоколов (Wi-Fi, Bluetooth, Z-Wave, ZigBee, Thread и другие) есть свои преимущества и недостатки, о которых стоит подумать, прежде чем начинать что-то покупать и мастерить.
- Wi-Fi — технология, которая поддерживается любым смартфоном, но это всего лишь транспорт. Устройства разных производителей при этом обычно несовместимы друг с другом на уровне командного протокола, к тому же имеют высокое энергопотребление (чтобы работал Wi-Fi и TCP/IP, на устройстве нужен, считай, целый компьютер).
- Bluetooth — популярный протокол, но изначально созданный скорее для беспроводных гарнитур и колонок, чем для светильников и выключателей. Из-за этого имеет ряд ненужных свойств. Bluetooth LE используется в некоторых устройствах с поддержкой Apple HomeKit, но их не так много.
- Z-Wave имеет наибольшее количество совместимых устройств, более тысячи, но это обычно самые дорогие в своем сегменте модели.
- ZigBee — на нем основаны весьма недорогие устройства, которые, к сожалению, не всегда совместимы друг с другом.
- Thread и лежащий в его основе 6LoWPAN — перспективные разработки, которые пока что используются всего в двух устройствах.

Чтобы измерить температуру в доме и отобразить это на телефоне, достаточно платы Arduino и ESP8266, но, когда встает вопрос о полномасштабной автоматизации дома, приходится искать решения, проверенные годами. Выбор протокола во многом зависит от задач, которые ты хочешь решить с его помощью.
В этой статье мы поговорим о разработке устройств на Z-Wave. Они сослужат тебе верную службу, если ты хочешь:
- управлять освещением, возможно — даже с датчика движения;
- измерять температуру и влажность, при необходимости включать климат-систему;
- включать робот-пылесос, когда дома никого нет;
- получать сообщения о протечках и взломах.
Можно купить датчик движения Fibaro и модуль управления освещением Aeotec и при этом не беспокоиться о совместимости: устройства Z-Wave совместимы между собой и могут работать напрямую без хаба. Для большинства задач автоматизации есть подходящие устройства:
- лампы RGBW;
- выключатели на батарейках;
- разного рода датчики;
- реле;
- диммеры;
- термостаты.
Если же требуется уникальное устройство вроде датчика радиации — и такое бывает, — можно разработать свое собственное профессиональное Z-Wave-устройство с помощью платы Z-Uno.
Что такое Z-Uno
Z-Uno — это плата для прототипирования устройств Z-Wave, основанная на чипе ZM5101. Многие производители оборудования для умных домов используют этот чип в своих устройствах, но для его самостоятельного программирования придется приобрести у Silicon Labs комплект разработчика: компилятор, программатор и SDK за 6000 долларов. О времени, которое придется потратить на изучение документации, не стоит и говорить.

Плата Z-Uno позволяет разработать устройство Z-Wave за один день, и оно будет на 100% совместимо с любым другим девайсом Z-Wave. Весь фокус в том, что для разработки используется среда Arduino IDE, которая ускоряет процесс программирования в тысячу раз. К тому же с ATmega328 каждый любитель мастерить уже знаком.
По сути, Z-Uno — это та же Arduino, только на другом чипе и с радиомодулем. Любую ножку можно настроить на вход или выход, есть четыре ножки ШИМ и четыре ножки АЦП, для коммуникации присутствует UART и SPI, питание от 3,3 до 18 В.
Как и к Arduino, к Z-Uno можно добавить абсолютно любой датчик и исполнительный механизм. Всего к нему можно подключить 32 девайса одновременно, это значительно уменьшает расходы на домашнюю автоматизацию. Управлять таким устройством можно как с подключенных клавиш, так и по радио с хаба или с другого устройства Z-Wave.
Вот так в веб-интерфейсе контроллера Z-Wave выглядит устройство с тремя датчиками температуры DS18B20, каждый датчик можно использовать в разных сценариях.

Если в доме уже есть какая-то автоматизация, например блок реле под управлением Arduino, то его функциональность можно расширить с помощью беспроводных датчиков движения и Z-Uno в качестве приемника радиосигналов. Другой вариант: встроить Z-Uno в уже установленные проводные датчики (дыма, освещения, движения и прочие), чтобы они могли напрямую включать свет или, к примеру, регулировать климатическую систему.

Делаем детектор пыли и сигаретного дыма
Посмотрим, как реализовать детектор пыли и сигаретного дыма на основе Sharp GP2Y1010AU0F.

Для детектирования дыма при возгорании существуют датчики дыма, которые срабатывают при большом количестве взвешенных частиц в воздухе. Но такие датчики не реагируют на пыль или сигаретный дым. Частицы пыли и сигаретного дыма очень маленькие и для их детектирования требуются более точные приборы, чем простые датчики дыма. Подойдет, к примеру, оптический датчик Sharp GP2Y1010AU0F.

Внутри корпуса этот датчик имеет специально сконструированную оптическую камеру, которая и обнаруживает мелкие частицы. Камера работает следующим образом: светодиод (LED) в течение 280 мкс светит через линзу (Lens) на зону обнаружения частиц (Detector area). Фотодиод (Detector) фиксирует, сколько света доходит до него. Если есть препятствие в виде пыли или дыма, то датчик выдаст значение в диапазоне от 0 до 255 (если АЦП установлен на 8 бит).
Такому датчику периодически требуется калибровка. В любом жилом помещении есть пыль, и ее количество нужно принимать за 0, иначе датчик будет постоянно срабатывать. Разумно проводить калибровку каждые десять минут, так как в течение дня уровень пыли в воздухе может меняться: когда в помещении кто-то передвигается, пыли больше, по ночам — меньше.
Этот датчик можно использовать в проектах на Arduino, STM32 и других микроконтроллерах, но Z-Uno позволяет интегрировать датчик сигаретного дыма в систему умного дома. Благодаря тому что датчик производит измерения в течение очень короткого времени, его можно питать от одной батарейки 3 В CR123A.

Корпус предлагается использовать от обычного датчика дыма, он недорогой и имеет все нужные отверстия.

Следуя даташиту на датчик Sharp GP2Y1010AU0F, подключаем его к плате Z-Uno.

Код достаточно прост и занимает 29 строк. Каждую секунду измеряется количество пыли по шкале от 0 до 255. Значение 255 — это 3,3 В на выходе датчика, но экспериментальным путем было установлено, что максимальное значение пыли достигается при меньшем напряжении и, соответственно, максимальное значение составляет 152. От него мы в процентах рассчитываем количество пыли в камере. После каждого измерения отправляем данные на контроллер Z-Wave.
#define LED 8
#define SAMPLING_TIME 280
#define DELTA_TIME 40
#define MAX_VALUE 152 // (instead 255)
ZUNO_SETUP_CHANNELS(ZUNO_SENSOR_MULTILEVEL_GENERAL_PURPOSE(getter));
byte voMeasured = 0;
void setup(){
analogReadResolution(8);
pinMode(LED,OUTPUT);
Serial.begin();
}
void loop(){
digitalWrite(LED,LOW);
delayMicroseconds(SAMPLING_TIME);
voMeasured = analogRead(A3);
delayMicroseconds(DELTA_TIME);
digitalWrite(LED,HIGH);
Serial.println(voMeasured);
zunoSendReport(1);
delay(1000);
}
byte getter(void) {
return (word(voMeasured)*word(99)/word(MAX_VALUE));
}
Информацию с датчика пыли на контроллере Z-Wave можно обработать и выполнить нужное действие: включить тревогу, отправить сообщение или запустить проветриватель.

Используемый корпус пришлось немного модифицировать, чтобы разместить все компоненты устройства:
- датчик пыли Sharp GP2Y1010AU0F;
- плата Z-Uno;
- отсек для батарейки.

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

При замыкании контактов через них начинает течь ток, и чем выше мощность управляемой нагрузки, тем выше ток течет. Если мощность большая, например у обогревателя или электрочайника (порядка 2 кВт), то при касании контактов начинает течь очень большой ток и контакты могут привариться, в этом случае реле выходит из строя. Следует выбирать реле с запасом, для нагрузки в 2 кВт нужно брать реле на 3 кВт.
Иногда не спасает даже запас по мощности: светодиодная лента потребляет очень мало по сравнению с лампой накаливания, но в момент включения блок питания светодиодной ленты потребляет в двадцать раз больше, чем номинальная мощность ленты, контакты реле могут привариться после десятка включений.
Твердотельное реле, в отличие от электромагнитного, не содержит механических элементов, а значит, может служить гораздо дольше и более пожаробезопасное.

Если не углубляться в детали, то можно считать, что внутри твердотельного реле — светодиод и фотоприемник. При подаче небольшого напряжения внутри реле начинает гореть светодиод, фотоприемник улавливает этот свет и подает сигнал на тиристор или симистор, который замыкает контакт.
Таким образом можно управлять очень мощной нагрузкой — например, включать и выключать свет в целой квартире, не опасаясь, что реле выйдет из строя в самый неподходящий момент.
Еще одно преимущество твердотельного реле перед электромагнитным — это бесшумная работа. Приятно, когда свет включается плавно и без шума, а не резко бьет в глаза с характерным щелчком.
Твердотельное реле, в отличие от электромагнитного, управляется напряжением, а не током, поэтому даже мощное реле на 60 А можно подключить напрямую к ножке микроконтроллера без резистора и не опасаться, что выгорит порт.
Для разработки радиоуправляемого твердотельного реле потребуется:
- твердотельное реле 60 А;
- плата Z-Uno;
- блок питания на 3,3 В;
- корпус трехмодульный на DIN-рейку.
Для питания Z-Uno нужно 3,3 В, так что отлично подойдет компактный блок питания Hi-Link 220 В → 3,3 В.

Твердотельное реле Clion на 60 А идеально помещается в трехмодульном корпусе на DIN-рейку.

К тринадцатому пину платы Z-Uno подключаем твердотельное реле и пишем крохотный скетч для управления им. При этом индикация состояния реле будет отображаться встроенным светодиодом на Z-Uno.
#define LED_PIN 13
byte currentLEDValue;
ZUNO_SETUP_CHANNELS(ZUNO_SWITCH_BINARY(getter, setter));
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Loop is empty, because all the control comes over the Z-Wave
}
void setter(byte value) {
currentLEDValue = value;
digitalWrite (LED_PIN, value ? HIGH : LOW);
}
byte getter() {
return currentLEDValue;
}
Готовое устройство устанавливается в электромонтажном щитке перед всеми автоматами.
