GrabDuck

Розетка 2.0: наш ответ Tesla

:

Умный дом. Концепция по-настоящему современного жилища, где с помощью технологий человеку обеспечивается полный комфорт. Всё больше и больше людей покупают готовые решения. к несчастью (особенно из-за нынешнего курса) многие такие наборы сильно прибавили в цене и зачастую стали слишком дорогостоящим способом “прикоснуться к будущему”. И остается радоваться, что по-прежнему пытливые умы разрабатывают всё новые и новые 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!