スマヌトホヌムからスマヌト䌁業ぞ

「...リプリヌ氏が私たちを䞭庭に連れお行っお、家に向かっお蚀ったら、「スタンド、家、ニュヌペヌクに戻り、私に向かいたす」ず蚀ったら、家は鶏の足の小屋のように、これを実行しおいたした電気によるリク゚ストであり、私たちもそれほど驚かないでしょう。」
むルフずペトロフ。 1階建おのアメリカ。 1935




パヌト1



はじめに













私たちは、今幎で5幎を迎えた䌚瀟であり、過去の制埡システムずのSAPパヌトナヌです。 珟圚、倧䌁業、䞍動産所有者向けに資産管理システムを導入しおいたす。 参考たでに、倚くの堎合、オブゞェクトの数は数䞇たれに数十䞇であり、面積は数癟䞇平方メヌトルを超えたす。 そのような䌁業にずっお、地理ず信頌性ずセキュリティの芁件を備えたSAPは最も望たしい゜リュヌションですが、この蚘事ではこれに぀いおは説明したせん興味がある堎合は、個別に説明したす。

この蚘事では、これに焊点を圓おるのではなく、ハむテクでむンテリゞェントな郊倖の民間コテヌゞの建蚭に携わる機䌚があったずいう事実に焊点を圓おたす...そしお私たちはこのこずに喜びを感じたした。 そしお、スマヌトなコテヌゞからスマヌトな䌁業たで、今幎の初めから続いおきた道の歎史を提䟛したす。

建蚭および゚ンゞニアリング゜リュヌションのすべおの段階で停止するわけではありたせん。自埋性ず゚ネルギヌ効率の点で特城的な特性のみに泚目したす。



  1. 壁はセラミックの石で䜜られ、15センチの鉱物断熱局で断熱されおおり、化粧レンガがこのパむを完成させおいたす。 现かい仕䞊げを考慮するず、壁の厚さは玄70センチメヌトルであり、モスクワ近蟺の冬の条件で良奜な保枩性を確保するはずです。
  2. 窓。 ゚ネルギヌ効率の良いガラスを備えた6チャンバヌフレヌムを䜿甚したした熱損倱の䞻な原因-IRスペクトルは98に反映されたす。 電気ロヌルシャッタヌは、砎壊行為から保護するために窓の䞊郚に蚭眮され、远加の空気局を䜜成し、倏には日圓たりの良い偎を芆いたす。
  3. ゚ネルギヌ 最前線には、シュナむダヌ゚レクトリック補のXantrexシステム、入力安定装眮、バッテリヌパック、3.6 kW゜ヌラヌパネル、自動発電機起動ナニット、およびWebベヌスの制埡がありたす。
  4. 暖房。 倚回路ボむラヌ、ガスボむラヌ、゜ヌラヌ蚭備、ヒヌトポンプ。 郚屋の床䞋暖房ずラゞ゚ヌタヌには、電気バルブ付きの個別のラむンがありたす各郚屋の気候制埡。
  5. 換気。 埩熱装眮ず氎力発電斜蚭を備えた匷制空気および排気装眮冬は暖かく、倏は涌しい。 各郚屋/ゟヌンには、個別の換気バルブがありたす。 蚭眮には差圧センサヌずパフォヌマンスの自動調敎がありたす。
  6. 照明 䞻にLED。 SolarTubeを䜿甚した2番目のラむト。








自動化のためのこのようなオブゞェクトを次に瀺したす。 私たちは、家のすべおの゚ンゞニアリングシステムを、快適で安党で゚ネルギヌ効率の高い生掻を保蚌する単䞀のシンプルでわかりやすい制埡システムにリンクするずいう課題に盎面したした。 誰もがアリス http://habrahabr.ru/post/160067/ を芚えおおり、私たちは、このプロゞェクトや他のプロゞェクトに感銘を受けお、䌌たようなこずを繰り返すこずにしたした。 たた、システムが真にむンテリゞェントであるこずを望んでいたした。 最小限のコントロヌル。



䟋







もちろん、すべおの郚屋でGoogleではなく音声コマンドを提䟛したかったのです。 スクリプトの切り替え映画、スリヌプ、ディスコ; マルチメディア、ロヌルシャッタヌ、゜ケットの管理。 アヌム/アヌム解陀; IPカメラぞの接続を含む、携垯電話/タブレットからのリモヌト制埡が可胜になりたす。 ある時点で、アヌキテクチャの蚭蚈に取り組み、KNXですべおを実行するか、独自の䜕かを思い぀くかの遞択に盎面したした。 おそらく既に掚枬したように、2番目のオプションを遞択したした。 KNXは既補の倚数のデバむス/むンタヌフェヌス、矎しいフレヌムずスむッチに぀いお語りたしたが、KNXに奜意的ではなかった唯䞀のこずは、2぀の知識でした。 そこで、コントロヌラヌの䜜成に取り組みたした。 どうあるべきかを考えたずき、自宅でも商甚プロゞェクトのほずんどでも䜿甚できるプラットフォヌムを䜜成するこずは玠晎らしいこずだず考えたした。



私たちは、少しのお金でどんなアパヌトにもむンストヌルできる最もシンプルでコンパクトな補品を䜜成するずいうアむデアを持っおいたした。 さらに、システムはモゞュヌル匏であり、さたざたなタスクに柔軟に適応する必芁がありたす。 同時に、䜏宅郚門公共郚門および䌁業セグメントで䜿甚できたす。



たず、SMART HOUSEコントロヌラヌが満たすべき基準を定匏化しようずしたした。



  1. コントロヌラは、「オヌプン゜フトりェアずハ​​ヌドりェア」オヌプン゜ヌス゜フトりェア、オヌプン゜ヌスハヌドりェアの原則に基づいおいる必芁がありたす。 プログラミング環境はシンプルでわかりやすいものでなければなりたせん。 技術的な知識を持぀人なら誰でも、そのようなデバむスを独自に䜜成/近代化およびプログラミングできたす。
  2. コントロヌラヌは汎甚性があり、床䞋暖房からマルチメディアたで「SMART HOME」の管理のすべおの偎面で䜿甚する必芁がありたす。 さたざたな皮類のセンサヌ、アクチュ゚ヌタヌ、換気、加熱、安党性のためのタヌンキヌ゜リュヌションず互換性がありたす。
  3. コントロヌラヌは、1぀の郚屋で䜿甚するために自絊自足で「自埋」する必芁がありたすが、耇数のコントロヌラヌをネットワヌク化する必芁がありたす。
  4. コントロヌラヌは、むヌサネットたたはWi-Fiオプションを介したデヌタ転送をサポヌトする必芁がありたす。
  5. コントロヌラヌは、暙準の゜ケットに収たるようにコンパクトなサむズである必芁がありたすが、関連するワむダリングハヌネス甚に十分なスペヌスを残しおください。
  6. コントロヌラヌには、䜎コストで高い信頌性が必芁です。




システム開発





システム党䜓の基瀎ずしお、私たちの遞択はArduinoコントロヌラヌプラットフォヌムにありたした



むンタヌネットには、このプラットフォヌムに実装されたプロゞェクトやナヌザヌケヌスに関する倚くの情報がありたすので、個別に説明するこずはせず、䞊蚘の基準を完党に満たしおいるこずに泚意しおください。



プロトタむプずしお、コントロヌラヌずネットワヌクモゞュヌルの最もコンパクトなバヌゞョンを組み合わせお、倚局ボヌドを䜜成するこずが決定されたした。 コントロヌラボヌド-ATMEGA328p-MUを搭茉したFemtoduino、ENC26J60に基づくネットワヌクモゞュヌル、安定噚、抵抗噚、端子台のペア。



これをすべお小さな「マザヌボヌド」に印刷したした。 この堎合、コントロヌラボヌドはすべお暙準゜ケットに配眮され、ネットワヌクケヌブル甚のRJ45コネクタが最倧の構造芁玠です。





写真WiFiカメラ、Levitonプレれンスセンサヌ、220Vキャンドルラむト、゜リッドステヌトリレヌ、K-30 CO2センサヌ、Arduino Mega2560 + Ethernet Shield、v1およびv2コントロヌラヌ、音声認識モゞュヌル、AC-DC 5V600ma、femtoduino USB、DC-DCコンバヌタヌ、ENC26J60




圓初、プロトタむプではLUT方匏を䜿甚しお必芁なプリント回路基板を䜜成するこずが蚈画されおいたしたが、コントロヌラヌを接続するための接点間のステップが小さすぎるこずが刀明し、ボヌドの品質に察する芁件が増加したした。 いく぀かの詊みが倱敗した埌、LUTを拒吊し、専門機関に手数料を泚文しなければなりたせんでした。



フェムトドゥむヌノ





このコントロヌラヌには、プログラミング甚のminiUSB゜ケット付きずなしの2぀のバヌゞョンがありたす。

コントロヌラヌの最初のバヌゞョンはコネクタヌがなく、AVRIspを䜿甚しお別のArduino互換コントロヌラヌを介しおプログラムされたした。 プログラミングの䟿宜のために、マザヌボヌドにはケヌブル甚のピンコネクタが甚意されおおり、プログラマがボヌドに接続したす。 ただし、このプログラミング方法は最も䟿利な方法ずはほど遠いものです。 さらに、このプロセスでは、このタむプのいく぀かのコントロヌラヌが、ダビング䞭の゚ラヌが原因で倱敗するこずがありたした。 新しいバヌゞョンにはこの問題はありたせんでした。



Femtoduino USB





コントロヌラヌの2番目のバヌゞョンは、プログラミング甚に特別なUSBコネクタヌが提䟛されるようになったため、䜜業が倧幅に簡玠化されたした。 他のArduinoボヌドず同様にプログラム可胜です。 ただし、その動䜜に必芁なFTDIチップにより、コントロヌラヌず音声認識モゞュヌルの接続に問題がありたした。 Rx / Txピンは、USB以倖での動䜜を完党に拒吊したした。 問題は決しお解決されたせんでしたボヌド開発者はFTDIが必芁な結論の䜜業を実際に劚害するこずを認めたしたので、回避策-SoftwareSerialラむブラリを䜿甚しなければなりたせんでした。 動䜜を拒吊したハヌドりェアの代わりに、任意のピンでシリアルポヌトを゚ミュレヌトできたす。



ENC26J60





これは非垞にコンパクトなネットワヌクモゞュヌルで、実際には、ほが同じサむズの小型ボヌド䞊のRJ45コネクタが1぀だけで構成されおいたす。 残念ながら、暙準のArduin EthernetモゞュヌルラむブラリはこのENC26J60には適しおいないため、代わりにEtherCardラむブラリが䜿甚されたした。 このラむブラリは、組み蟌みの開発環境ずはたったく異なりたす。組み蟌みの開発環境は、スケッチを開発するずきにあたり䟿利ではありたせん。

したがっお、必芁なデバむスはすべおテストされ、マザヌボヌド䞊で組み立おられたした。 次のコントロヌラヌが刀明したした。







Femtoduino USBに切り替える過皋で、コントロヌラヌのサむズが瞮小されたした。







その結果、むヌサネットケヌブルを介しおサヌバヌに接続し、ホヌムオヌトメヌション写真のオプションずしお220Vで駆動の幅広いタスクを解決できるコンパクトなコントロヌラヌを入手したした。



TTX









スマヌトホヌム゜リュヌションの範囲



快適さ




安党性






有効性


蚈量デバむスの自動監芖





サヌバヌ偎の開発



システムのサヌバヌ偎に぀いおは、MajorDoMoプロゞェクトが遞択されたした。 MajorDoMoは、スマヌトホヌムシステムを自動化および管理するためのオヌプンで手頃なプラットフォヌムです。 プロゞェクトの詳现は、開発者のWebサむトsmartliving.ruで確認できたす。 この゜フトりェア補品は、システムの芁件を完党に満たしおいたす。 これは、さたざたな自動化タスクに適応できるオヌプンで構成しやすいシステムです。 同時に、システムはWebむンタヌフェむスを介しお制埡されるため、どのデバむスからでも䜿甚できたす。



MajorDoMoは、システムのすべおのシナリオをプログラミングするためにPHP蚀語を䜿甚したすが、プログラミングの初心者でもシステム蚭定を理解できる䟿利なグラフィカルむンタヌフェむスを実装しおいたす。



私たちのプロゞェクトでは、Webサヌバヌずしお䜿甚できるRaspberry PiにむンストヌルされたMajorDoMoパッケヌゞを䜿甚するこずを蚈画したした。 テスト䞭に、MajorDoMoはハヌドりェアに察する芁求が高すぎるこずが明らかになり、そのような匱いサヌバヌはタスクにほずんど察凊できたせん。 サヌバヌ郚分を最適化し、ハヌドりェア自䜓をオヌバヌクロックしようずした埌、コマンドの送信ず実行の間の遅延が倧きすぎたため、それを攟棄するこずにしたした。 その埌、MajorDoMoのサヌバヌずしお、専甚サヌバヌデゞタルオヌシャンを䜿甚し、3Gモデム経由で接続したした。 サヌバヌがアムステルダムにあるずいう事実にもかかわらず、コマンド実行に察する応答はほずんど瞬時になりたした。

最埌のプロトタむプに基づいお、デモンストレヌションスタンドを䜜成するこずを決定したした。これにより、スマヌトホヌムシステムのコントロヌラヌのすべおの機胜を芖芚的に衚瀺できたす。



Raspberry Piの代わりに、専甚サヌバヌに接続されたカスタムファヌムりェアを備えたTP-Link 3020が登堎し、倖郚IPを介しおシステム党䜓にアクセスできたした。



゜ケットを芆うフロントフォヌルスパネルにセンサヌ付きの別のボヌドを配眮するこずが決定されたした。 このボヌドには2぀の光センサヌがありたす結果をスむヌトに倉換できるデゞタルセンサヌ、および埓来のフォトレゞスタヌ、デゞタル枩床センサヌDS18B20、それがない堎合、音声認識モゞュヌル甚パネル、およびそのためのマむクがありたす。 ボヌドをセンサヌに接続するために、別のルヌプが䜜成され、割り圓おられたスロット内のコントロヌラヌボヌドに盎接接続されたす。 センサヌボヌドは非垞にコンパクトであるため、゜ケット内郚のスペヌスを実質的に占有したせん。 すべおの詰め物は、゜ケットのフレヌムず蓋の間のスペヌスに収たりたす。





最終的なレむアりトアヌキテクチャ





スタンド自䜓は、最終的な圢では、4぀の゜ケットボックスで構成され、互いに固定されおいたす。 そのうちの2぀は、制埡された゜ケット゜ケット+゜リッドステヌトリレヌず、コントロヌラヌに接続された抌しボタンスむッチです。 リレヌを䜿甚するず、電球などのこのコンセントに接続された負荷を制埡できたす。 3番目の゜ケットにはシステム党䜓の電源があり、4番目にはコントロヌラヌ自䜓がありたす。



コントロヌラヌにセンサヌが取り付けられたパネル枩床センサヌ、2぀の光センサヌ、マむクを含むに加えお、2぀の远加の枩床センサヌ1-Wire、リヌドスむッチ、モヌションセンサヌ、LEDがコントロヌラヌに接続されおいたす。 レむアりトには、WiFiカメラずサヌボドラむブを接続するためのコネクタもありたす。

ご芧のずおり、このようなミニチュアコントロヌラヌにはかなりの量のバむンディングがありたす。 さらに、䜿甚されるセンサヌの倚くはデゞタルです。぀たり、センサヌを操䜜するにはラむブラリヌを䜿甚する必芁がありたす。 このため、レむアりトのスケッチを䜜成するずきに問題が発生したした。 このタむプのコントロヌラにはメモリがあたりないため、プログラムコヌドのサむズに制限がありたす。 この問題は、倧幅なコヌド最適化によっお解決されたした。



完党なコヌドはこちらにありたす。
詳现
#include <EtherCard.h> #include <Servo.h> #include <OneWire.h> #include <DallasTemperature.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(1, 0); //Software serial initialization #define ONE_WIRE_BUS 4 //Dallas initialisation OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress Ter1; DeviceAddress Ter2; DeviceAddress Ter3; int tempC1 = 1; int tempC2 = 1; int tempC3 = 1; static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; static byte myip[] = { 192,168,0,150 }; static byte gwip[] = { 192,168,0,1 }; static byte hisip[] = { 192,168,2,1 }; //char website[] PROGMEM = "192.168.2.1"; #define REQUEST_RATE 3000 Servo servo1; int xAxis = 90; int BH1750address = 0x23; byte buff[2]; int dLight = 0; #define relay1Pin 9 //  //#define relay2Pin 2 //  #define buttonPin 3 // int buttonState = HIGH; int lastButtonState = LOW; long lastDebounceTime = 0; long debounceDelay = 100; int lightState = 0; #define reedPin 8 int reedState = 0; #define PIRPin 7 int pirState = 0; #define photo1Pin = 2; int photo1Value = 0; int sensor = 0; //  #define LED1Pin 2 #define LED2Pin 5 #define LED3Pin A0 #define LED4Pin A1 int background = 0; const char http_OK[] PROGMEM = "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\n" "Pragma: no-cache\r\n\r\n"; const char link[] PROGMEM = "GET /objects/?object="; const char linkLight[] PROGMEM = "GET /objects/?object=lightgroup1&op=m&m=updateState&state="; const char website[] PROGMEM = " HTTP/1.1" "\r\n" "Host: 192.168.2.1" "\r\n" "\r\n"; byte Ethernet::buffer[600]; BufferFiller bfill; Stash stash; static long timer; ///////////////////////////////////////// SETUP ///////////////////////////////////////// void setup () { mySerial.begin(9600); sensors.begin(); sensors.getAddress(Ter1, 0); sensors.setResolution(Ter1, 12); sensors.getAddress(Ter2, 1); sensors.setResolution(Ter2, 12); sensors.getAddress(Ter3, 2); sensors.setResolution(Ter3, 12); ether.begin(sizeof Ethernet::buffer, mymac, 10); ether.staticSetup(myip, gwip); ether.copyIp(ether.hisip, hisip); timer = - REQUEST_RATE; //  servo1.attach(6); pinMode(relay1Pin, OUTPUT); pinMode(buttonPin, INPUT); pinMode(reedPin, INPUT); pinMode(PIRPin, INPUT); pinMode(LED1Pin, OUTPUT); pinMode(LED2Pin, OUTPUT); pinMode(LED3Pin, OUTPUT); pinMode(LED4Pin, OUTPUT); delay (100); //   mySerial.write(0xAA); mySerial.write(0x37); delay(100); mySerial.write(0xAA); mySerial.write(0x21); delay(100); } ///////////////////////////////////////// LOOP ///////////////////////////////////////// void loop () { word len = ether.packetReceive(); word pos = ether.packetLoop(len); netSend(); if (pos) netReply(pos); checkButton(); checkReed(); checkPIR(); checkSerial(); } //////////////////////////////////////// NETWORK //////////////////////////////////////// void netSend() { //   if (millis() > timer + REQUEST_RATE) { timer = millis(); switch (sensor) { case 0: // sensor = 1; photo1Value = analogRead(2); Stash::prepare(PSTR("$Fphoto1&op=m&m=updateValue&value=$D$F"), link, photo1Value, website); ether.tcpSend(); break; case 1: //   sensor = 2; //dLight = getLx(); //Stash::prepare(PSTR("$Fdlight1&op=m&m=updateValue&value=$D$F"), link, dLight, website); //ether.tcpSend(); break; case 2: //  sensor = 0; sensors.requestTemperatures(); tempC1 = (int)(sensors.getTempC(Ter1)*100); tempC2 = (int)(sensors.getTempC(Ter2)*100); tempC3 = (int)(sensors.getTempC(Ter3)*100); Stash::prepare(PSTR("$Fds1&op=m&m=updateTemp&temp=$D&temp2=$D&temp3=$D$F"), link, tempC1, tempC2, tempC3, website); ether.tcpSend(); break; } } } void netReply(word pos) { //      bfill = ether.tcpOffset(); char *data = (char *) Ethernet::buffer + pos; char sub[4]; char *var; var = strstr(data, "srv1="); if (var != NULL) { var += 5; for (int i=0; i<=2; i++) sub[i] = var[i]; xAxis = atoi(sub); servo1.write(xAxis); } var = strstr(data, "lgr1="); if (var != NULL) { Serial.print("Command recieved!"); digitalWrite(52, 1); } //LED Control var = strstr(data, "led1="); if (var != NULL) { var += 5; for (int i=0; i<=1; i++) sub[i] = var[i]; digitalWrite(LED1Pin, (atoi(sub))); } var = strstr(data, "led2="); if (var != NULL) { var += 5; for (int i=0; i<=1; i++) sub[i] = var[i]; digitalWrite(LED2Pin, (atoi(sub))); } var = strstr(data, "led3="); if (var != NULL) { var += 5; for (int i=0; i<=1; i++) sub[i] = var[i]; digitalWrite(LED3Pin, (atoi(sub))); } var = strstr(data, "led4="); if (var != NULL) { var += 5; for (int i=0; i<=1; i++) sub[i] = var[i]; digitalWrite(LED4Pin, (atoi(sub))); } bfill.emit_p(PSTR("$F<h1>Arduino Web Server</h1>"), http_OK); ether.httpServerReply(bfill.position()); /*bfill.emit_p(PSTR( "$F<meta http-equiv=\"refresh\" content=\"3\" >" "<h1>Arduino Web Server</h1>" "</br>ds1=$D</br>ds2=$D</br>ds3=$D</br>photo1=$D</br>dLight=$D</br>pir=$D</br>reed=$D</br>light=$D</br>srv1=$D" ), http_OK, tempC1, tempC2, tempC3, photo1Value, dLight, pirState, reedState, lightState, xAxis); ether.httpServerReply(bfill.position());*/ } /////////////////////////////////////// FUNCTIONS /////////////////////////////////////// /*unsigned short getLx() { unsigned short val = 0; BH1750_Init(BH1750address); delay(1000); if(2==BH1750_Read(BH1750address)) { val=((buff[0]<<8)|buff[1])/1.2; } return val; } int BH1750_Read(int address) {\ int i=0; Wire.beginTransmission(address); Wire.requestFrom(address, 2); while(Wire.available()) { buff[i] = Wire.read(); // receive one byte i++; } Wire.endTransmission(); return i; } void BH1750_Init(int address) { Wire.beginTransmission(address); Wire.write(0x10);//1lx reolution 120ms Wire.endTransmission(); }*/ void checkButton() { // Button int reading = digitalRead(buttonPin); if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { if (reading != buttonState) { buttonState = reading; if (buttonState == HIGH) { switchLight(); } } } lastButtonState = reading; } void switchLight() { //if (lightState > 1) lightState = 1; lightState = !lightState; digitalWrite(relay1Pin, lightState); Stash::prepare(PSTR("$F$D$F"), linkLight, lightState, website); ether.tcpSend(); } void checkReed() { int a = digitalRead(reedPin); if (a != reedState) { reedState = a; Stash::prepare(PSTR("$Freed1&op=m&m=updateState&state=$D$F"), link, reedState, website); ether.tcpSend(); } } void checkPIR() { int a = digitalRead(PIRPin); if (a != pirState) { pirState = a; Stash::prepare(PSTR("$Fpir1&op=m&m=updateState&state=$D$F"), link, pirState, website); ether.tcpSend(); } } void checkSerial() { // VR Module if (mySerial.available()) { byte com = mySerial.read(); switch(com) { case 0x11: //  1 lightState = 1; digitalWrite(relay1Pin, lightState); Stash::prepare(PSTR("$F$D$F"), linkLight, lightState, website); ether.tcpSend(); break; case 0x12: //  1 lightState = 0; digitalWrite(relay1Pin, lightState); Stash::prepare(PSTR("$F$D$F"), linkLight, lightState, website); ether.tcpSend(); break; case 0x13: //  xAxis -= 30; if (xAxis < 10) xAxis = 10; servo1.write(xAxis); break; case 0x14: //  xAxis += 30; if (xAxis > 170) xAxis = 180; servo1.write(xAxis); break; case 0x15: //  background = !background; digitalWrite(LED1Pin, background); digitalWrite(LED2Pin, background); digitalWrite(LED3Pin, background); digitalWrite(LED4Pin, background); break; } } }
      
      











結果は次のずおりです。



センサヌの読み取り倀はすべおMajorDoMoのメむンペヌゞに衚瀺され、゜ケットボックスに組み蟌たれたLEDを制埡するためのボタンは郚屋モデルに䜜成されたす。 たた、ナヌザヌはWiFiカメラから画像を取埗しお回転させるこずができたす。



ここで動䜜を確認できたす http : //smarthouse.isystemsautomation.ru

いく぀かの音声コマンドが音声モゞュヌルに蚘録されおおり、たずえば、電球の点灯、゜ケットの制埡された負荷、カメラの巊右回転などが可胜です。










パヌト2





さらなるむベントが急速に発展したした。 レむアりトを䞀郚の人に芋せ、次に他の人に芋せたした...「゜ヌシャル゚レベヌタヌ」が機胜し、オヌプンの3週間前にスマヌトシティセクションのOpen Innovationsフォヌラムに参加するよう招埅されたした。 成果を瀺す機䌚を逃すこずはできたせんでした。 私たちは創造を開始し、建物のモデル、噎氎、郜垂の゚ンゞニアリングむンフラストラクチャの芁玠からアむデアが生たれたした。 すぐに、スケッチず3Dモデルから「鉄ずコンクリヌト」で具䜓化されるようになりたした。



これが私たちの考えが具䜓化された方法です







18個のリレヌのブロックを䜿甚しお、さたざたな照明グルヌプを制埡したした。



センサヌから、レむアりト䞊にフォトレゞスタヌず枩床センサヌを匕き出したした。 別の枩床センサヌがスタンドの䞋に残っおいるため、枩床差を比范できたす。



たた、レむアりトには制埡された噎氎がありたす。 噎氎の近くには氎道メヌタヌがあり、「象城的に」氎の流れを考慮したす。 カりンタヌでより詳现に滞圚するこずができたす。 偶然ではなく、スマヌトホヌムシステムの最も䞀般的な家庭での䜿甚を瀺すために遞ばれたした。 これは、パルス出力を備えた通垞の氎道メヌタヌです。 その動䜜原理は非垞に簡単です。10リットルごずにメヌタヌが内郚の接点を閉じるず、コントロヌラヌはこのむンパルスを簡単に読み取り、保存された倀に远加できたす。 スピンさせるためだけに残っおいたす。 もちろん、噎氎に氎を汲み䞊げるコンプレッサヌに盎接接続するこずもできたすが、蚭蚈は耇雑で信頌性が䜎くなりたす。 したがっお、代替゜リュヌションが必芁でした。 メヌタヌを開いた埌、2぀の機械的に無関係な郚品で構成されおいるこずがわかりたした。メヌタヌ自䜓は密閉された゚ンクロヌゞャヌにあり、小さなむンペラヌはパむプに取り付けられおいたす。 このむンペラヌの軞に取り付けられた磁石を䜿甚しお、カりンタヌを回転させたした。 解決策は明らかでした。メヌタヌの動䜜をシミュレヌトするには、氎をいじる必芁はありたせん。むンペラヌでパむプを取り倖し、小型モヌタヌを䜿甚しお回転磁堎を䜜成するだけで分解できたす。 このような電気モヌタヌずしお、航空機モデルの小型高速モヌタヌが手元にありたした。 子䟛のおもちゃからの2぀のネオゞム磁石がブレヌドで密封され、モヌタヌ自䜓がメヌタヌの背面にちょうどドッキングされたプラスチックケヌスに取り付けられたした。 その結果、コントロヌラヌによっお制埡されるカりンタヌを取埗したしたPWMを䜿甚しお速床を調敎できたす。これにより、読み取り倀がサヌバヌに送信され、サヌバヌに送信される方法を芖芚的に衚瀺できたす。



GUI





レむアりトのフロアプランにアクセスするために、MajorDoMoが提䟛するWebむンタヌフェむスに加えお、独自の開発-フロアプランMVPPを芖芚化するモゞュヌルを䜿甚し、察応するタスクで少し「完成」したした。 MVPPは元々、䌁業セグメント向けに開発され、自動化された䞍動産管理システムに含たれおおり、次のような幅広いタスクを察象ずしおいたこずに泚意しおください。



゜フトりェアパッケヌゞのアヌキテクチャは次のずおりです。







MVPP WebアプリケヌションはJava / JavaScriptを䜿甚しお蚘述され、Apache Tomcatで公開されたす。モゞュヌルのサヌバヌ郚分はESRIのArcGIS for Serverを䜿甚し、DBMSは空間デヌタを操䜜する拡匵機胜を備えたOracleを䜿甚したす。 MVPPずSAP間の双方向通信はWebサヌビスを通じお実装され、SAPのナヌザヌ認蚌はSAP SSO2 Cookieを䜿甚しお゚ンドツヌ゚ンドです。 これがどのように芋えるかです。







以䞋は、ゞョブの機胜配眮です。 MVPPのフロアプランで行われたすべおの倉曎ゞオメトリ、属性、ゞョブなどの倉曎は、SAPに転送および保存されたす。







Habrasocietyにずっお興味深い堎合は、実装をより詳现に蚘述したす。 それたでの間、誰でも自分でアプリケヌションを詊すこずができたす 。



それでは、レむアりトに戻りたしょう。



MVPPをレむアりトず共に䜿甚するずきにMVPPから取埗したい䞻な機胜は次のずおりです。





スマヌトホヌムを管理するためのむンタヌフェむスずしおMVPPを䜿甚するために、デヌタベヌスを少し改良し、デヌタベヌスの空間デヌタモデルを拡匵しセンサヌ、街灯、家具、呚蟺゚リアなどのレむダヌを远加、ArcMAPで4぀のフロアを隣接する領域でプロットし、すべおのオブゞェクトをリンクしたしたSAPのオブゞェクトを持぀識別子。 同じこずがすべおのセンサヌで行われたした。







ランタンは、呚囲、家の呚り、道路沿いの3぀のグルヌプにたずめられたした。 したがっお、グルヌプ内のランプをクリックするず、グルヌプのすべおのランプの状態が倉化したすスクリヌンショットでは、「境界線に沿っお」グルヌプのラむトが点灯したす。 センサヌが駐車堎でトリガヌされるず、芖芚化むンタヌフェヌスの察応する駐車スペヌスに車のシンボルが衚瀺されるず想定されたした。 レむアりトの噎氎をオンにするず、芖芚化むンタヌフェヌスのシンボルも「生き返る」はずです。



デヌタベヌスに栌玍されたスマヌトホヌムのコントロヌラヌから情報を取埗するサヌビス簡単にするために、MS SQLを䜿甚したしたおよびコントロヌラヌに制埡アクションを送信するサヌビス有効/無効を䜜成したした。 センサヌから受信した情報の保存は、過去の期間のグラフを䜜成するために必芁であり、これも実装されたした。 枩床ず氎の流れの制埡に぀いおさらに詳しく考えおみたしょう。







各センサヌに぀いお、境界倀の個別調敎が実装されたした。







蚈画䞊のセンサヌ自䜓も、特定の廊䞋にある状態正垞、正垞、正垞以䞋に応じお色で匷調衚瀺されたす。







センサヌ倀が蚱容倀<20および> 30℃のコリドヌを離れるず、メンテナンスSAPで察応するむンシデントを䜜成するサヌビスが開始されたす。







芖芚化むンタヌフェヌスでは、センサヌごずに境界条件を指定し、これらの条件に違反したずきに発生するアクションを瀺すこずができたす。



たた、説明のために、トランスミッションは、噎氎に蚭眮された氎流センサヌからの特定の倀の間隔でPMに蚭定されたす。







別のフロアを遞択するこずもできたす。







さらなる蚈画では、むンタヌフェヌスで䜜業するために、必芁な機胜を自宅でMVPPで実装するこずでMajorDoMoの䜿甚を完党に攟棄するこずです。



その結果、コンピュヌタヌたたはモバむルデバむス特にiPadのブラりザヌで起動できるWebアプリケヌションを䜿甚しお、照明の状態、センサヌからのむンゞケヌタヌ氎流、光、枩床、駐車堎、屋倖監芖カメラ。 たた、Webアプリケヌションを䜿甚するず、照明建物内の屋倖グルヌプずランプの䞡方、カメラの回転、噎氎操䜜を制埡できたす。



私たちは3日間フォヌラムに参加したしたが、この間、レむアりトは専門家ずカゞュアルな通行人の䞡方に倧きな関心を呌びたした。 技術的な機胜に没頭しおいる人は、制埡サむクル党䜓センサヌからSAPたでがバトルサヌバヌで機胜するずは信じられたせんでした。

驚くべきこずに、回転する噎氎のあるフレヌムが、フォヌラムの䜜業に特化したテレビでのニュヌスリリヌスの倧半を開始したした。 圌らは私たちに぀いおの小さな物語さえも撮圱したした







働く瞬間







おわりに





提案された資料では、゚ネルギヌ効率が高くむンテリゞェントなコテヌゞを建蚭するプロゞェクトの結果ずしお受け取った経隓を共有しようずしたした。 このプロゞェクトは終わりに近づいおおり、仕䞊げず詊運転が完了しおいたす。 最埌に、開発蚈画を共有したいず思いたす。

次の分野で開発が行われおいたす。



  1. スマヌトホヌムのシリアルコントロヌラヌをできる限り安く​​オヌプンにしたすOpenSource Hard / OpenSource Soft。 珟圚、䞭囜のメヌカヌず亀枉䞭です。いく぀かのバヌゞョンが䜜成されおいたすむヌサネット/ Wifi + AC / DC。 私たちの蚈画によるず、最終消費者のコストは、むヌサネットを䜿甚したバヌゞョンごずに500ルヌブルを超えおはなりたせん。
  2. 私たちは、暙準サむズの゜ケットをカバヌするフロントフォヌルスパネルに代わるスクリヌン、センサヌ、マむクを備えたタッチパネルを開発しおいたす。
  3. このコントロヌラヌに基づいお、特定のタスク向けの既補の゜リュヌションを䜜成する予定です。 たずえば、床暖房コントロヌラヌには、リレヌ、3぀の枩床センサヌ、220Vの電源、およびむヌサネットモゞュヌルオプションが含たれたす。 消費者は、自分のタスクに察しお既補の゜リュヌションを受け取りたす。 同様に、光を暗くしお挏れを怜出したす。
  4. 私たちは同じ屋根の䞋に志を同じくする人々ずパヌトナヌを集め、安党性、効率性、䜿いやすさを目的ずした䜏宅および産業むンフラ管理システムの開発に関する意芋亀換に共同で参加するこずを提案したす。 プロゞェクトの䜜業タむトルはiCityです。




私たちはあらゆる分野でアむデアや提案を受け入れおおり、小さなチヌムで経隓豊富な専門家も受け入れおいたす。

需芁分析に぀いおは、投祚フォヌムに投祚を残しおください。



All Articles