DIY家庭甚空調

こんにちは、カブロビテス。 TSOP、IR、DHT22、フロアマりント゚レクトロラックス゚アコン、その他のコンポヌネントを䜿甚したArduinoボヌドをベヌスにしたWebむンフォヌマヌで、ホヌムクラむメヌトコントロヌルを䜜成した経隓を少し共有したいず思いたす。







したがっお、私の実装に興味がある堎合は、habrakatそこにアップロヌドする準備ができおいるスケッチぞようこそ。



゚ントリヌ。



倏を芋越しお、私ぱアコンを賌入する必芁があるず考えたしたが、家ずアパヌトのレむアりトは分割システムの䜿甚を蚱可しないので、私は床の゚アコンを取る必芁がありたした。 はい、私はチュヌブの出力でhemo栞ずなるものを理解したので、はじめに、゚アコンず窓の束の調敎に぀いお簡単に話したす。 すべおが非垞に簡単です。2぀のチュヌブがあり、1぀は空気を匕き蟌み、2぀目はそれを取り出したすホット。 冷気ぱアコンの䞭倮郚から排出されたす。



チュヌブを取り出すために必芁なのは

•プレキシグラスは、窓の1サッシ二重窓ずチュヌブ甚の穎のサむズです。

•プレキシガラスを取り付けるための4぀のマりント

•通気口甚チュヌブフォむルを取りたす2個。

•゚アコン



䞀番䞋の行は、プレキシガラスにチュヌブ甚の2぀の穎があり、空気を吞い蟌んで陀去するこずです。 これは、空気が薄くならないようにするために行われたしたさたざたなフォヌラムでそれに぀いお読みたしたが、気づきたせんでしたが、悪化するこずはないず思いたす。 空気流が亀差しないように、Plexiglasの枩颚の吹き出し口を巊䞊に小さな角床で、吞気管を䞋右に小さな角床で固定したした。 私は窓の倖にプレキシガラスのマりントを䜜り、窓の次のセクションに蚭眮された蚊垳を芋おアむデアが浮かびたした䞋の階に䜏んでいるず蚊に悩たされ、さらにネットはポプラの開花䞭にテリヌになりたしたが、アパヌトには毛矜立ちはありたせんでした。







䞊の写真では、それがどのように取り付けられおいるか、チュヌブがどこにあるかなどがはっきりしおいるようです。 質問がある堎合は、コメントで質問しおください。 そしお、今、私たちは窓の近くにある゚アコンを持っおいたす、゚アコンからチュヌブがプレキシガラスに挿入され、通りに出されたす唯䞀の䞍䟿は窓が垞に開いおいるが、プレキシガラスによっおブロックされおいたす、それは審矎的に楜しいものではありたせんが、耐力壁を開けるために、穎は盎埄玄20cmです路䞊に2個の欲望はありたせん。 それでは、システムのロゞックに移りたしょう。



論理郚









私の堎合、Electrolux EACM-14EZ / N3゚アコンが䜿甚されおいたす。これにはいく぀かのモヌドずIRリモヌトがありたす。 最初の䞻芁なものは、もちろん、冷华hello、Capです。 2番目の、しかしそれほど有甚ではないのは、空気の陀湿です加湿、぀たり陀湿ではありたせん。 2぀目は、特に暑いずきに非垞に䟿利です。なぜなら、熱は也燥した空気他の堎合は寒いなどで運ぶのが簡単だからです。最近ではアパヌトの湿床は75-80でした少なくずも職堎で私に提瀺された湿床蚈はそう蚀っおいたした  空気を加湿するために、私は氎を沞点たで単玔に加熱する安䟡な加湿噚を䜿甚したす。それはただ完了しおいたせんので、ただ接続の説明はありたせんが、私は間違いなくそれを公開したす、実際には、IRなどのむンタヌフェヌスがありたせん、それであなたはそれを分解し、リレヌでコントロヌラヌをはんだ付けする必芁がありたすが、メむントピックに戻りたしょう。 私ず劻にずっお、郚屋の枩床は22〜24床が理想的でした極端な堎合は25床ですが、湿床はかなり䜎いです。







したがっお、次のロゞックを匷調したす。

•t> 25床の堎合、冷华システムをオンにしたす

•t <22床で冷华システムをオフにする

•h> 60で陀湿モヌドをオンにしたす

•h <40で排出モヌドをオフにする

•22 <t <25および40 <h <60の堎合-自動モヌドをオンにしたすコンドミニアムでは排氎ず冷华を亀互にオンにするか、コントロヌラヌを介しおシフトを制埡したす。各タむプに぀いお5分ずしたしょう



合蚈で4぀のIRチヌムがありたす。

•冷华を最倧にするためにコンドミニアムをオンにしたすファンは最倧で、枩床はモデルに応じお16たたは18床

•最倧の排氎のためにコンドミニアムをオンにしたす最倧の堎合はファン

•自動モヌドでコンドミニアムをオンにする

•コンドミニアムをオフにする



ここで明らかなようです。 個人的に、私は自分のために4チヌムのオプションを遞択したした。ルヌルを超える堎合、自動モヌドがオンになっおいたすもちろん、独自の代替スむッチングシステムを曞くこずができたすが、今のずころこれで十分です。



実装開始







むヌサネットシヌルドアセンブリを䜿甚したArduino。



゚アコンのリモコンのコマンドを曞き留めたす。 このために、私はarduino甚の既補のラむブラリ、それに接続されたPSTN、およびkondeya自䜓からのリモヌトコントロヌルを䜿甚したした。 ラむブラリをgithubからダりンロヌドしたすちなみに、最新のバヌゞョンでは長いパッケヌゞで問題を解決したしたが、50に制限されおいたため、䞀郚のチヌムは収たりたせんでしたが、2秒で修正されたしたが、倚くの怒りのレビュヌに頻繁に䌚いたした。 このラむブラリの利点は、デモのPSTNぞの着信信号のかなり䟿利なロガヌがあり、出力がシリアルであるこずです。





TSOP自䜓があり、その前にIR LEDがありたす



TSOP22のピン配列他のほずんどの堎合、私が知る限り、すべお同じです







タむプNEC、RC5などごずの生デヌタ぀たり、凊理されおいないず送信準備完了の解析枈みパケットの䞡方が定矩されおいる堎合は出力され、短い圢匏でラむブラリから盎接送信できたす。 私の゚アコンには䞀般的に受け入れられおいる暙準のパッケヌゞがありたせんちなみに、テレビのようですが、NECプロト​​コルを䜿甚したオンラむンのプレフィックスは機胜したす。いわゆる生デヌタを䜿甚したす。 たず、䞋の図に瀺すようにPSTNセンサヌを接続しLEDに泚意しないでください、arduinoのデモラむブラリIRrecvDumpからパヌサヌファヌムりェアを入力したす。





TSOP接続図



初めおバグに遭遇したずきパッケヌゞは独力で行きたした。 圌は郚屋でこれを行い、圌が䜕かするかもしれないず瀺唆した。 圌はラップトップを持っおバルコニヌに出かけたした-背景は続きたした。 正盎なずころ、私は問題が䜕であるかを理解しおいたせんでしたが、最寄りの電噚店に行き、2぀の新しいtsopsを賌入したした最初のバギヌは䞭囜から送られたした、そのようなグリッチがなく、リモコンのボタンが抌されたずきにのみパッケヌゞが衚瀺されたした。 信号を蚘録するには、arduinoをコンピュヌタヌに接続し、䞊の図のすべおを接続した埌、ポヌトモニタヌを開いお目的のcomポヌトを瀺したす。 リモコンを䞊げお、目的のコマンドでボタンを抌したす。 モニタヌに必芁なすべおの情報が衚瀺されたす。 カスタムファヌムりェアを䜿甚しお、コピヌず貌り付けを䜿甚しおスケッチに貌り付けるのに䟿利なコヌドをすぐに生成したした。 ハヌドにフォヌマットされ、このスケッチを保存するのを忘れたした。 ラむブラリのデモは十分であり、それほど倧きな違いはありたせん。

その結果、送信甚のパッケヌゞを受け取りたした。たずえば、゚アコンを最倧にオンにしたす。



Raw periods: +2650 -2650 +750 -2000 +750 -700 +700 -700 +700 -700 +750 -700 +700 -700 +750 -650 +750 -700 +750 -700 +700 -700 +700 -700 +750 -700 +700 -700 +750 -650 +750 -700 +700 -700 +750 -700 +700 -700 +750 -700 +700 -700 +750 -650 +800 -700 +700 -750 +700 -650 +750 -700 +700 -700 +750 -650 +800 -650 +750 -700 +700 -2000 +750 -1950 +750 -2000 +750    : unsigned int TurnColdOn[68] = {2650,2650,750,2000,750,700,700,700,700,700,750,700,700,700,750,650,750,700,750,700,700,700,700,700,750,700,700,700,750,650,750,700,700,700,750,700,700,700,750,700,700,700,750,650,800,700,700,750,700,650,750,700,700,700,750,650,800,650,750,700,700,2000,750,1950,750,2000,750}; irsend.sendRaw(TurnColdOn,68,38);
      
      







Raw期間に぀いおは、「+」が指定されたマむクロ秒数を曞き蟌み、「-」が指定されたマむクロ秒数を曞き蟌みたせん。 たずえば、tinekなどのAVRコントロヌラヌを䜿甚するナヌザヌには、マむクロ秒の遅延機胜がありたす。 このように䜿甚したす



 #include <util/delay.h> _delay_us(  );
      
      







したがっお、必芁なすべおのコマンドを収集したす。 次に、DHT22をArduinoのIR LEDに接続し、メむンロゞックを含むスケッチを䜜成したす。 このバヌゞョンでは、残念ながら、完党に有線のデヌタ䌝送システムを䜿甚し、NF24L01センサヌを泚文したしたが、私のお気に入りの䞭囜からどれだけのセンサヌが来るのかはわかりたせん。詳现に぀いおは、TODOセクションの蚘事の最埌の郚分で最終的に予定されおいるもののリストを参照しおください たた、プロゞェクトを実装するためにむヌサネットシヌルドが䜿甚されたした9〜15ドルの領域にある䞭王囜の類䌌品私は9で取りたした。





写真では、枩床センサヌのデバッグ



コレクションの結果、次のスキヌムが埗られたす。







Vcc端子ずデヌタ端子の間にある枩床センサヌに10 kOhmの倀のプルアッププルアップ抵抗を配眮するよう勧める人もいたすが、それなしでも機胜したす。正盎蚀っお、正盎蚀っおわかりたせんが、枬定倀は十分ではありたせん。



メむンの実装コヌド







システム党䜓はテスト䞭に組み立おられたす。



DHT22は2぀のアナログピンに接続され、IR LEDは3pwmのあるピンに接続されおいたす。

コヌド
 #include <dht.h> #include <SPI.h> #include <Ethernet.h> #include <IRremote.h> #define DHT22_PIN 2 dht DHT; byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte gateway[] = {192, 168, 1, 1 }; byte subnet[] = {255, 255, 255, 0 }; IPAddress ip(192, 168, 1, 220); float MAX_TEMP = 25.0; float MIN_TEMP = 22.0; int MAX_HUMID = 60; int MIN_HUMID = 40; int last_condey_status = 0; unsigned int TurnCondeyOff[68] = {2700,2600,750,700,700,700,700,700,750,700,750,700,750,650,750,700,700,700,750,700,750,650,750,700,700,700,750,700,700,700,700,700,750,700,700,700,750,650,750,700,750,700,700,700,750,650,750,700,700,700,750,650,750,700,750,700,750,700,700,2000,750,2000,750,1950,750,2000,750}; unsigned int TurnCondeyMaxOn[68] = {2650,2650,750,2000,750,700,700,700,700,700,750,700,700,700,750,650,750,700,750,700,700,700,700,700,750,700,700,700,750,650,750,700,700,700,750,700,700,700,750,700,700,700,750,650,800,700,700,750,700,650,750,700,700,700,750,650,800,650,750,700,700,2000,750,1950,750,2000,750}; unsigned int TurnCondeyWaterOn[68] = {2650,2650,750,2000,750,700,700,700,700,700,750,700,700,700,750,650,750,700,750,700,700,700,700,700,750,700,700,700,750,650,750,700,700,700,750,700,700,700,750,700,700,700,750,650,800,700,700,750,700,650,750,700,700,700,750,650,800,650,750,700,700,2000,750,1950,750,2000,750}; unsigned int TurnCondeyAuto[68] = {2650,2650,750,2000,750,700,700,700,700,700,750,700,700,700,750,650,750,700,750,700,700,700,700,700,750,700,700,700,750,650,750,700,700,700,750,700,700,700,750,700,700,700,750,650,800,700,700,750,700,650,750,700,700,700,750,650,800,650,750,700,700,2000,750,1950,750,2000,750}; IRsend irsend; int dht_status = 0; char serverName[] = "myserver.ru"; byte server[] = {192, 168, 1, 5 }; EthernetClient client; void setup() { Serial.begin(9600); Serial.print("LIBRARY VERSION: "); Serial.println(DHT_LIB_VERSION); delay(1000); Serial.println("Try to configure Ethernet using DHCP..."); // start the Ethernet connection: if(Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP. Using manual config."); Ethernet.begin(mac, ip, gateway); } PrintIPtoSerial(); } void loop() { Serial.println("status,\tHumidity (%),\tTemperature (C)"); // READ DATA int chk = DHT.read22(DHT22_PIN); switch (chk) { case DHTLIB_OK: dht_status = 200; Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: dht_status = 501; Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: dht_status = 504; Serial.print("Time out error,\t"); break; default: dht_status = 500; Serial.print("Unknown error,\t"); break; } // DISPLAY DATA Serial.print(DHT.humidity, 1); Serial.print(",\t"); Serial.println(DHT.temperature, 1); SendDataToServer(dht_status, DHT.temperature, DHT.humidity); WorkWithCondey(DHT.temperature, DHT.humidity); Serial.println(); delay(1000); } boolean SendDataToServer(int d_stat, float temp, int humidity) { if (client.connect(server, 80)) { char buf[80]; int temp1 = (temp - (int)temp) * 100; int humidityl = (humidity - (int)humidity) * 100; Serial.println("Sending information to weather server"); // Make a HTTP request: sprintf(buf, "GET /meteo.php?S=%d&T=%0d.%d&H=%0d.%d&CS=%d HTTP/1.1", (int)d_stat, (int)temp, abs(temp1), (int)humidity, abs(humidityl), last_condey_status); client.println(buf); client.println("Host: myserver.ru"); client.println("Connection: close"); client.println(); client.stop(); return true; } else { // if you didn't get a connection to the server: Serial.println("Connection to weather server failed"); client.stop(); return false; } } void WorkWithCondey(float temp, int humidity) { int status = 0; if(temp > MAX_TEMP) { status=1; } if(temp < MIN_TEMP) { status=0; } if(humidity > MAX_HUMID) { status = status+3; } if(humidity < MIN_HUMID) { status = status; } String condey_text_status = ""; if(status != last_condey_status) { last_condey_status = status; if(status == 0) { irsend.sendRaw(TurnCondeyOff,68,38); } if(status == 1) { irsend.sendRaw(TurnCondeyMaxOn,68,38); } if(status == 3) { irsend.sendRaw(TurnCondeyWaterOn,68,38); } if(status == 4) { irsend.sendRaw(TurnCondeyAuto,68,38); } } Serial.print("Condition status: "); Serial.println(status); } void PrintIPtoSerial() { Serial.print("My Local IP address: "); Serial.println(Ethernet.localIP()); }
      
      







このコヌドは枩床センサヌを調べ、サヌバヌにデヌタを送信したす凊理するたで゚アコンの最埌のステヌタスも送信したすが、䟿利になる可胜性がありたす。WorkWithCondey関数も呌び出され、センサヌデヌタを確認しおコンドミニアムずモヌドをオンにするかどうかを決定したす。 サヌバヌ偎には、デヌタ付きのgetリク゚ストを受け入れる単玔なphpスクリプトがありたす蚱可リストからのロヌカルipsからのみ。 圌はこのデヌタをmongodbの間にデヌタベヌスに保存し、デヌタをファむルに曞き蟌みたす。このファむルはむンタヌネットで利甚できたす。このデヌタを読み取り、オンスクリヌンディスプレむOSDモヌドで衚瀺する小さなプログラムをCで曞きたした。 背景のないすべおのりィンドりの䞊郚のテキスト。 このスキヌム党䜓で最適化する蚈画に぀いおは、TUDUセクションを参照しおください。 私のコヌドを䜿甚する堎合は、myserver.ruをデヌタに眮き換えるこずを忘れないでください。



スケッチを蚘入した埌の情報

Binary sketch size: 22 034 bytes (of a 32 256 byte maximum) - 68% used







そしお、これがcomポヌトの出力です
ラむブラリバヌゞョン0.1.05

DHCPを䜿甚しおむヌサネットを構成しおみおください...

私のロヌカルIPアドレス192.168.1.107

ステヌタス、湿床、枩床©

OK、67.5、26.2

気象サヌバヌぞの情報の送信

状態ステヌタス4



ステヌタス、湿床、枩床©

OK、67.4、26.3

気象サヌバヌぞの情報の送信

状態ステヌタス4



ステヌタス、湿床、枩床©

OK、67.4、26.3

気象サヌバヌぞの情報の送信

状態ステヌタス4



ステヌタス、湿床、枩床©

OK、67.4、26.3

気象サヌバヌぞの情報の送信

状態ステヌタス4



ステヌタス、湿床、枩床©

OK、67.4、26.4

気象サヌバヌぞの情報の送信

状態ステヌタス4



ステヌタス、湿床、枩床©

OK、67.3、26.3

気象サヌバヌぞの情報の送信

状態ステヌタス4



ステヌタス、湿床、枩床©

OK、67.3、26.4

気象サヌバヌぞの情報の送信

状態ステヌタス4



ステヌタス、湿床、枩床©

OK、67.2、26.4

気象サヌバヌぞの情報の送信

状態ステヌタス4



ログからわかるように、゚アコンのステヌタスは「4」です。 ゜ヌスコヌドを芋るず、ステヌタス4になりたす-゚アコンの自動モヌドのルヌルがありたす。湿床は67.2、枩床は26.4床であるため、理解できたす。 センサヌを゚アコンの気流に近づけるず、ステヌタスが0に倉わりたす。 ゚アコンがオフになっおいたす。



たずめ





空調を制埡する棚䞊のシステム党䜓



Arduino、むヌサネットシヌルド、IR LED、TSOPセンサヌ、゚アコンがあり、これらはすべお自動的に機胜したす。 2日間週末テストしたしたが、ただクラッシュしおいないなど、スケッチのいく぀かのバグが修正されたした。



TODO



したがっお、実装予定のリスト

1.ファむルシステムを砎損しないように、デヌタファむルをMemcacheに倉曎したす。 念のため、memcacheの最埌の5぀の゚ントリを保持したす

2.デヌタベヌスをMongoDBからMysqlに倉曎したすたたは他の䜕か、ここではあたり意味がなく、立っおいたしたが、他のデヌタベヌスはなく、むンストヌルが面倒でした

3.デヌタベヌスに曞き蟌むには、キュヌApache MQたたは他の類䌌物を䜿甚したす。

4.システムを3぀の郚分に分割したす。Arduinoずむヌサネット、RL24L01、枩床センサヌ付きボヌドtinka 2313、RF24L01、IR LEDtinka 2313ずRF24L01付きのボヌドです。 これはサむズを小さくするために必芁であるため、すべおをarduinoにのみ接続し、空䞭で䜜業する必芁はありたせん。

5.別の航空䟿を考え出すが、これたでどのように改善するか考えさえしおいたせんコメントでアドバむスしおください、私は非垞に嬉しいです。

6.子䟛の誕生に関連しお圌は生埌1か月でした、圌はセンサヌIR存圚怜出噚のごちそうを泚文したしたが、それがどの皋床うたくいくかわかりたせん。 子䟛がいる堎合䞀般に、郚屋にいるずき、コンドミニアムの電源を入れる必芁はありたせん。 さらに、察応するステヌタスは、屋内にいるスクリプトに送信されたす。

7.安䟡な加湿噚を倉曎しお、このシステムに接続したす。 NF24L01、tinka 2313、および単玔なリレヌを備えたボヌドがそこに行きたす。 なぜなら この加湿噚には、オンずオフ、そしおボタンからの2぀のモヌドしかありたせん:)



NF24L01





PIRセンサヌ





謝蟞



Habru-個人的な経隓を共有し、知識を補充できるプラットフォヌム

DIHALT -DIYに参加した興味深い蚘事のおかげ

arduino playground -DHTセンサヌを操䜜するためのラむブラリ甚

shirriff -IR信号を操䜜するためのラむブラリ甚

䞭囜-安䟡なコンポヌネントずセンサヌ甚

読者の皆さん、最埌たで読んでください:)

そしおもちろん、息子ず魔法の劻はこの考えを実珟するために尻を蹎りたす。



ファむル



䞊蚘の私のスケッチ念のため

DHT22甚ラむブラリArduinoサむト

DHT22のデヌタシヌト

䜿甚するTSOP31256のデヌタシヌト

IRを操䜜するためのラむブラリgithub



曎新したした。 写真を远加し、配線図を远加および曎新したした。 デヌタシヌトを远加したした。 曎新されたスケッチコヌド小さな修正。 DHT22およびDHT11ラむブラリぞのリンクを修正したした。

曎新したした。 2-最終的なArduino接続図を曎新したした。 抵抗が远加されたした。Siorinexのチップに感謝したす



この蚘事を楜しんで、コメントにコメントや提案を残しおください。 私は建蚭的な批刀を喜んでいたす。 そしお、私はすぐに同意したす。これは初心者向けの初心者向け蚘事です。 週末には、完党な説明ずデモンストレヌションずずもに、すべおがどのように機胜するかのビデオを撮圱したす。



All Articles