スマヌトルヌムの基盀、たたはArduinoがホステルに䜏む方法



こんにちは、habrozhiteli 毎日Habrを読んで、Arduinoずそれに基づいたDIYプロゞェクトに関する蚘事に繰り返し出くわしたした。 ゚レクトロニクスずは䜕の関係もないこずは泚目に倀したす。私の経隓はすべお、10代のクラブ「スパヌク」ペトロザノォヌツクに基づいたラゞオクラブを蚪れたこずです。 ひずたび集たっお、スマヌトフォンBT接続甚のセンサヌ枩床、圧力、パルスを備えたArduinoブレスレットを䜜るこずにしたしたが、泚文時に゚ラヌを犯した埌、Arduinoず圧力センサヌのみを受け取りたした。 ボヌドをテストするために、LEDの最寄りの無線コンポヌネントストアに行き、そこで磁気ドア閉センサヌで目を匕きたした。 圌は郚屋の生掻を少し改善するこずができるだろうずいう考えを䞎えおくれたしたアパヌトず混同しないように。 時間を無駄にするこずなく、私はアリずたくさんのセンサヌずArduino Megaを泚文したした。



玳士甚のセンサヌセット枩床、湿床、リレヌ、StarterKit、BT、時蚈、レンゞメヌタヌ、IRセンサヌを泚文した埌、他の人がどのようにスマヌトホヌムを代衚するかを探すこずにしたした。 ほずんどは、シャンデリアず床䞋暖房の制埡に限定されおいたしたが、 本圓にクヌルな蚘事がありたした 。 郚屋のアパヌトにありふれた機胜のいく぀かは単に䞍芁でした。たずえば、ガス挏れや挏れ怜出噚などです。 スマヌトルヌムで必芁な機胜を自分でコンパむルするこずにしたした。







必芁なセンサヌはすべお泚文枈みであり、埅぀こずしかできないこずが刀明したした。 そしお今、すべおのセンサヌが来たした



最初のステップ



既にLEDで点滅し、スマヌトホヌムを構築するこずに決めた堎合、郚屋の明かりを点滅させるこずは論理的なステップですが、初期の熱により枩床を制埡し始めたした。 たず、StarterKitaからdht11を接続しおみたした。 むンタヌネットに指瀺がたくさんある堎合、䜕がより簡単になるでしょうか 刀明したように、dht11を接続するための倚くのラむブラリがあり、それらのすべおがIDEの最新バヌゞョンず互換性があるわけではありたせんが、数時間埌にコン゜ヌルに衚瀺される枩床を賞賛し、数分埌にはそれに応じおLEDが点滅したす。 センサヌをオフにし、冷蔵庫に入れ、冷蔵庫から取り出し、接続したす...



最初の問題は、遞択したdht11の粟床が䜎いこずでした。䞡方向に2〜3床暪たわっおいたため、亀換する必芁がありたしたその埌、いく぀かのバヌゞョンでセンサヌを泚文しようずしたした。



それから私はLeroyMerlinに行き、そこで最も簡単なファンを賌入したした 。 ワむダずプラグで数分間隒ぎ立おた埌、ファンが組み立おられたした。 隣人ず䞀緒に、圌らは窓を取り倖しお、空いおいる堎所にそれを蚭眮したした隣人ではなくファン。 プラグを゜ケットに差し蟌み、...ファンが回転し始めたした。 ゆっくり。 ずおも遅い。

蚀うたでもなく、プラグを誀っお取り付け、ファンが颚から回転したしたか







もちろん、手動での電源オフも可胜です。 しかし、リレヌを介しおファンを制埡する最良の方法は䜕ですか ファンに盎接接続したすか コンセントを介しおファンをリレヌに接続するこずにしたした。これにより、システムに柔軟性が䞎えられたすファンを別のものに亀換できたす。



換気詊隓



そしお、ここでコヌドはLEDからリレヌに曞き換えられたす。 ファヌムりェアが読み蟌たれ、必芁な開始を芋越しお枩床を監芖したす-ここでその瞬間です リレヌがクリックされ、COMポヌトが消えたす。 どうやら、切り替え時に、USBの負荷が増加し、デヌタが干枉したす。 最初は220Vワむダからの干枉によるものだず思っおいたしたが、ボヌドから十分な距離にありたす。 その埌、これにより倚くの問題が発生したした。新しいスケッチをアップロヌドしようずするず、Arduinoが再起動し、リレヌを切り替えお、COMポヌトを削陀するため、曎新プロセスが発生したす。 私はこの問題を克服できたせんでした。



リモコン



もちろん、ファンの絶え間ない動䜜はすぐに退屈し、スむッチを介しおファンをオフにするこずはクヌルではありたせんでした そこで、そこからスタヌタヌキットずリモコンを取り出したした。 実際、この瞬間から問題が始たりたした。受信機がどのように芋えるかわかりたせんでした。 しかし、数分間のグヌグル怜玢でそれを芋぀けるこずができ、さらに1時間埌、リモヌトコントロヌルからファンを制埡するのが楜しくなりたした。



最初はいく぀かのフラグを持぀耇雑なアルゎリズムでしたが、最終的には小さなものになりたした
タむマヌアルゎリズム
Ifシグナルが来た{

manual_time = 1800;

fan_mode = fan_mode;

}

Ifmanual_time= 0{

manual_time--;

}それ以倖の堎合{

If枩床<26{

fan_mode = false;

}それ以倖の堎合{

fan_mode = true;

}

}


しかし、ここでは問題がなかったわけではありたせん。ワむダを曎新し、5VをDATAに印加するず、すぐにレシヌバが倱われたした。 これにより私は次のステップに進みたした...



BTモゞュヌルによる管理



すぐに、HC-06 BTモゞュヌルを接続し、そこに出力をリダむレクトし、コマンド読み取りを远加したした。 もっず難しいず思ったが、robocraftの蚘事のおかげだ。



刀明した






隣人ずファン



スマヌトフォンからシステムを制埡する方法を隣人に教えるこずで、「ちょっず、寒い」ずいう問題を解決できるず思いたしたが...スむッチでファンの電源を切るこずができれば、窓を閉めるのは倢䞭になりたす。 なんで ファンは数センチの距離でガラスに吹き蟌み、ひどくすり枛った。 幞いなこずに、私は磁気センサヌが散らばっおいたので、システムを䜜成するように促されたした。 閉じたセンサヌは、ファンをオンにできないこずをArduinoに通知したす。 悲しいかな、時々干枉があったので、私は簡単なチェックをしなければなりたせんでした近い信号が連続しお数回来た堎合-りィンドりは本圓に閉じおいたす。







調光



これで、ラむトを制埡するこずができたした。 ファンの埌、耇雑なものは䜕もありたせんボックス、䞀察の端子ブロック-そしお、光はすでにArduinoによっおすでに制埡されおいたすもちろん、叀いスむッチでオフにする機胜もありたす。 唯䞀心配なのは、 リレヌが電球を制埡する最良の方法ではないずいうこずです。



音の問題



さお、叩かないで調光ずは䜕ですか マむクを泚文したした。 だから私は思った...未経隓を芚えおいたすか 実際、手動でしきい倀を蚭定したサりンドディテクタヌを泚文したした。 それは私の目的に適しおいるようですか しかし、いく぀かの「しかし」が珟れたした。







コン゜ヌルリタヌン



少しグヌグルで店に行くず、燃え尜きたVS1838Bの代わりに、より信頌性の高いTSOP1836を賌入したした。 今回はむンストヌルが成功し、すべおがすぐに機胜したした。







通りに出る



私は窓を理解したしたが、その背埌には䜕がありたすか はんだごおで歊装し、雚センサヌず別のdht11を5メヌトルのVGAケヌブルにはんだ付けしたした。 いく぀かのU字型の留め具、黒い電気テヌプ、コケ、およびシステムは譊告を発したす。







たた、ロシア語のテキストを衚瀺できるこずも孊びたした。



になっおいたす






少し䟿利



スマヌトフォンは垞に手元にあるように芋えたすが、それが芋぀かるたで接続しおください...スむッチを介しおラむトやファンをオフにする方が速い堎合がありたすが、これによりArduino経由の制埡が䞍可胜になりたすパルスリレヌは高䟡すぎるので、2぀の普通のボタンを远加したした。



ちょっずしたセキュリティ



寮の技術者に火灜譊報噚がない堎所はどこですか 経隓の浅い私は煙ではなく、火灜探知機を賌入したした。 30 cmたでの距離で燃えおいるマッチを決定するこずは、もちろんクヌルですが、十分ではありたせん。 したがっお、これたでのずころ私はそれなしでやった。



ホステルの火灜譊報噚ずいえば......


  • 時にはサむレンやガラガラず鳎るスピヌカヌ
  • ロヌカル煙探知機
  • ネットワヌク煙探知噚コントロヌルパネルに接続




䞀般的なビュヌ







コンピュヌタケヌスぞの配眮には、短絡を匕き起こす胜力ずいう倧きな欠点がありたす。 そのため、ボヌドはたもなく個人の棚に移動し、段ボヌルの代わりにHDDのケヌスから仮のケヌスがありたす。



スケッチコヌド



珟状
#include <IRremote.h>

#include <IRremoteInt.h>

#include <DS1302.h>

#include <DHT.h>

#define DHT_PIN 2 //枩床蚈のピン...

#define DHT2_PIN 52 //街路枩床蚈のピン...

#define RAIN_PIN 53 //雚センサヌのピン

#define RECV_PIN 3 // IRレシヌバヌを接続するピン

#define FAN_PIN 4 //リレヌ接続ピン

#define LAMP_PIN 5 //リレヌ接続ピン

#define SOUND_PIN A0 //マむク接続ピン

#define WINDOW_PIN A1 //りィンドりピン



#define LAMP_BUT_PIN 50 //マむク接続ピン

#define FAN_BUT_PIN 51 //りィンドりピン





#define DHTTYPE DHT11



#define TIMER_FAN 0

#define TIMER_WINDOW 1





IRrecv irrecvRECV_PIN;

decode_results結果;

intタむマヌ[2];

bool FAN_FLAG = false;

bool LAMP_FLAG = true;

int WINDOW_VAL = 0;



bool WINDOW_OPEN = false;

bool WINDOW_FLAG = false;

bool RAIN_FLAG = false;



char incomingByte;



DHT dhtDHT_PIN、DHTTYPE;

DHT dht2DHT2_PIN、DHTTYPE;



DS1302 rtc49、46、48;

void setup{

Serial1.begin9600;



rtc.haltfalse;

rtc.writeProtectfalse;

//rtc.setDOW(SUNDAY; //曜日を金曜日に蚭定したす

//rtc.setTime(0、37、40; //時間を0:37:00に蚭定したす24時間圢匏

//rtc.setDate(25、5、2014; //日付を5月25日に蚭定したす



タむマヌ[TIMER_FAN] = 0;

タむマヌ[TIMER_WINDOW] = 0;



pinModeRAIN_PIN、INPUT;

pinModeLAMP_BUT_PIN、INPUT;

pinModeFAN_BUT_PIN、INPUT;



pinModeFAN_PIN、OUTPUT;

pinModeLAMP_PIN、OUTPUT;



digitalWriteFAN_PIN、LOW;

irrecv.enableIRIn; //レシヌバヌをオンにしたす



dht.begin;

dht2.begin;

}

intボリュヌム;

void loop{

WINDOW_VAL = analogReadWINDOW_PIN; //磁気センサヌ

ifWINDOW_VAL> 950{

ifWINDOW_FLAG{

タむマヌ[TIMER_WINDOW] ++;

ifタむマヌ[TIMER_WINDOW]> 10{

WINDOW_OPEN = false;

}

} else {

WINDOW_FLAG = true;

}

} else {

WINDOW_OPEN = true;

WINDOW_FLAG = false;

タむマヌ[TIMER_WINDOW] = 0;

}



ifdigitalReadRAIN_PIN== HIGH{

RAIN_FLAG = true;

} else {

RAIN_FLAG = false;

}



ボリュヌム= analogReadSOUND_PIN;

ifvolume <40{

LAMP_FLAG =LAMP_FLAG;

}





ifdigitalReadLAMP_BUT_PIN== HIGH{

input_signal1;

}

ifdigitalReadFAN_BUT_PIN== HIGH{

input_signal0;

}



ifirrecv.decode結果

{

ifresults.value == 16750695//ボタンコヌド

{

input_signal0;

}

ifresults.value == 16756815//ボタンコヌド

{

input_signal1;

}

irrecv.resume; //次の倀を取埗したす

}

//Serial.println(rtc.getTime().hour;

//Serial.println(rtc.getTime().min;

Serial1.printrtc.getDOWStr;

Serial1.print "";

Serial1.printrtc.getDateStr;

Serial1.print "-";

Serial1.printlnrtc.getTimeStr;



ifSerial1.available> 0{

incomingByte = Serial1.read;

ifincomingByte == '0'{

Serial1.println「手動モヌド無効」;

input_signal0;

} else ifincomingByte == '1'{

Serial1.println「手動モヌドをアクティブ化」;

input_signal0;

} else ifincomingByte == '2'{

input_signal1;

}

}



float h = dht.readHumidity;

float t = dht.readTemperature;



ifisnant|| isnanh{

Serial1.println「内郚枩床蚈からの読み取り゚ラヌ」;

} else {

ifタむマヌ[TIMER_FAN] <= 0{

ift <26{

FAN_FLAG = false;

} else ift> 26{

FAN_FLAG = true;

}

} else {

タむマヌ[TIMER_FAN]-;

}

Serial1.print“湿床„;

Serial1.printh;

Serial1.println "\ t";

Serial1.print“枩床„;

Serial1.printt;

Serial1.println“ * C”;

}





ifタむマヌ[TIMER_FAN]> 0{

Serial1.print「手動モヌドはそのたたです„;

Serial1.printタむマヌ[TIMER_FAN];

Serial1.println「秒」;

} else {

Serial1.println「手動モヌドオフ」;

}

ifFAN_FLAG && WINDOW_OPEN{

digitalWriteFAN_PIN、HIGH;

Serial1.println「ファンオン」;

} else {

digitalWriteFAN_PIN、LOW;

Serial1.println「ファンオフ」;

}



ifWINDOW_OPEN{

Serial1.println「りィンドりが開いおいたす」;

} else {

Serial1.println "Window Closed";

}





ifLAMP_FLAG{

digitalWriteLAMP_PIN、HIGH;

} else {

digitalWriteLAMP_PIN、LOW;

}





h = dht2.readHumidity;

t = dht2.readTemperature;

Serial1.println "窓の倖";

ifisnant|| isnanh{

Serial1.println「街路枩床蚈からの読み取り゚ラヌ」;

} else {

Serial1.print“湿床„;

Serial1.printh;

Serial1.println "\ t";

Serial1.print“枩床„;

Serial1.printt;

Serial1.println“ * C”;

}

ifRAIN_FLAG{

Serial1.println「雚は降らない」;

} else {

Serial1.println "Rain";

}



Serial1.println "*****";

遅延100;

}



void input_signalint signal{

スむッチ信号{

ケヌス0

ifrtc.getTime。hour> 1 && rtc.getTime。hour <8{

タむマヌ[TIMER_FAN] = 1800;

} else {

タむマヌ[TIMER_FAN] = 18000;

}

FAN_FLAG =FAN_FLAG;



Serial1.println「ファン切り替え」;

䌑憩;

ケヌス1

LAMP_FLAG =LAMP_FLAG;

Serial1.println「ラむトスむッチ」;

䌑憩;

}

}



コヌドが倱敗した堎合



私は通垞閉じたリレヌを䜿甚しおいたす。 ぀たり、デフォルトではすべおがオンになっおいたす。Arduinoをネットワヌクから切断し、簡単なスむッチを䜿甚できたす。



開発蚈画



私がリストしたのは、真にスマヌトな郚屋の基瀎にすぎたせん。 結局のずころ、圌女のAIはすべお、枩床に応じおファンのオンずオフを切り替えおいたす。 郚屋をより快適で「自埋的な」ものにするために、次のこずを蚈画しおいたす。



目芚たし時蚈


システムにクロックを远加するず、次のアラヌムが順番に䞊んでいたす。 シグナルずしお、パむピッカヌ、点滅するラむト、ファンがオンになっおいるず想定しおいたす。 そしおもちろん、屋倖で雚が降った堎合は早期に目芚めたす移動速床は-10です。



そのようなモゞュヌルを䜿甚しお、SDカヌドにアラヌムを保存するシステムを远加したす 停電の堎合。



コンピュヌタヌおよびスマヌトフォン+りィゞェット䞊のアプリケヌション


スマヌトフォンやコンピュヌタヌから制埡できないスマヌトホヌムずは䜕ですか



私はこのようなものだず思う







なぜ無線LANではないのですか 高すぎる。



Arduino自身の食料を撀回する


コメントは䞍必芁だず思いたす。USBを焌き切る危険性ず、他のデバむスぞの絶え間ない干枉です。 さらに、ボヌドから特別なアダプタヌに電力を転送したいです。



電源コンセントを介したルヌタヌの管理


叀き良きAsus RT56Uは、特に倏には日光济が倧奜きです。 そのため、倜間に数時間自動シャットダりンしお、冷华できるようにしたす。



プレれンス監芖を远加


今では、叀き良き焊電型赀倖線センサヌずいく぀かの超音波距離センサヌがありたす。 これは単玔なプレれンス制埡には十分かもしれたせん。



郚屋には二人が䜏んでいたす。 それぞれ4぀の状態がありたす。







赀倖線センサヌは、郚屋の存圚ずゟヌンベッド/テヌブルの超音波の存圚を刀断し、出入りする人の数を監芖したす。



これにより、最も単玔なシナリオを実装できたす。







感光抵抗を远加


ゞャンルの叀兞郚屋の誰かが「コンピュヌタヌの」ゟヌンにいお、郚屋が暗い堎合に自動的に光を含める。



電気機械的ロックを远加し、より近くに


私はあなたのこずは知りたせんが、私はい぀もキヌを探すのが面倒なので、近接カヌドリヌダヌたたは指王センサヌず組み合わせお、電気機械匏ロックを本圓に取り付けたいです。 ホステルぞの入堎は電子パスを䜿甚しお行われたす-Arduinoの呚波数はわかっおいお、リヌダヌを簡単に泚文できたすが、カヌドは非垞に簡単に耇補できたす私自身はこのためのデバむスを持っおいたすので、時間が来たら、指王に集䞭するでしょう指。



隣人はしばしば台所/トむレ/颚呂に行き、ドアを閉めたせん。 私は玄関の前に座っおいたすが、通り過ぎる人が私のパンツを芋 、郚屋での凊分を熟考するのは奜きではありたせん。 このような状況では、ガむド付きクロヌザヌが最適な゜リュヌションになりたす。



りィンドりをアップグレヌドする


すでに曞いたように、枩床が特定の制限を超えるず、ファンがオンになりたす。 しかし、郚屋に誰もいなくお、枩床がすでに20を䞋回っおいる堎合はどうでしょうか。 りィンドりの開閉システムを远加したいず思いたす。 おそらく、単玔なモヌタヌず釣り糞でしょう。



電球を冷やしおオンにするず、爆発する可胜性が高いこずが知られおいたす。 したがっお、それは神経ず球根も節玄したす。



枩床制埡システムに察応しおいない電球








DHT11を亀換しおください


すでに曞いたように、センサヌなどは理解しおいたせん。 だから私は最初に手に入れた枩床センサヌdht11を買いたした。 ここで、郚屋をdht22、通りをdht21に眮き換えたす。 Dht22の誀差範囲は小さく、dht21には凍結枩床のサポヌトず、路䞊で重芁な保護ケヌスがありたす。 Street dht11はすでに迷子になり始めおいたした。



電気調光噚を远加する


郚屋の照明のレベルをスムヌズに調敎したいず思いたす。 スマヌトルヌムがない堎合は、単玔な調光噚を賌入しお吊り䞋げたすが、珟圚は珟圚のシステム内に存圚できる調光噚が必芁です。 残念ながら、220V、調敎可胜な5Vの調光噚は芋぀かりたせんでした。 これたでに思い぀いたのは、単玔な調光噚ずそれに接続されたモヌタヌだけです。



音声制埡


珟圚の管理方法に音声を远加したいず思いたす。 幞いなこずに、 このようなシステムが存圚したす。 もちろん、音声反応も察象になりたすが、これらは単玔な話者です。



賌入したセンサヌぞのリンク







あずがき



いく぀かの蚈画の最埌に新しい蚘事を曞くこずは可胜だず思いたすが、今のずころは電気機械匏ロックを倢芋お、セッションの準備をしたす。



玠晎らしい週末を過ごしたしょう利益を生むように過ごしたしょう



All Articles