Proses manufaktur
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 7 |
Lihat dua video di bawah ini untuk penjelasan singkat tentang proyek ini.
Antarmuka menyampaikan informasi dan memungkinkan pengguna untuk mengontrol berbagai hal. Sebagian besar platform otomatisasi rumah mengandalkan "antarmuka virtual". Anda mengeluarkan ponsel pintar dan membuka aplikasi untuk melihat apa yang terjadi dengan rumah Anda dan menyalakan dan mematikan lampu. Itu berfungsi baik saat Anda pergi. Tetapi melihat representasi virtual dan menguraikan informasi pada tampilan membutuhkan kerja. Ini membutuhkan fokus, dan tidak terasa intuitif.
Saya ingin membuat "antarmuka fisik" - rumah model kecil yang secara fisik meniru hal-hal yang ingin saya ketahui dengan rumah asli saya. Jadi ketika pintu garasi dibuka, saya ingin pintu garasi pada model juga terbuka. Rumah model ini bisa duduk di meja kopi saya, dan saya bisa meliriknya untuk melihat apakah pintu garasi dibiarkan terbuka sebelum tidur. Atau saya dapat memiliki ini di meja saya di tempat kerja, terhubung ke rumah saya melalui VPN. Ketika saya sedang bekerja, saya bisa meliriknya untuk melihat apakah pintu depan dibiarkan terbuka. Antarmuka fisik ini bisa sekreatif atau utilitarian seperti yang saya buat.
Jadi, dalam langkah-langkah berikut, saya akan
Rumah model memiliki beberapa servos dan kabel LED ke pengontrol Arduino. Pengontrol ini berlangganan pesan MQTT yang menunjukkan posisi pintu dan penggunaan energi, dan menggerakkan servo sesuai dengan itu. Ide yang sama dengan LED yang menunjukkan apakah lampu menyala atau mati. Ada beberapa opsi untuk mendapatkan informasi sensor ini ke broker MQTT, jadi saya akan merincinya di langkah selanjutnya. Di tengah itu semua adalah Raspberry Pi yang menjalankan broker MQTT (Nyamuk) dan OpenHAB. Meskipun OpenHAB tidak diperlukan untuk menjalankan rumah model, OpenHAB diperlukan untuk menyediakan antarmuka untuk aplikasi ponsel pintar, dan memungkinkan pemantauan dan aktuasi jarak jauh. Hanya karena saya ingin memiliki antarmuka fisik, bukan berarti saya siap untuk membuang yang virtual.
Rumah model juga memiliki dua kancing. Salah satu tombol mengaktifkan/menonaktifkan bola lampu zigbee. Tombol lainnya membuka dan menutup pintu garasi (di rumah NYATA).
Bagian 1:Pembangunan Rumah
1) Membangun rumah model
2) Opsi kontrol, pengkabelan, &kode
Bagian 2:Input (Sensor)
3) Sensor:Monitor energi
4) Sensor:Opsi simpul sensor DIY
5) Sensor:Wink Hub &sensor kontak Tripper
Bagian 3:Keluaran
6) Lampu
7) Pembuka pintu garasi
Saya tidak bermaksud langkah ini menjadi preskriptif. Saya cukup amatir dalam hal seni dan kerajinan, jadi saya hanya akan menunjukkan bagaimana saya membangun rumah model saya. Anda pasti ingin membangunnya agar menyerupai tempat tinggal Anda sendiri dan mencerminkan hal-hal yang Anda pedulikan. Banyak ruang untuk kreativitas di sini. Beberapa komponen dalam gambar ini (seperti trafo arus) akan digunakan pada langkah selanjutnya.
Komponen :
Atap
Saya memotong salah satu penutup samping kotak dan menempelkannya pada penutup samping lainnya (yang masih terpasang) untuk membentuk atap. Saya menggunakan kotak kecil untuk menyediakan struktur untuk sudut yang tepat, dan kemudian mendukungnya lebih baik dengan potongan Lego. Anda mungkin bisa menggunakan apa saja yang ada di sekitar rumah untuk membuat sudut yang tepat.
Pintu / Jendela
Potong lubang untuk pintu yang ingin Anda tampilkan. Pasang satu atau dua engsel di pintu dengan selotip ganda dan tempelkan ke rumah. Saya tahu, tidak ada yang mewah, jadi silakan berimprovisasi dengan apa yang Anda dapatkan di sekitar rumah. Saya menggunakan perekat busa sisi ganda 3M, jenis yang dilengkapi dengan pengait. Saya juga menggunakan strip perekat busa ini untuk memasang motor servo. Untuk pintu garasi, lengan motor servo menggerakkan pintu garasi terbuka, dan gravitasi menutup pintu garasi. Untuk pintu depan, saya perlu memasang tali pada pintu berengsel agar servo arm bisa membuka pintu. Potongan Lego kuning yang Anda lihat ada di sana untuk mengimbangi servo dari engselnya.
//www.youtube.com/embed/z-xyVXUSqNMPengukur Energi
Tidak ada yang mewah. Potong saja benda yang tampak seperti panah dan tempelkan ke lengan servo. Potong bentuk semak yang samar-samar dan tandai dengan skala kilowatt, dan gesekan akan pas dengan motor servo ke kotak dengan semak di antaranya.
Di atas servo konsumsi energi, saya menempelkan LED merah.
Saya juga memiliki dua tombol untuk mengontrol lampu dan pintu garasi. Ini adalah tombol sesaat. Kancing-kancing dijalin dengan mur di bagian luar untuk menahannya di dinding kotak kardus. Di sisi lain adalah kontak logam untuk kabel yang akan disolder.
Pengkabelan
Berikut diagram pengkabelan. Saya membuat kekacauan yang cukup besar pada kabel di dalam kotak. Jika Anda ingin mengetahui kabel mana yang ada di pin apa:
Opsi Pengontrol
Anda dapat menggunakan apa yang Anda rasa nyaman dan apa yang Anda miliki. Opsi yang lebih murah ($20) adalah menggunakan klon Arduino Uno dan perisai ethernet. Saya mulai dengan itu, tapi itu menambatkan saya ke kabel ethernet. Jadi saya menggantinya ke Arduino Yun ($65). Jauh lebih mahal, tetapi juga memberi saya kebebasan untuk menggunakan wifi. Yun sangat mudah digunakan. Anda pada dasarnya:
Terlampir di bawah ini adalah sketsa untuk Arduino Uno dan Arduino Yun. Mereka sangat mirip, dan kecuali untuk jembatan ethernet yang digunakan di Yun, Anda cukup banyak menyalin kode Yun ke Uno. Setelah saya beralih ke Yun, saya menambahkan dua tombol kontrol. Akibatnya, sketsa Uno tidak memiliki tombol tersebut.
Video di langkah pertama menunjukkan Arduino Yun. Berikut video menggunakan Uno dan ethernet shield. Saat video ini dibuat, saya belum memasang dua tombol, tetapi yang lainnya berfungsi sama.
//www.youtube.com/embed/7i6McpbU3Gs
Sekarang kita memiliki antarmuka fisik yang mampu menampilkan penggunaan energi, kita perlu membangun node sensor untuk membaca konsumsi energi rumah dan mempublikasikan konsumsi itu ke broker MQTT. Ada beberapa cara untuk melakukan ini. Saya menggunakan Arduino Yun. Ini adalah metode yang paling tidak rumit, tetapi bukan yang paling murah. Jika mau, Anda dapat menggunakan Arduino Uno, pelindung ethernet, dan router nirkabel untuk bertindak sebagai jembatan wifi. Atau Anda dapat menggunakan Pi dengan paket Open Energy Monitor. Saya hanya akan membahas metode Yun.
Saya menggunakan trafo arus $7 dari ebay. Anda dapat menemukan versi 100A dari Yhdc SCT-013-000 di sini. Hubungkan sesuai dengan diagram pengkabelan di atas, dan unggah sketsa Arduino Yun di bagian bawah langkah ini. Pastikan untuk mengubah kode dengan alamat IP broker MQTT Anda. Halaman ini untuk pustaka Open Energy Monitor adalah referensi yang bagus. Berikut nilai komponen yang ideal.
Gambar monitor energi saya tidak benar-benar cocok dengan diagram sirkuit karena saya tidak memiliki komponen yang tepat di tangan. Saya harus menggunakan dua resistor 68 ohm secara paralel karena saya tidak memiliki resistor beban 33 ohm. Dan saya tidak memiliki kapasitor 10uF untuk rangkaian penyearah, jadi saya menggunakan dua kapasitor 22uF sebagai gantinya. Kapasitansi ekivalen seri cukup dekat.
Pasang trafo arus pada salah satu fasa masuk rumah Anda. Saya hanya memiliki satu trafo 100A, jadi saya hanya memantau salah satu fase. Akhirnya, saya ingin mendapatkan lebih banyak trafo untuk memantau bagian lain dari daya yang masuk dan juga sirkuit cabang. Menggunakan amp meter yang sebenarnya, pengaturan DIY saya selalu membaca 1 amp di atas amp meter di berbagai pembacaan amp (lihat gambar ke-5 di atas). Masalah yang cukup sederhana untuk hanya mengurangi amp ekstra itu.
OpenHAB
Karena kami memiliki data yang masuk, kami mungkin juga menampilkannya di OpenHAB sehingga data dapat dibuat grafik. Berikut konfigurasi OpenHAB yang relevan.
Definisi Item
Nomor itm_smarthome_energy_amps "Energi (amps) [%.1f]" {mqtt="<[mymosquitto:2853:state:default]"}
Nomor itm_smarthome_energy_watts "Energi (Watt) [ %.1f]" {mqtt="<[mymosquitto:2852:state:default]"}
Peta Situs
Text label="Energy" icon="firstfloor"
{Frame label="Energy Usage" { Item teks=itm_smarthome_energy_amps
Item teks=itm_smarthome_energy_watts
Item bagan=itm_smarthome_energy_watts period=h refresh=5000 } //Penggunaan energi bingkai
}//Text label="Energy"
Kegigihan
Karena kita menggunakan grafik, kita perlu mendefinisikan semacam strategi persistensi untuk penggunaan energi. RRD4J paling mudah digunakan, jadi inilah yang saya miliki untuk "/openhab/configurations/persistence/rrd4j.persist".
Strategi {
// untuk grafik rrd, kita membutuhkan strategi cron setiap menit :"0 * * * * ?"}Item { DemoSwitch,NoOfLights,Window_GF_Toilet,Heating* :strategy =everyChange, everyMinute, restoreOnStartup // mari kita hanya menyimpan nilai suhu di rrd Temperature*,Weather_Chart* :strategy =everyMinute, restoreOnStartup itm_smarthome_energy_watts :strategy =everyUpdate}
Layar Monitor Energi
energy_monitor_yun.inoAda beberapa opsi untuk sensor buka/tutup nirkabel.
Dalam salah satu proyek saya sebelumnya, saya menggunakan transceiver nirkabel $5 untuk mengirim data sensor melalui gateway MQTT. Saya masih menggunakan proyek ini untuk mendapatkan status pintu garasi ke OpenHAB, dan dalam video demo, sebenarnya pintu garasi model rumah mencerminkan status pintu garasi saya yang sebenarnya. Kode rinci dan sirkuit dapat ditemukan di langkah ini jika Anda ingin menggunakannya. Agak jelek, tapi ada di garasi yang kemungkinan tidak akan diperhatikan oleh siapa pun.
Ada juga sensor cahaya yang saya gunakan untuk menunjukkan apakah lampu dibiarkan menyala. Ini juga dari Instruksi sebelumnya yang dirinci dalam langkah ini. Ini adalah bagian dari sensor Uber yang menggunakan resistor foto untuk mengirim informasi kecerahan secara nirkabel kembali ke OpenHAB. Dalam hal ini, saya hanya berlangganan topik MQTT yang menunjukkan tingkat cahaya.
Saya juga telah membuat sensor saklar buluh bertenaga baterai yang menggunakan transceiver dan gateway nirkabel yang sama di Instructable sebelumnya. Namun, itu tidak terlalu tampan. Saya tidak dapat benar-benar menggunakannya di pintu atau jendela interior karena alasan estetika. Jadi, untuk mengatasi masalah ini, saya menggunakan sensor saklar buluh tingkat konsumen yang terlihat lebih bagus dari Wink. Yang membawa kita ke langkah berikutnya.
//www.youtube.com/embed/uiD-HLezygI//www.youtube.com/embed/VKniJzIVHsISaya kebetulan di posting blog ini dari pengguna Wink Hub awal yang menemukan cara untuk me-root hub untuk mendapatkan akses ke exploit PHP. Eksploitasi ini memungkinkan Anda menjalankan utilitas "aprontest" untuk mengontrol hal-hal yang telah dipasangkan dengan Wink Hub. Dengan menggunakan metode ini, saya dapat mengontrol lampu dari antarmuka OpenHAB.
Manfaat paling menarik dari rooting Wink Hub adalah memberikan Anda lokal mengontrol lampu dan status sensor tanpa harus mengakses server Wink. Wink Hub dan Wink API selalu perlu terhubung ke internet untuk menghubungi server Wink untuk melakukan kontrol pencahayaan atau mendapatkan status sensor. Sekarang, dengan eksploitasi PHP ini, operasi pencahayaan dan sensor dapat disimpan ke LAN lokal Anda. Itu bagus.
Saya telah menyertakan skrip PHP di bagian bawah langkah ini. Jika Anda tidak dapat membuka file ini, coba tautan ini. Skrip ini berjalan pada Raspberry Pi dan polling Wink Hub untuk status dua sakelar buluh Wink Tripper. Status ini dikirim ke OpenHAB melalui REST API. OpenHAB kemudian akan menerbitkan topik MQTT untuk posisi pintu ini. Pengontrol untuk rumah model kemudian membuka atau menutup pintu dengan berlangganan topik posisi pintu ini.
Tiga file konfigurasi OpenHAB (item, peta situs, dan aturan) yang dilampirkan pada langkah ini diperlukan untuk membuat semuanya berfungsi. Mereka menentukan item kontak yang berinteraksi dengan skrip polling melalui antarmuka REST. Ada juga contoh skrip untuk mengontrol bola lampu zigbee melalui OpenHAB.
//www.youtube.com/embed/tWKPcBOn1KM
Script dan file konfigurasi.
Karena urutan file konfigurasi yang telah saya bahas, langkah sebelumnya cukup banyak menyediakan semua yang diperlukan untuk mengontrol "bola lampu yang terhubung" melalui antarmuka fisik dan antarmuka OpenHAB. Lampu dapat berupa cahaya apa pun yang didukung hub Wink. Saat ini, saya telah mengujinya dengan Cree Connected Bulb dan lampu GE Wink. Keduanya bekerja seperti yang diharapkan. Saya hanya akan menampilkan video ini di sini yang menunjukkan dengan lebih baik bagaimana sensor cahaya dan tombol mengontrol bohlam pintar.
//www.youtube.com/embed/KSDUEfro3VoFile konfigurasi yang disediakan di Langkah 5 mencakup sebagian besar item OpenHAB yang diperlukan untuk mengontrol pintu garasi. Tetapi Anda masih membutuhkan sesuatu untuk benar-benar membuka dan menutup pintu garasi. Untuk itu, saya memodifikasi bagian dari Instructable sebelumnya. Saya membuat pembuka pintu garasi dengan komponen ini:
Arduino mengontrol relay buluh dengan membuka dan menutup kontak kering. Tombol dari pembuka pintu garasi cadangan dihubungkan melalui kontak kering pada relai buluh. Hubungkan Pin 5 dan GND dari Arduino ke dua pin koil (dua pin luar) dari relai buluh, dan pin relai bagian dalam ke tombol di remote pintu garasi.
Arduino berlangganan topik MQTT dan menunggu perintah buka/tutup. Ketika melihat topik ini, ia memberi energi pada relay buluh untuk sementara waktu, menutup "tombol" pada remote pintu garasi cadangan. Sketsa Arduino terlampir di bawah ini. Selain itu, tambahkan "garage_monitor_rules.txt" ke file aturan Anda. Ini diperlukan selain aturan yang terlampir pada Langkah 5. Jika Anda tidak menggunakan metode sensor ultrasonik yang saya gunakan, ini adalah bagian yang perlu Anda ubah agar sesuai dengan modifikasi Anda.
//www.youtube.com/embed/CqbRosfqM3cJika pintu garasi Anda cukup bagus atau Anda ingin semacam pengumuman audio di bagian lain rumah ketika pintu garasi terbuka, aturan tambahan di atas dapat memutar file audio. Anda dapat mendengarnya di demo video pertama sekitar tiga puluh menit.
//www.youtube.com/embed/pdKfJtnpNzs
Keputusan yang dibuat dalam proyek ini mencerminkan alat yang saya rasa nyaman, bagian-bagian yang saya miliki, dan prioritas saya tentang cara kerja yang saya inginkan. Anda mungkin memiliki seperangkat alat yang berbeda, dan Anda memiliki komponen perangkat keras yang berbeda yang tersedia. Anda mungkin juga memiliki ide yang berbeda tentang cara kerja otomatisasi rumah.
Ada banyak fleksibilitas saat menggunakan MQTT dan OpenHAB, dan Anda tidak perlu melakukan hal-hal persis seperti yang saya lakukan. Pengontrol yang digunakan untuk mengontrol rumah model dapat berupa Arduino, Raspberry Pi, atau bahkan Sparkcore. Sensor DIY dapat berupa Arduino atau ESP8266 yang berdiri sendiri. Satu-satunya kendala adalah bahwa data sensor perlu dipublikasikan ke broker MQTT. Jika Anda memiliki stik gelombang-Z USB pada penginstalan OpenHAB, Anda dapat menggunakan OpenHAB sebagai jembatan gelombang-Z ke MQTT, dan memanfaatkan sensor gelombang-Z untuk pendeteksian pintu.
Bahkan sensor buka/tutup Wink dapat dilakukan secara berbeda. Jika Anda tidak me-root Wink Hub, Anda dapat menggunakan Wink API untuk mengambil status sensor dan mempostingnya ke OpenHAB, atau mempostingnya langsung melalui MQTT. Ini memerlukan penggunaan Wink Server, tetapi menghilangkan batasan hub yang di-root.
Jadi, banyak cara untuk melakukan sesuatu secara berbeda. Saya cenderung menggunakan perangkat keras yang merupakan penyebut umum terendah, jadi Arduino dan kotak kardus.
// Eric Tsai// 2015-04-13// Kode Arduino Yun untuk mengontrol antarmuka rumah pintar fisik// Ubah nama topik MQTT agar sesuai dengan penggunaan Anda// Ubah alamat IP broker MQTT // termasuk yun baru#termasuk#include #include //ethernet lama termasuk saat menggunakan ethernet shield/*#include #include #include */#include //Ethernet shield setup/*IPaddress ip(192, 168, 2, 36);byte mac[] ={ 0x90, 0xA2, 0xDA, 0x0D, 0x43, 0x13 };byte server[ ] ={ 192, 168, 1, 101 };EthernetClient ethClient;PubSubClient client(server, 1883, callback, ethClient);*/unsigned long keepalivetime=0;unsigned long MQTT_reconnect=0;//gunakan yunclient untuk menjembatani ke jaringanYunClient yun; //setara dengan ethernet clientPubSubClient client("192.168.1.101", 1883, callback, yun);bool conn_ok;//menggunakan LED untuk menunjukkan status koneksi MQTT.int ledPin =4; //menunjukkan lampu padaint statusPin =7; //menunjukkan status koneksi MQTT//kontrol servoint servo1Pin =3; //pintu depan servo2Pin =5; //pintu garasi servo3Pin =6; //meter penggunaan energiServo servo1; //doorServo servo2; //pintu garasiServo servo3; //energiint tombol1 =8; //tombol di atas pintu depan button2 =9; //tombol di atas pintu garasi//operasi servo:posisi target untuk servosint servo1_target =5; //pintu, servo2_target tertutup =5; //garasi, servo3_target tertutup =180; //energi, 180 adalah "0" watt, motor dipasang ke belakangint servo1_pos_cur =5;int servo2_pos_cur =5;int servo3_pos_cur =180; // 180 adalah "0" watt, motor dipasang ke belakangint servo1Buka =5;int servo1Tutup =130;int servo2Terbuka =5;int servo2Tutup =150;servo1_waktu panjang tidak bertanda =0;waktu_servo panjang tidak bertanda =0;waktu_servo panjang tidak bertanda =0;/ /debounce pada tombol, jadi Anda tidak melakukan spam publishunsigned long button1_db =0;unsigned long button2_db =0;int button=0;int callback_flag =0;char buff_message[12];//--------- -------------------------------------------------- ----// MQTT call back// bereaksi terhadap pesan MQTT di sini//-------------------------------- -------------------------------void callback(char* topic, byte* payload, unsigned int length) { //convert topik ke int. int mytopic =atoi (topik); //Serial.print(mytopic); //konversi payload ke int payload[length] ='\0'; //tambahkan baris kembali sehingga atof dapat mengurai dengan benar float mymsg =atof( (const char *) payload); //led if (mytopic ==2822) { if (mymsg ==1) { digitalWrite(ledPin, HIGH); } if (mymsg ==0) { digitalWrite(ledPin, RENDAH); } } //servo 1, pintu depan if (mytopic ==2832) { if (mymsg ==1) //opened { //Serial.println("servo1 dibuka"); servo1_target =servo1Dibuka; } if (mymsg ==0) //closed { //Serial.println("servo1 ditutup"); servo1_target =servo1Tutup; } //Serial.println(servo1_target); } /* //sinyal pintu garasi kedua "tertutup" =mati =kirim 1 "buka" =aktif =kirim 0 */ //servo 2, pintu garasi if (mytopic ==2842) { if (mymsg ==1) / /dibuka { servo2_target =servo2Dibuka; } if (mymsg ==0) //closed { servo2_target =servo2Closed; } //callback_flag=1; //servo3_target =mymsg; } //servo 3, pengukur energi if (mytopic ==2852) { //message =watt //terikat watt ke meter max &min if (mymsg> 6000) { mymsg =6000; } if (pesan saya <0) { mymsg =0; } //bias meter from 180 degrees to 0 degrees //180 deg to 0 deg =0 watt to 6000 watts, for example //set max watts to what makes sense for you. servo3_target =180-((1-((6000-mymsg)/6000))*180)-25; callback_flag=1; }}//end callbackvoid setup() { pinMode(ledPin, OUTPUT); //LED indicating light on pinMode(statusPin, OUTPUT); pinMode(button1, INPUT_PULLUP); //use pull-up resistor, invert logic pinMode(button2, INPUT_PULLUP); //use pull-up resistor, invert logic digitalWrite(ledPin, HIGH); //yun bridge Bridge.begin(); //connect to MQTT broker client.connect("yun smarthome"); client.publish("watch", "Smart Home Connected!"); keepalivetime=millis(); //Wire.onReceive (receiveEvent); MQTT_reconnect =millis(); //client.subscribe("#"); //test subscribe client.subscribe("2822"); //LED client.subscribe("2832"); //servo 1 topic client.subscribe("2842"); //servo 2 topic client.subscribe("2852"); //servo 3 topic digitalWrite(ledPin, LOW); //servo servo1.attach(servo1Pin); servo1.write(90); servo2.attach(servo2Pin); servo2.write(90); servo3.attach(servo3Pin); servo3.write(5);} // end of setupvoid loop() { client.loop(); //MQTT processing needs this to run //For servo positioning, don't want to move too fast. //Must crawl from current position to target position //but also avoid using "delay" cmd, that just freezes up microcontroller //servo 1 if ((millis() - servo1_time)> 20) { if (servo1_pos_cur> servo1_target) { servo1_pos_cur =servo1_pos_cur - 1; } if (servo1_pos_cur 20) { if (servo2_pos_cur> servo2_target) { servo2_pos_cur =servo2_pos_cur - 1; } if (servo2_pos_cur 20) { if (servo3_pos_cur> servo3_target) { servo3_pos_cur =servo3_pos_cur - 1; } if (servo3_pos_cur 3000) || (button1_db> millis())) { button1_db=millis(); client.publish("2862", "button1 yaya"); } } //button 2 button=digitalRead(button2); if (button==0) //inverted logic { if ( ((millis() - button2_db)>3000) || (button2_db> millis())) { button2_db=millis(); client.publish("2872", "button2 yaya"); } } //check network connection to MQTT broker every 60 seconds. //reconnect if no longer connected if ((millis() - MQTT_reconnect)> 60000) { conn_ok =client.connected(); if (conn_ok==1) { digitalWrite(statusPin, HIGH); //Serial.println("MQTT connected OK"); } else { digitalWrite(statusPin, LOW); //Serial.println("MQTT NOT connected OK"); } //no connection, reconnect if (conn_ok ==0) { client.disconnect(); penundaan(5000); while (client.connect("smarthouse") !=1) { digitalWrite(statusPin, LOW); //Serial.println("Error connecting to MQTT"); penundaan (4000); } digitalWrite(statusPin, HIGH); } //Serial.println("reconnected to MQTT"); MQTT_reconnect =millis(); client.publish("watch","smart home heartbeat!"); }//end Mosquitto connection check} // end of loop
// Eric Tsai// 2015-04-1// Arduino Uno w/ Ethernet, code for controlling physical smart home interface// Modify MQTT topic names to match your use// Modify MQTT broker IP address#include#include #include #include //Ethernetbyte mac[] ={ 0x90, 0xA2, 0xDA, 0x0D, 0x43, 0x13 };byte server[] ={ 192, 168, 1, 101 };EthernetClient ethClient;PubSubClient client(server, 1883, callback, ethClient);unsigned long keepalivetime=0;unsigned long MQTT_reconnect=0;bool conn_ok;//use LED for indicating MQTT connection status.int ledPin =4; //indicate lights onint statusPin =7; //indicate MQTT conn status//servo controlint servo1Pin =3; //front doorint servo2Pin =5; //garage doorint servo3Pin =6; //energy usage meterServo servo1; //doorServo servo2; //garage doorServo servo3; //energy//servo operation:target positions for servosint servo1_target =5; //door, closedint servo2_target =5; //garage, closedint servo3_target =180; //energy, 180 is "0" watts, motor mounted backwardsint servo1_pos_cur =5;int servo2_pos_cur =5;int servo3_pos_cur =180; // 180 is "0" watts, motor mounted backwardsint servo1Opened =5;int servo1Closed =120;int servo2Opened =5;int servo2Closed =150;unsigned long servo1_time =0;unsigned long servo2_time =0;unsigned long servo3_time =0;//---------------------------------------------------------------// MQTT call back// react to MQTT messages here//---------------------------------------------------------------void callback(char* topic, byte* payload, unsigned int length) { Serial.println("received MQTT"); //convert topic to int. int mytopic =atoi (topic); //Serial.print(mytopic); //convert payload to int payload[length] ='\0'; //add a line return so atof can parse correctly float mymsg =atof( (const char *) payload); //print MQTT message Serial.println(""); Serial.print("("); Serial.print(mytopic); Serial.print(", "); Serial.print(mymsg); Serial.println(")"); //led if (mytopic ==2822) { if (mymsg ==1) { digitalWrite(ledPin, HIGH); } if (mymsg ==0) { digitalWrite(ledPin, LOW); } } //servo 1, front door if (mytopic ==2832) { if (mymsg ==1) //opened { Serial.println("servo1 opened"); servo1_target =servo1Opened; } if (mymsg ==0) //closed { Serial.println("servo1 closed"); servo1_target =servo1Closed; } Serial.println(servo1_target); } /* //second garage door signal "closed" =off =send 1 "open" =on =send 0 */ //servo 2, garage door if (mytopic ==2842) { if (mymsg ==1) //opened { servo2_target =servo2Opened; } if (mymsg ==0) //closed { servo2_target =servo2Closed; } } //servo 3, energy meter if (mytopic ==2852) { //message =watts //error check if (mymsg> 6000) { mymsg =6000; } if (mymsg <0) { mymsg =0; } //bias meter from 180 degrees to 0 degrees //180 deg to 0 deg =0 watt to 6000 watts, for example //set max watts to what makes sense for you. servo3_target =180-((1-((6000-mymsg)/6000))*180); //servo3_target =mymsg; }}//end callbackvoid setup() { //ethernet //Ethernet.begin(mac, ip); //Wire.begin (MY_ADDRESS); Serial.begin (9600); Serial.println("starting"); pinMode(ledPin, OUTPUT); //LED indicating light on pinMode(statusPin, OUTPUT); digitalWrite(ledPin, HIGH); //wait for IP address while (Ethernet.begin(mac) !=1) { Serial.println("Error getting IP address via DHCP, trying again..."); penundaan(5000); } Serial.println("ethernet OK"); keepalivetime=millis(); while (client.connect("smarthouse") !=1) { Serial.println("Error connecting to MQTT"); //delay(3000); penundaan (4000); } MQTT_reconnect =millis(); Serial.println("setup complete"); client.publish("smarthouse","hello world"); //test publish //client.subscribe("#"); //test subscribe client.subscribe("2822"); //LED client.subscribe("2832"); //servo 1 topic client.subscribe("2842"); //servo 2 topic client.subscribe("2852"); //servo 2 topic digitalWrite(ledPin, LOW); //servo servo1.attach(servo1Pin); servo1.write(90); servo2.attach(servo2Pin); servo2.write(90); servo3.attach(servo3Pin); servo3.write(5);} // end of setupvoid loop() { client.loop(); //MQTT processing needs this to run //For servo positioning, don't want to move too fast. //Must crawl from current position to target position //but also avoid using "delay" cmd, that just freezes up microcontroller //servo 1 if ((millis() - servo1_time)> 20) { if (servo1_pos_cur> servo1_target) { servo1_pos_cur =servo1_pos_cur - 1; } if (servo1_pos_cur 20) { if (servo2_pos_cur> servo2_target) { servo2_pos_cur =servo2_pos_cur - 1; } if (servo2_pos_cur 20) { if (servo3_pos_cur> servo3_target) { servo3_pos_cur =servo3_pos_cur - 1; } if (servo3_pos_cur 60000) { conn_ok =client.connected(); if (conn_ok==1) { digitalWrite(statusPin, HIGH); Serial.println("MQTT connected OK"); } else { digitalWrite(statusPin, LOW); Serial.println("MQTT NOT connected OK"); } //no connection, reconnect if (conn_ok ==0) { client.disconnect(); penundaan(5000); while (client.connect("smarthouse") !=1) { digitalWrite(statusPin, LOW); Serial.println("Error connecting to MQTT"); penundaan (4000); } digitalWrite(statusPin, HIGH); } //Serial.println("reconnected to MQTT"); MQTT_reconnect =millis(); client.publish("smarthouse","heartbeat every minute!"); }//end Mosquitto connection check} // end of loop
/*Eric Tsai2015-04-22Arduino Yun code for publishing energy use to MQTT brokerModify the "PubSubClient client" for your broker IP address*/#include#include #include #include "EmonLib.h" // OpenEnergy Monitor project libraryint LED =3;EnergyMonitor emon1; // open energy monitorunsigned long MQTT_reconnect=0;unsigned long read_energy=0;double Irms;bool conn_ok;YunClient yun; //equivalent of ethernet client//really shouldn't need call back, but just in case it's needed.void callback(char* topic, byte* payload, unsigned int length) { digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW}//use yunclient to bridge to networkPubSubClient client("192.168.1.101", 1883, callback, yun);//**********************************************************************void setup(){ // initialize digital pin 13 as an output. pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW Bridge.begin(); client.connect("yun_energy"); client.publish("watch", "Energy Monitor Connected!"); client.subscribe("yun_energy"); digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(3000); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW emon1.current(5, 60); // Current:input pin, calibration.}//**********************************************************************void loop(){ char buff_message[12]; //message buffer for MQTT publish float value; client.loop(); //run this every loop to maintain MQTT connection Irms =emon1.calcIrms(1480); // Calculate Irms only, 1480 means read Irms. //publish current every 10 seconds. if (millis() - read_energy> 10000) { //amps value =Irms; dtostrf (value, 4, 5, buff_message); client.publish("2853", buff_message); read_energy =millis(); //watts value =Irms*115; dtostrf (value, 4, 5, buff_message); client.publish("2852", buff_message); } //maintain MQTT connection if ((millis() - MQTT_reconnect)> 60000) { conn_ok =client.connected(); if (conn_ok==1) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } //no connection, reconnect if (conn_ok ==0) { client.disconnect(); penundaan(5000); while (client.connect("yun_energy") !=1) { delay(4000); } digitalWrite(LED, HIGH); client.publish("watch", "Energy Monitor reconnected"); } MQTT_reconnect =millis(); }//end Mosquitto connection check }
Proses manufaktur
A Ketika kita berbicara tentang pengelasan tiba-tiba muncul gambaran di benak kita bahwa itu adalah proses penyambungan dua bagian logam. Tetapi untuk lebih memahami topik ini, pengelasan tidak terbatas pada logam dan keramik saja, tetapi juga digunakan dalam industri plastik untuk tujuan yang sama
Sistem Otomasi Rumah Terkendali Suara menggunakan Mikrokontroler 8051 Otomasi Rumah Berbasis Pengenalan Suara Dengan evolusi perangkat pintar dan berbagai teknologi komunikasi nirkabel, sekarang dimungkinkan untuk memanfaatkan teknik ini untuk manfaat terbaik bagi manusia. Salah satu manfaat ter
Pengembangan produk apa pun dimulai dengan perancangan produk. Desain konseptual kemudian diubah menjadi prototipe fisik. Pengembangan prototipe fisik merupakan langkah penting dari pengembangan produk baru atau teknologi baru. Biasanya dibuat untuk mengevaluasi dan menguji desain oleh analis sistem
Otomasi dalam industri manufaktur adalah proses pengintegrasian mesin industri untuk secara otomatis melakukan tugas-tugas seperti pengelasan, penanganan material, pengepakan, pembuatan palet, pengeluaran, pemotongan, dll. Memanfaatkan otomatisasi perangkat keras dan perangkat lunak meningkatkan pro