Умный дом. Концепция по-настоящему современного жилища, где с помощью технологий человеку обеспечивается полный комфорт. Всё больше и больше людей покупают готовые решения. к несчастью (особенно из-за нынешнего курса) многие такие наборы сильно прибавили в цене и зачастую стали слишком дорогостоящим способом “прикоснуться к будущему”. И остается радоваться, что по-прежнему пытливые умы разрабатывают всё новые и новые DIY-способы автоматизировать своё жилище.
Мне бы хотелось рассказать вам о проекте, который я подсмотрел на сайте BQ. Мне всегда казалось, что “Умный дом” — это сложные технологии и человеку без глубокого понимания инженерного дела и электроники туда даже соваться не стоит. Но как оказалось всё несколько проще.
В этом проекте рассказывается как с помощью arduino-совместимой платы, простого удлинителя с кнопкой, protocoder и смартфона обеспечить включение-выключение света с помощью голосовых команд. Основной принцип заключается в том, что вы присоединяетесь удаленно к плате с помощью bluetooth и, запустив приложение на своем смартфоне, можете дать определенную команду. Но обо всем по порядку.
Монтаж.
Первое, что потребуется сделать — это, конечно, интегрировать плату в ваш удлинитель.
Для этого, в первую очередь, этот самый удлинитель нужно абсолютно варварским способом разобрать. Заботливые испанцы крупным капсом предупреждают о том, что перед этими манипуляциями сам удлинитель неплохо бы отключить от питания.
После того как вы разберете удлинитель, кнопку можете смело отложить — вам она больше не понадобится. Вас интересуют провода, которые в неё входили — их всего два. Чаще всего они синего и коричневого цвета — от них и будем отталкиваться. Синий провод следует сразу же спаять и установить термоусадку — это такие пластиковые “трубки”, которые вы без труда найдёте в любом магазине для радиолюбителей. Сделать это нужно обязательно, иначе обнаженный участок проводов в скором времени может привести к последствиям, которые проектом не предусмотрены.
Второй провод спаивать не нужно. Там образом у вас будет два конца коричневого провода. Их нужно установить в arduino-совместимое реле. Конец, идущий из шнура питания, устанавливается в клемму С — central. С ней вы не прогадаете, она находится посередине. А провод, идущий от “розеток” — в клемму NO (normally open). Если на вашем реле отсутствуют обозначения, поверните его положением клеммами вниз. Левая — та, которая вам требуется.
Если всё сделано верно, то теперь ваш удлинитель изнутри будет выглядеть примерно так:
После этого удлинитель можно “закрыть”, предварительно продев провод реле для подключения платы через отверстие, оставшееся от кнопки. Манипуляции со внутренностями закончены.
Теперь нужно установить саму плату. В примере используется bq ZUM, принципиальное отличие которой, в данном случае, заключается в интегрированном блютуз-модуле. Однако ZUM можно заменить другой платой, например, Freeduino Uno. Но тогда вам дополнительно понадобится недостающий модуль.
Чтобы надежно закрепить электронику на удлинителе, вам также понадобятся детали, которые напечатаны на 3D-принтере. Помимо небольшой площадки под плату, в число деталей также входит контейнер для питательного модуля, куда устанавливаются батарейки. Наверняка с помощью дополнительной электроники можно запитать плату и от шнура удлинителя, но данный пример, к сожалению, не рассматривается.
Собрав, наконец, всю электронику, мы устанавливаем её. Конечный результат выглядит достаточно симпатично, но остается ещё software-часть.
Protocoder.
Protooder — это среда для программирования + JavaScript-фреймворк для быстрой сборки прототипов, которые можно использовать на устройствах с Android. Установить его очень просто.
Скетч для этого проекта выложен испанцами в открытый доступ и ничего программировать не придется. На экране мобильного приложение выглядит вот так:
Не пугайтесь иностранных не-английских слов, в исходном коде вы сможете изменить надписи на те, которые захотите. В приложении мы видим три кнопки. И вот что каждая из них означает:
Conectar bluetooth — как не трудно догадаться, нажав эту кнопку вы сможете через Protocoder присоединиться к желаемому устройству по блютуз. В нашем случае это устройство — плата;
Desconectar — это, соответственно, разрыв связи. Очень полезная функция с учётом того, что пока установлено соединение вы не сможете вносить изменения в код программируемой платы;
Hablar — “говорить”. Нажав эту кнопку, вам откроется привычный сервис голосового ввода от google. Именно с помощью нажатия этой кнопки вы и будете “вводить” свои команды;
Вот код для Protocoder’а и вашего смартфона:
var bluetoothOn=0;
ui.addButton("Conectar bluetooth", 10, 150, function() {
network.connectBluetoothSerialByUi(function(m, data) {
txt.text(data + "\n");
});
bluetoothOn=1;
})
ui.addButton("Desconectar", 380, 150, function() {
network.disconnectBluetooth();
})
ui.addButton("Hablar", 280, 550, function() {
media.startVoiceRecognition(function(text) {
console.log(text);
if (bluetoothOn==1) {
if(text=="enciende") network.sendBluetoothSerial("=on+");
if(text=="apaga") network.sendBluetoothSerial("=off+");
if(text=="parpadea cada segundo") network.sendBluetoothSerial("=1+");
if(text.substring(0,13)=="parpadea cada" && text.substring(14,21)!="segundo" ) network.sendBluetoothSerial("="+text.split(" ")[2]+"+");
}
});
})
Внимательно поглядите на него. Вы обнаружите на 19, 20 и 21 строке такие слова — enciende (“Включить”), apaga (“Погасить”) и parpadea cada segundo (“Мигать каждую секунду”). Если у вас нет желания тренировать свой испанский, эти слова следует заменить на более привычные. О том, что делает каждая из команд догадаться не трудно.
Теперь ваш мобильный может присоединяться к плате и подавать ей команды. Но сама она их воспринимать пока не в состоянии — её тоже нужно запрограммировать.
В первую очередь, если вы собираетесь использовать исходники испанцев, убедитесь, что реле подключена к плате в правильные пины:
Убедились? Тогда самое время залить код. Делается это с помощью Arduino IDE. Вот код:
String inString ="";
int pinRele=7;
void setup() {
Serial.begin(19200);
Serial.flush();
pinMode(pinRele, OUTPUT);
pinMode(13, OUTPUT);
}
void readFromAndroid(){
char inChar;
while(Serial.available()>0){
inChar =(char) Serial.read();
Serial.flush();
if (inChar=='='){
inString="";
}
else if(inChar!='+'){
inString+=inChar;
}
}
}
void writeData(){
if (inString=="on") {
digitalWrite(13, HIGH);
digitalWrite(pinRele, HIGH);}
else if (inString=="off") {
digitalWrite(13, LOW);
digitalWrite(pinRele, LOW);}
else if (inString.toInt()){
digitalWrite(13, HIGH);
digitalWrite(pinRele, HIGH);
delay(inString.toInt() *1000 );
digitalWrite(13, LOW);
digitalWrite(pinRele, LOW);
delay(inString.toInt() *1000 );
}
}
void loop() {
if (Serial.available()>0){
readFromAndroid();
}
writeData();
}
Важный момент. Если вы не используете плату bq ZUM, то есть большая вероятность, что блютуз-модуль установлен на другой скорости. Тогда нужно заменить строку:
Serial.begin(19200);
На, например:
Serial.begin(9600);
В интернете также достаточно примеров как самостоятельно изменить скорость передачи данных самого блютуз-модуля.
Итак, после установки программы и на смартфон, и на плату, наш проект завершен. Самое время взять свежие батарейки, подключить удлинитель к сети, а к нему, например, лампу. Что у вас в итоге должно выйти? Демонстрация — в видео:
Конечно, активация вкл/выкл с помощью голосовых команд — это ещё не умный дом. Но главное — это идея. А идея такова, что с помощью DIY-проектов любой желающий может без проблем самостоятельно побыть Джеком, который построит дом. Очень умный дом.
P.S. Ссылка с файлами проекта
P.S.S. I hope Elon Musk will see the text, and buy us all to Tesla for 400 tysjach dollarov. Spasibo!
Комментарии (66)
AlexanderS
02.02.2016 15:25+2Сколько времени проработает электроника от батареек? Я думаю не просто мало, а очень мало)
Учитывая, что рядом есть 220В можно запитаться от сети и проблема автономности больше волновать не будет.
IronHead
02.02.2016 15:34+1Что мешало поставить bluetooth HC-05, atmega8 или stm8, BT-139 на каждую розетку в отдельности, конденсаторный делитель напряжения для питания низковольтной части, уместит это все в пилоте и получить 5 независимо управляемых розеток?
liqsun
02.02.2016 15:35+1Абсолютно ничего не мешает. И, благодаря вашему комментарию и статье с совсем простеньким устройством, теперь у неопытного в делах электроники человека возможно появится желание именно так и поступить (:
bazis13
05.02.2016 15:30Потому что там нет 5 отдельных розеток. Если попытаться их сделать, от оригинального удлинителя останется только пустой корпус с вилкой и тогда уже проще всё напечатать с нуля или использовать другие розетки.
IronHead
05.02.2016 15:58переделать пилот на 5 розеток по трудо и временным затратам — гораздо проще, чем печатать новй корпус. и внешний вид будет на уровне.
к тому же http://www.inline-online.ru/img/goods/77698/39626.jpg
сколько вы там говорите пластика уйдет на корпус?
freelight
02.02.2016 15:39Парни, проект открыт, доработайте!
А вообще умный удлинитель вполне может стать коммерческим продуктом. Надо только придумать что он будет делать :)kAIST
02.02.2016 16:40+6Парни, проект открыт, доработайте!
-Да какая нафиг систему бахгалтерского учета, вы же просто калькулятор написали!
-Проект открыт, доработайте!
А если серьезно, дорабатывать тут вообщем то нечего, нужно все переделывать полностью. Проектов «умной розетки» тысячи, а этот ничем не выделяется среди остальных.
alexpp
02.02.2016 15:41+4Какое-то противоречивое устройство: запитано от батарей, когда рядом есть 220в, использована громадная плата вместо одиночного контроллера или хотя бы nano/micro версии, пропала всякая защита от детей/домашних животных. Думаю, можно продолжить.
liqsun
02.02.2016 15:44Думаю, это скорее учебный проект. Очевидно ведь, что «войдя в тему», можно уже и корпус закрытый сделать, и запитать как следует, и плату по вкусу установить
olekl
02.02.2016 15:43+1Туда бы измеритель тока добавить что ли… А то вкл-выкл как-то совсем неинтересно.
Fixid
02.02.2016 15:43+2Но ведь есть же ESP 8266, уместилось бы в корпус вместе с блоком питания и группой реле
liqsun
02.02.2016 15:44-1А как эту штуку кодить? Всегда интересно было. Или суть в том, что все «мозги» в смартфоне?
rinat_crone
02.02.2016 16:29На ESP8266 есть свой чип, который можно прошивать через ту же Arduino IDE. Единственное «но» – на плате есть только один пин для подключения чего-либо внешнего, для этого конкретного примера некритично, но если захочется поставить больше релешек и рулить каждой розеткой отдельно, то прийдется, наверное, использовать сдвиговый регистр или добавить в схему arduino nano, например.
IronHead
02.02.2016 17:16ESP8266 разные бывают, ESP8266 esp-07 содержит аж 9 GPIO
rinat_crone
02.02.2016 17:19Спасибо за дополнение, да, действительно так. Я просто держал в голове самый частовстречающийся вариант, который ESP-01 V090, ЕМНИП.
sampobek
05.02.2016 16:41Есть версии и с большим количеством пинов, например ESP8266-07 с 8 пинами «для подключения чего-либо внешнего».
jc46z
05.02.2016 15:10
Firz
02.02.2016 15:49+4«P.S.S. I hope Elon Musk will see the text, and buy us all to Tesla for 400 tysjach dollarov. Spasibo!»
Боюсь что управляя нагрузкой с помощью нулевого(потому что шанс 50/50, так что нулевого) проводника, Вы вызовете у него только Facepalm.liqsun
02.02.2016 15:51-3Если мне однажды получится вызвать у Маска facepalm, я хочу могильную плиту с указанием этого факта!
ionicman
02.02.2016 16:05+5Во-первых, это все давно уже сделано китайцами и дешево.
Во-вторых, если уж делать, то прежде чем делать, нужно было хотя-бы продумать базу и просмотреть сеть по этому поводу.
В-третьих ESP-шка + реле позволит уместить все это ВНУТЬ удлинителя + запитать от сети.
Себестоимость — копьё, прошивок, как гна — даже писать ничего не надо, работать будет пока есть напряжение, а ни пока батарейки не сядут. В коде нет даже намека на перевод проца в спячку. Охохоюшки…
Удлинитель на батарейках это как фонарь на солнечных батареях — польза примерно такая-же.
В-четвертых, разрывать надо ОБА провода. Потому-что.
А как эту штуку кодить?
Это говорит человек, который пытается сделать что-то электронное… мммда.
Санчала читать надо, потом (если действительно под Ваши запросы ничего нет) — делать.
А не наоборот.
Напишите хоть, что Вы это делали с целью обучиться, а то бедный Musk может фейспалмом голову себе раскроить, конкуренты TESLA, блин :Dliqsun
02.02.2016 16:12Так я же и говорю, что проект как раз хорош демонстрацией концепции, что, в общем-то, собрать какое-то своё устройство, управляемое голосом с мобильного, не сакральное дело, доступное единицам. Есть ли у проекта критические минусы? Да. Есть ли польза в комментах, где все наперебой советуют более интересные решения? Да. Следует всё же помнить, что не все на портале мастера-робототехники (:
ionicman
02.02.2016 16:14+1Дак обучатся надо не с того, что заново изобретать паровой двигатель, а с современного.
Опыт-то предыдущих людей нужно использовать.
Первый запрос в гугле esp8266.ru/forum/threads/wifi-rozetka.663
Да, извините конечно, не похожа Ваша статья на разбирательство в чем-то, больше похоже на «хуяк-хуяк и в продакшн!». Прежде чем что-то делать, нужно досконально изучить, что кто делал это до Вас. Но это, кончено, мое ИМХО.liqsun
02.02.2016 16:17Честно говоря, в данном случае для меня проект имеет особую ценность из-за показанной связки ардуино+протокодер. Для своих будущих задач очень круто было бы использовать сервоприводы с помощью голосовых команд
ionicman
02.02.2016 16:20Ну дак я-то, как читатель, не в курсе Ваших сакральных замыслов — что вижу то и читаю.
По голосовым командам тоже полно всего, причем можно практически одним WEB-ом обойтись и браузером, безо всякого стороннего софта.
loly_girl
02.02.2016 16:23+2В детстве в каком-то учебнике по радиоэлектронике то ли 70-х, то ли 80-х годов видела всё то же самое, но без адруины и микроконтроллеров. Даже не помню, как там звуковой образец фраз хранился и как сравнивался, для меня это было слишком сложно.
Zzzuhell
1) Запитывать мозги умной розетки от батареек — это сильно
2) Изначально розетка работала с выключателем с двумя группами контактов. Что мешало поставить туда шилд с реле, у которого тоже две группы контактов. Так вроде бы более электробезопасно будет.
liqsun
Я думаю это всё издержки быстрого прототипа)
Zzzuhell
Ну, не знаю. Быстрый прототип — это когда сбоку висит выносной батарейный блок «чиста попробовать». А печатать корпус под батарейки, чтобы из конечного изделия их убрать — это избыточно.
liqsun
Вообще, на самом деле логично. Время для розетки 3.0? :D
DrPass
3) Использовать Arduino там, где можно просто поставить реле со встроенным блютус-модулем, ничуть не лучше, чем батарейки :)