Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Monitor Rumah

Komponen dan persediaan

Arduino Mega 2560
× 1
Papan Ethernet Arduino
× 1
LCD 4x20 dengan antarmuka I2C
× 1
Sensor Suhu DHT22
× 1
DS3231 RTC
× 1
Jarak ultrasonik HC-SR04
× 1
PCB fabrikasi khusus Taman OSH
× 1

Tentang proyek ini

Saya mulai dengan pemantauan rumah dengan memasang termostat Ecobee Smart di rumah putri saya. Mereka telah dihentikan oleh Ecobee jadi saya menginginkan alternatif yang memungkinkan pemantauan hal-hal seperti tingkat bah, alarm banjir, kehilangan daya serta item lainnya. Saya menarik banyak dari proyek lain di berbagai situs terutama untuk pengkodean Arduino serta situs web. Penggunaan Pushingbox untuk pemberitahuan adalah bagian penting dari sistem untuk memungkinkan sarana pemberitahuan jarak jauh. Saya menghargai komunitas desain terbuka yang mempublikasikan pengetahuan dan proyek mereka.

Saya mulai dengan Arduino Mega 2560, menambahkan kartu Ethernet. Dengan menggunakan Eagle cad, saya merancang beberapa papan untuk input serta pemberi isyarat visual. Saya memiliki ini dibuat oleh OSH Park. Papan antarmuka menghubungkan tujuh kontak kering yang tersedia, sensor suhu dan kelembaban, jam waktu nyata, dan sensor level bah ultrasonik ke Arduino.

Untuk tampilan lokal, saya menggunakan layar LCD 4x20. Juga ada 8 led yang menunjukkan status input alarm apa pun, kuning saat masuk, hijau saat dibersihkan dan mati saat reset.
Tombol reset menghapus led hijau saat pesan mengaktifkan PB mengaktifkan/menonaktifkan notifikasi menggunakan Pushingbox.

Situs web hanya ditampilkan di LAN. Saya tidak ingin mem-port router saya karena kemungkinan alasan keamanan. Ada beberapa contoh Arduino yang saya gunakan bagian serta jqplot karena saya ingin berdiri sendiri di sistem lab saya.

Situs web tampilan penuh.

Belum ada label, namun, perangkat lunak disetel ke alarm kurang dari 10 inci dari sensor dan led kuning menyala menunjukkan alarm ini aktif. Alarm yang berwarna hijau menunjukkan bahwa itu pernah masuk tetapi telah dibuka sejak itu. Dengan menekan reset pb led hijau akan padam namun led kuning akan tetap menyala sampai level lebih besar dari 10 inci.

Kode

  • Kode Arduino
  • Situs Web
Kode ArduinoC/C++
 // Home Monitor code/* TUGAS arduino grn led red led interface annunciator annunciator sensor# variabel input pin output pin output pin variabel board pin board red pin board grn pinsump level 1 6,8 18 19 inci x15-2 hingga 6 , x15-3 hingga 8 20-1 20-2alarm banjir 2 28 23 25 x15-4 20-3 20-4 kehilangan daya 3 30 27 29 x15-5 20-5 20-6 suhu 4 ftemp 5 (ftemp,1 ) x15-1 kelembaban 5 fhumi 5 (fhumi,1) x15-1aux 1 6 aux1 32 31 33 x15-6 20-7 20-8aux 2 7 aux2 34 35 37 x15-11 21-1 21-2 aux 3 8 aux3 36 39 41 x15-7 21-3 21-4aux 4 9 aux4 38 43 45 x15-8 21-5 21-6aux 5 10 aux5 40 47 49 x15-9 21-7 21-8 setel ulang 42 x15-10hambatan pesan msginhbt 44 x15-12 led pesan 17* harus diubah untuk pelindung wifi WIRINGVCC ke 5VLCD:SDA pin ke pin 21LCD:SCL pin ke pin 20DHT:DHT pin 1 ke VCCDHT:DHT pin 2 ke pin 5 dan 10K ke VCCDHT:DHT pin 3 cadanganDHT:DHT pin 4 ke GNDSR04:SR04 pin trig ke pin 8SR04:SR04 pin echo ke pin 6RTC:pin SDA ke pin 21RTC:pin SCL ke pin 20LOSS OF POWER pin 30FLOOD ALARM pin 28MESSAGE Pin LED 17tidak bisa menggunakan pin 4, 7, 10, 11, 12, 13 50, 51, 52 dan 53 */// LIBRARY#include #include #include # include  #include #include #include #include #include // ukuran buffer yang digunakan untuk menangkap HTTP request#define REQ_BUF_SZ 50// alamat MAC dari stiker pelindung Ethernet di bawah boardbyte mac[] ={ 0xzz, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz };IPaddress ip(192, 168, 1, 100);//(10, 9, 9, 12); atau (192.168.1.100); Alamat IP, mungkin perlu diubah tergantung pada networkIPaddress gateway(192.168.1,1); //(10,9,9,1):atau (192.168,1,1); sebelumnya tidak digunakan dalam sketsa lain MUNGKIN HARUS MENGHAPUS subnet alamat(255,255,255,0);// (255,255,255,0); sebelumnya tidak digunakan dalam sketsa lain MUNGKIN HARUS MENGHAPUS serverthernetServer(1000); // buat server di port 1000File webFile; // file halaman web pada kartu SD HTTP_req[REQ_BUF_SZ] ={0}; // permintaan HTTP buffer disimpan sebagai stringchar diakhiri null req_index =0; // indeks ke buffer HTTP_req // DevID rahasia Anda dari PushingBox.com. Anda dapat menggunakan beberapa DevID pada beberapa Pin jika Anda ingin karakter DEVID1[] ="xxxxxxxxxxxxxxxxxx"; //Skenario :"ini adalah skenario peringatan pertama" masukkan DevID Anda di sini dalam tanda kutip// DEVICE SETUP//setup LCDLiquidCrystal_I2C lcd(0x27,20,4); // setel alamat LCD ke 0x27 untuk tampilan 16 karakter dan 2 baris//set up DHT22dht DHT;#define DHT22_PIN 5//setup sonar#define TRIGGER_PIN 8 // Pin Arduino diikat ke pin trigger pada sensor ultrasonik.#define ECHO_PIN 6 // Pin Arduino diikat ke pin echo pada sensor ultrasonik.#menentukan MAX_DISTANCE 200 // Jarak maksimum yang ingin kita ping (dalam sentimeter). Jarak sensor maksimum dinilai pada 400-500cm.Sonar Ping Baru(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Setup Pin baru dan jarak maksimum.//setup RTCRTC_DS3231 RTC;//Variabel global unsigned long mathtime1 =0; unsigned long mathtime2 =0; mattime3 panjang yang tidak ditandatangani =0; mathtime3a panjang yang tidak ditandatangani =0; mattime4 panjang yang tidak ditandatangani =0; String waktu; String tanggal string; inci int yang tidak ditandatangani; mengambang ftemp; mengapung fhumi; int aux1; int aux2; int aux3; int aux4; int aux5; pengaturan ulang int; int msginhbt =RENDAH; int sensor1 =0; Sensor string2 =0; Sensor string3 =0; int sensor4 =0; int sensor5 =0; Sensor string6 =0; Sensor string7 =0; Sensor tali8 =0; Sensor tali9 =0; Sensor string10 =0; Pesan stringkirim;Sensor string1msg;Sensor string2msg;Sensor string3msg;Sensor string6msg;Sensor string7msg;Sensor string8msg;Sensor string9msg;Sensor string10msg;String msginhbtmsg;String devid ="xxxxxxxxxxxxxxxxx";char serverName[] ="api.pushingbox" boolean lastConnected =false;boolean DEBUG =true; // untuk pemecahan masalah pushboxboolean DEBUG1 =true; //untuk troubleshooting websiteboolean DEBUG2 =false; //untuk pemecahan masalah penyiapan datavoid(){// OPERASI KARTU SD // nonaktifkan mode pin chip Ethernet (10, OUTPUT); digitalWrite(10, TINGGI); // MULAI SERIAL UNTUK DEBUGGING Serial.begin(9600); if (DEBUG1){Serial.println("Memulai Program..");} Ethernet.begin(mac,ip,gateway,subnet); if (DEBUG1){Serial.println("IP Server Aktif:");Serial.println(Ethernet.localIP());} server.begin(); // inisialisasi kartu SD if (DEBUG1){Serial.println("Inisialisasi kartu SD...");} if (!SD.begin(4)) { if (DEBUG1){Serial.println("ERROR - SD card inisialisasi gagal!");} kembali; // init gagal } if (DEBUG1){Serial.println("SUKSES - kartu SD diinisialisasi.");} // periksa file index.htm if (!SD.exists("index.htm")) { if ( DEBUG1){Serial.println("ERROR - Tidak dapat menemukan file index.htm!");} return; // tidak dapat menemukan file indeks } Serial.println("SUKSES - Ditemukan file index.htm."); // INISIALISASI PERALATAN //inisialisasi server web Ethernet.begin(mac, ip); // inisialisasi server perangkat Ethernet.begin(); // mulai mendengarkan klien // menginisialisasi lcd lcd.init(); //inisialisasi RTC Wire.begin(); RTC.mulai(); if (! RTC.isrunning()) { if (DEBUG2){Serial.println("RTC is NOT running!");} // baris berikut menyetel RTC ke tanggal &waktu sketsa ini dikompilasi RTC.adjust(DateTime (__TANGGAL WAKTU__)); } DateTime sekarang =RTC.now(); DateTime dikompilasi =DateTime(__DATE__, __TIME__); if (now.unixtime() -1){ //periksa apakah perintah datang homefront =homefront+6; //ambil karakter berikutnya int endfront =homefront+3; //Saya harap perintah ini 3 karakter String action =line.substring(homefront,endfront);//mengambil nilai dari perintah client.print("datas({ sensor1 :"); client.print(sensor1); client. print(", sensor2 :"); client.print(sensor2); client.print(", sensor3 :"); client.print(sensor3); client.print(", sensor4 :"); client.print(sensor4 ); client.print(", sensor5 :"); client.print(sensor5); client.print(", sensor6 :"); client.print(sensor6); client.print(", sensor7 :"); client .print(sensor7); client.print(", sensor8 :"); client.print(sensor8); client.print(", sensor9 :"); client.print(sensor9); client.print(", sensor10 :"); client.print(sensor10); client.print(", msgtimer :"); client.print(mathtime3a); client.print(", msgonoff :"); client.print(msginhbtmsg); client.print( "})"); } merusak; } if(c =='\n') { terus menerus =benar; } else if (c !='\r') { kontinu =salah; } } } penundaan(1); klien.berhenti(); } if (DEBUG1){Serial.print("datas({ sensor1 :"); Serial.println(sensor1); Serial.print(", sensor2 :"); Serial.println(sensor2); Serial.print(", sensor3 :"); Serial.println(sensor3); Serial.print(", sensor4 :"); Serial.println(sensor4); Serial.print(", sensor5 :"); Serial.println(sensor5); Serial. print(", sensor6 :"); Serial.println(sensor6); Serial.print(", sensor7 :"); Serial.println(sensor7); Serial.print(", sensor8 :"); Serial.println(sensor8 ); Serial.print(", sensor9 :"); Serial.println(sensor9); Serial.print(", sensor10 :"); Serial.println(sensor10); Serial.print(", msgtimer :"); Serial .println(mathtime3a); Serial.print(", msgonoff :"); Serial.print(msginhbtmsg); Serial.println("})");} if (DEBUG1){Serial.print("Alamat IP Situs Web Saya:"); Serial.println(Ethernet.localIP());} }void timeanddate(){//waktu dan tanggal DateTime now =RTC.now(); DateTime masa depan (now.unixtime() - 0);//koreksi waktu pada 840 String jam; String menit string; String string kedua; if(future.hour() <10){ hourstring ='0' + String(future.hour()) + ':';} else { hourstring =String(future.hour()) + ':';} if (future.minute() <10){ minutestring ='0' + String(future.minute()) + ':';} else { minutestring =String(future.minute()) + ':';} if( future.second() <10){ secondstring ='0' + String(future.second());} else { secondstring =String(future.second());} timestring=hourstring + minutestring + secondstring; String string bulan; Tali hari; Tali tahun; if(future.month() <10){ monthstring ='0' + String(future.month()) + '/';} else {monthstring =String(future.month()) + '/';} if (future.day() <10){ daystring ='0' + String(future.day()) + '/';} else {daystring =String(future.day()) + '/';} datestring=string bulan + string hari + masa depan.tahun(); lcd.setCursor(0,0); lcd.print(timestring); lcd.setCursor(10,0); lcd.print(string tanggal); mathtime1 =(sekarang.unixtime()); kembali; }void ultrasonicsensor(){ //sensor ultrasonik{ unsigned int uS =sonar.ping_median(5); // Kirim ping, dapatkan waktu ping dalam mikrodetik (uS). lcd.setCursor(9,1); lcd.print(""); lcd.setCursor(9,1); lcd.print(AS / US_ROUNDTRIP_IN); // Ubah waktu ping menjadi jarak dalam cm dan hasil cetak (0 =di luar rentang jarak yang ditetapkan) inci =(uS / US_ROUNDTRIP_IN); sensor1 =inci; if (DEBUG2){Serial.print("Jarak:");Serial.println(inci);}}return;}void dht22(){//sensor suhu dan kelembaban{ if ((mathtime1 - mathtime4)>2) { int chk =DHT.read22(DHT22_PIN); fhumi=(DHT.kelembaban); ftemp=((DHT.suhu*1.8)+32); lcd.setCursor(9,2); lcd.print(fhumi, 1); lcd.setCursor(12,3); lcd.print(ftemp, 1); mathtime4 =waktu matematika1; } //penundaan(2000); //2 detik penundaan untuk pembacaan if (DEBUG2){Serial.println("Suhu dan Kelembaban:");} if (DEBUG2){Serial.println(ftemp,1);} if (DEBUG2){Serial.println(fhumi ,1);} }return;}void annunciator() { //alarm sump if (inci<10) { digitalWrite(18, HIGH); digitalWrite(19, TINGGI); } else { digitalWrite(19, LOW);}//alarm banjir if (digitalRead(28) ==HIGH ) { digitalWrite(23, HIGH); digitalWrite(25, TINGGI); } else { digitalWrite(25, LOW);}//alarm kehilangan dayaif (digitalRead(30) ==HIGH ) { digitalWrite(27, HIGH); digitalWrite(29, TINGGI); } else { digitalWrite(29, LOW);}//aux 1 alarmif (digitalRead(32) ==HIGH ) { digitalWrite(31, HIGH); digitalWrite(33, TINGGI); } else { digitalWrite(33, LOW);}//aux 2 alarmif (digitalRead(34) ==HIGH ) { digitalWrite(35, HIGH); digitalWrite(37, TINGGI); } else { digitalWrite(37, LOW);}//aux 3 alarmif (digitalRead(36) ==HIGH ) { digitalWrite(39, HIGH); digitalWrite(41, TINGGI); } else { digitalWrite(41, LOW);}//aux 4 alarmif (digitalRead(38) ==HIGH ) { digitalWrite(43, HIGH); digitalWrite(45, TINGGI); } else { digitalWrite(45, LOW);}//aux 5 alarmif (digitalRead(40) ==HIGH ) { digitalWrite(47, HIGH); digitalWrite(49, TINGGI); } else { digitalWrite(49, LOW);}//reset ledsif (digitalRead(42) ==HIGH) { int ledPinsout[] ={18, 19, 23, 25, 27, 29, 31, 33, 35, 37 , 37, 39, 41, 43, 45, 47, 49}; int ledPinsoutcnt =17; { untuk (int q=0; q 99999){mathtime3a =99999;};if (DEBUG2){Serial.print("MATH TIME 1:");Serial.println(mathtime1);Serial.print("MATH TIME 2:");Serial .println(mathtime2);Serial.print("MATH TIME 3:");Serial.println(mathtime3);Serial.print("ZFLAG:");Serial.println(zflag);}{ if (zflag ==1 &&mathtime3> 300 ) // ubah menjadi 300 detik mengirim pesan tidak lebih dari setiap 5 menit {mathtime2 =mathtime1; if (DEBUG1){Serial.println("KIRIM PESAN!");} klien EthernetClient; Serial.println("Ethernet siap"); // cetak alamat IP papan/perisai Ethernet:Serial.print("Alamat IP SENDMESSAGE saya:"); Serial.println(Ethernet.localIP()); // beri perisai Ethernet satu detik untuk menginisialisasi:delay(1000);if (DEBUG2){Serial.print("incoming value:");Serial.println(messagesend);}String repel =messagesend;char room[repel. length()+1];repel.toCharArray(ruangan,repel.length()+1); if (DEBUG2){Serial.print("Ini adalah nilai yang dibingkai:");Serial.println(room);} client.stop(); if(DEBUG){Serial.println("menghubungkan...");} if (client.connect(serverName, 80)) { if(DEBUG){Serial.println("connected");} if(DEBUG){ Serial.println("mengirim permintaan");} client.print("DAPATKAN /pushingbox?devid="); klien.print(devid); klien.print("&ruang="); if (DEBUG){Serial.print("Ini adalah nilai yang dikirim:");Serial.println(room);} client.print(room); client.println("HTTP/1.1"); client.print("Tuan rumah:"); klien.println(Namaserver); client.println("Agen-Pengguna:Arduino"); klien.println(); } else { if(DEBUG){Serial.println("koneksi gagal");} } }} return;}
Situs WebJavaScript
perlu menambahkan file js dan css untuk menjalankan ini, mereka berada di komputer yang Anda gunakan. I
 Home Monitor          //   // Membuat diagram dan mengukur objek var tempChar, humChar; var pengukur suhu, pengukur suhu; // Array yang menyimpan titik data untuk dua grafik var tempData =new Array(); var humData =Array baru(); // Buat data "dummy" di masa lalu untuk dua grafik var startTime =(Tanggal baru()).getTime() - 270000; for(var i =0; i <10; i++) { tempData.push([Waktu mulai, 20]); humData.push([Waktu mulai, 50]); waktu mulai +=30000; } // Ketika dokumen sudah siap, buat objek dan isi grafik dengan data "dummy" $(document).ready(function() { showCharts(); showGauges(); }); // Fungsi yang menampilkan dua grafik function showCharts() { tempChar =$.jqplot('tempchartdiv', [tempData], { title:'Sump Level', series:[{showMarker:false, lineWidth:1,color:" biru"}], sumbu:{ xaxis:{ renderer:$.jqplot.DateAxisRenderer, tickOptions:{ formatString:'%M:%S', }, tickInterval:15 }, yaxis:{ min:0, maks:30, tickInterval:5, } } }); humChar =$.jqplot('humchartdiv', [humData], { title:'Temperature', series:[{showMarker:false, lineWidth:1,color:"red"}], sumbu:{ xaxis:{ renderer:$ .jqplot.DateAxisRenderer, tickOptions:{ formatString:'%M:%S' }, tickInterval:10 }, yaxis:{ min:0, max:100, tickInterval:10 } } }); } // Fungsi yang menampilkan dua fungsi pengukur showGauges() { tempGauge =new Gauge({ renderTo :'tempgauge', width :250, height :250, glow :true, units :'in', title :'Sump Level' , minValue :0, maxValue :50, majorTicks :['0','10','20','30','40','50'], minorTicks :5, strokeTicks :false, highlight :[ { from :0, hingga :12, warna :'rgba(50, 255, 61, .70)' }, { dari :12, hingga :20, warna :'rgba(205, 216, 0, .70)' }, { from :20, to :50, color :'rgba(255, 00, 0, .70)' }, ], colors :{ plate :'#824E00', majorTicks :'#f5f5f5', minorTicks :'#ddd ', judul :'#fff', satuan :'#000', angka :'#eee', jarum :{ start :'rgba(240, 128, 128, 1)', end :'rgba(255, 160, 122, .9)' } } }); humGauge =new Gauge({ renderTo :'humgauge', width :250, height :250, glow :true, units :'Deg F', title :'Temperature', minValue :0, maxValue :100, majorTicks :['0 ','10','20','30','40','50','60','70','80','90','100'], minorTicks :5, strokeTicks :false , sorotan :[ { dari :0, hingga :50, warna :'rgba(255, 0, 0, .70)' }, { dari :50, hingga :65, warna :'rgba(205, 216, 0, .70)' }, { dari :65, hingga :80, warna :'rgba(50, 255, 61, .70)' }, { dari :80, hingga :100, warna :'rgba(255, 0, 0, .70)' }, ], warna :{ plate :'#824E00', majorTicks :'#f5f5f5', minorTicks :'#ddd', title :'#fff', unit :'#000', numbers :'#eee', jarum :{ mulai :'rgba(240, 128, 128, 1)', akhir :'rgba(255, 160, 122, .9)' } } }); tempGauge.draw(); humGauge.draw(); }; // memanggil fungsi update setiap 3 detik setInterval(updateValues, 3000); // fungsi yang mengambil data terbaru dari Arduino dan memperbarui grafik dan pengukur function updateValues() { var actualTemp; var aktualHum; var gotData =salah; // mendapatkan data dari Arduino, dalam format JSON dan menggunakan JSONP untuk melakukan panggilan lintas domain $('#status').css({"color":"yellow"}); $('#status').text("Mengirim Permintaan..."); var jqxhr =$.ajax({ url:'http://10.9.9.12:1000/?callback=?', dataType:'jsonp', jsonpCallback:'datas'}) // jika permintaan berhasil... .done(function(data) { $('#status').css({"color":"green"}); $('#status').text("Request Diterima!"); // simpan diambil data dalam dua variabel dan tampilkan di JS console actualTemp =50 - data.sensor1; actualHum =data.sensor4; console.log("---------- Got new data -------- --"); console.log("Temperature:\t" + actualTemp); console.log("Humidity:\t" + actualHum); console.log("Sump Level:\t" + data.sensor1); console.log("Alarm Banjir:\t" + data.sensor2); console.log("Kehilangan Daya:\t" + data.sensor3); console.log("Suhu:\t" + data.sensor4); console.log("Kelembaban:\t" + data.sensor5); console.log("Aux 1:\t" + data.sensor6); console.log("Aux 2:\t" + data.sensor7); console.log("Aux 3:\t" + data.sensor8); console.log("Aux 4:\t" + data.sensor9); console.log("Aux 5:\t" + data.sensor10 ); console.log(""); console.log("Memperbarui nilai..."); // memperbarui c harts, menghapus nilai tertua var x =(Tanggal baru()).getTime(); if(tempData.length ==100) tempData.shift(); tempData.push([x, aktualTemp]); tempChar.series[0].data =tempData; tempChar.resetAxesScale(); tempChar.axes.xaxis.tickInterval =15; tempChar.axes.yaxis.min =0; tempChar.axes.yaxis.max =50; tempChar.replot(); if(humData.length ==100) humData.shift(); humData.push([x, aktualHum]); humChar.series[0].data =humData; humChar.resetAxesScale(); humChar.axes.xaxis.tickInterval =15; humChar.axes.yaxis.min =0; humChar.axes.yaxis.max =100; humChar.replot(); // perbarui pengukur tempGauge.setValue(actualTemp); humGauge.setValue(Hum aktual); console.log("...selesai!"); console.log(""); //memungkinkan transfer variabel ke halaman web var elArduino1 =document.getElementById('sensor1'); elArduino1.textContent =data.sensor1; var elArduino2 =document.getElementById('sensor2'); elArduino2.textContent =data.sensor2; var elArduino3 =document.getElementById('sensor3'); elArduino3.textContent =data.sensor3; var elArduino4 =document.getElementById('sensor4'); elArduino4.textContent =data.sensor4; var elArduino5 =document.getElementById('sensor5'); elArduino5.textContent =data.sensor5; var elArduino6 =document.getElementById('sensor6'); elArduino6.textContent =data.sensor6; var elArduino7 =document.getElementById('sensor7'); elArduino7.textContent =data.sensor7; var elArduino8 =document.getElementById('sensor8'); elArduino8.textContent =data.sensor8; var elArduino9 =document.getElementById('sensor9'); elArduino9.textContent =data.sensor9; var elArduino10 =document.getElementById('sensor10'); elArduino10.textContent =data.sensor10; var elArduino10 =document.getElementById('msgtimer'); elArduino10.textContent =data.msgtimer; }) // jika error, cetak di konsol JS .fail(function() { console.log( "Tidak dapat memperoleh data baru :("); }); }   

Monitor Rumah Dikembangkan oleh Kevin Strain

Tanggal dan Waktu:

MUDSHARK INDUSTRIES
Mengubah Dunia untuk masa depan yang lebih baik.

Status:

Tingkat Summp Nilai: inci dari atas

Alarm Banjir Status:

Daya Status:

Suhu Nilai: ° F

Kelembaban Nilai: %

Aux Input 1 Status:

Masukan Aux 2 Status:

Aux Input 3 Status:

Aux Input 4 Status:

Aux Input 5 Status:

Pesan email terkirim menit yang lalu

Skema

Antarmuka dan pemberi isyarat LED%20BAR%202.sch

Proses manufaktur

  1. Pemantau Tekanan Darah
  2. Membangun Jaringan Sensor Nirkabel di Rumah Anda
  3. Pantau suhu rumah Anda menggunakan Raspberry Pi
  4. RASPBERRY PI HOME AUTOMATION
  5. Membuat Mesin Tulis Pekerjaan Rumah DIY di Rumah
  6. Membuat Monitor Ambilight Menggunakan Arduino
  7. Pemantau Detak Jantung Menggunakan IoT
  8. Pemantau Tegangan Termokopel Pemanas Air Panas
  9. Robot Asisten Rumah Otonom
  10. Arduino Home Controller Diaktifkan oleh Alexa