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

Rumah Kaca Domotic

Komponen dan persediaan

Arduino MKR1000
× 1
Arduino UNO
× 1
Sensor Suhu DHT22
× 1
Arduino Wifi Shield 101
× 1
Perangkat Android
× 1
Pelindung Kontrol Motor DC dengan BTN8982 untuk Arduino Infineon
× 1

Aplikasi dan layanan online

Arduino IDE
Eclipse

Tentang proyek ini

Ikhtisar

Kondisi lingkungan rumah kaca terus berubah, untuk itu diperlukan pemantauan yang efisien.

Ada banyak keuntungan menggunakan sistem otomatis, misalnya mengurangi pekerjaan atau yang terpenting pengguna dapat memeriksa investasi mereka sendiri dari rumah melalui PC atau smartphone.

Keuntungan penting lainnya adalah kemungkinan untuk menyimpan data ke dalam Basis Data. Ini dapat membuat perbedaan antara mendapatkan atau kehilangan uang.

Selain itu, berkat kontrol sistem waktu nyata, kami dapat segera melakukan intervensi, mencegah masalah budidaya.

Sistem pemantauan otomatis di rumah kaca terdiri dari sensor yang membaca data lingkungan dan aktuator, yang disebut "Budak". Mereka berkomunikasi melalui Nirkabel dengan perangkat pusat, yang disebut "Master". Yang terakhir mengirimkan kemungkinan perubahan ke budak (seperti perubahan ambang batas) dan data melalui WiFi ke server web juga.

1. Bagaimana Cara Kerjanya?

Kami dapat membagi proyek ini menjadi tiga bagian berbeda:

  • Guru
  • Budak
  • Server Web

Kami telah menggunakan Arduino/Genuino MKR1000 untuk Master, Arduino/Genuino Uno untuk Slave.

Master berkomunikasi dengan Web Server melalui WiFi (WINC1500 terintegrasi), Slave memperoleh suhu dan kelembaban dengan sensor DHT22, dan kemudian mengirimkan data ini ke Master melalui WiFi (WiFi shield WINC1500).

2. Guru

Master berada dalam “mode Access Point” dan menunggu koneksi Slave untuk menerima suhu dan kelembapan yang diuraikan dan dikirim ke Server Web.

Master memeriksa apakah ada data yang tersedia, dalam hal ini ia membuat paket UDP yang dibentuk oleh ambang batas dan CRC baru. Faktanya, ini menghitung CRC yang akan digunakan oleh Slave untuk memvalidasi pengaturan yang diterima.

Setelah Master keluar dari "mode Access Point", Master akan terhubung ke WiFi, untuk mengirim data ke WebServer di mana mereka akan dimasukkan ke dalam grafik.

3. Budak

Slave memperoleh suhu dan kelembaban dengan sensor DHT22 dan setelah 5 menit mengirimkan data ke Master. Itu juga membuat paket UDP, terhubung ke Master dan kemudian mengirim data.

Nanti menunggu jika ada beberapa data yang tersedia, seperti ambang batas baru. Dalam hal ini, Slave menerima pengaturan baru dan menghitung CRC menggunakan rumus Dallas-Maxim.

Selanjutnya CRC yang dihitung dibandingkan dengan CRC yang diterima dari Master. Jika kedua CRC sama, Slave menyimpan pengaturan baru di EEPROM.

4. Server Web

Server Web menyimpan semua data yang nantinya dapat disimpan dalam riwayat.

Untuk melakukan itu, kami telah menggunakan skrip PHP yang terhubung ke database dan menampilkan data dalam dua cara berbeda

  • dalam grafik, menggunakan skrip PHP lain
  • dalam aplikasi Android, dalam format JSON menggunakan skrip PHP lain

5. APLIKASI

Aplikasi ini memungkinkan kami untuk melihat data ke dalam Basis Data.

Di layar pertama, kita dapat memilih rentang waktu untuk ditampilkan dan dengan tombol "GRAFIS", ia menghubungi layanan web dan mendapatkan data.

Aplikasi menampilkan data ke dalam grafik.


Kode

  • Buat grafik
  • Skrip situs web terhubung
  • Buat tabel
  • Guru Domotic Rumah Kaca
  • Budak Domotic Rumah Kaca
  • getdati
Buat grafikPHP
Kami telah menggunakan ini untuk membuat grafik
SetScale("textlin");$theme_class=new UniversalTheme;$graph->SetTheme($theme_class);$graph->img->SetAntiAliasing( false);$graph->title->Set('Title');$graph->SetBox(false);$graph->img->SetAntiAliasing();$graph->yaxis->HideZeroLabel();$graph ->yaxis->HideLine(false);$graph->yaxis->HideTicks(false,false);$graph->xgrid->Show();$graph->xgrid->SetLineStyle("solid");$ graph->xaxis->SetTickLabels($time_axis);$graph->xgrid->SetColor('#E3E3E3');$graph->xaxis->SetLabelAngle(90);$graph->legend->SetPos(0.5, 0.08,'center','top');// Buat baris pertama$p1 =new LinePlot($parameter1);$graph->Add($p1);$p1->SetColor("#6495ED");$ p1->SetLegend('your_parameter1');$graph->yscale->SetGrace(0);// Buat baris kedua$p2 =new LinePlot($parameter2);$graph->Add($p2);$p2 ->SetColor("#B22222");$p2->SetLegend('your_parameter2');$graph->yscale->SetGrace(0);$graph->legend->SetFrameWeight(1);// Output line$ grafik->Stroke();?>
Skrip situs web terhubungPHP
Kami telah menggunakan ini untuk menyimpan data ke dalam DB
";echo "parameter1". $_GET['parameter1']. "
";echo "parameter2". $_GET['parameter2']. "
";// Buat koneksi$conn =mysqli_connect($servername, $username, $password, $dbname);// Periksa koneksiif (!$conn) { die("Koneksi gagal:" . mysqli_connect_error() );}$sql ="MASUKKAN KE rumah kaca (nama, parameter1, parameter2)VALUES ('".$nama."', '".$parameter1."', '".$parameter2."')";if ( mysqli_query($conn, $sql)) { echo "Data baru berhasil dibuat";} else { echo "Error:" . $sql . "
" . mysqli_error($conn);}mysqli_close($conn);?>
Buat tabelSQL
Kami telah menggunakan skrip ini untuk membuat tabel
CREATE TABLE IF NOT EXISTS `greenhouse` ( `id` int(11) NOT NULL, `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `temp` float NOT NULL, `umid` float NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Master Domotic Rumah KacaC/C++
Ini adalah kode Master
/*Proyek rumah kaca otomatisasi*//*Pengarang:Antonio La Mura, Umberto Festa*//*Tanggal:03/03/2016*//*Ide kami adalah untuk memungkinkan pengguna, yang membeli buah-buahan dan sayuran yang ditanam di rumah kaca, untuk mengetahui secara pasti semua tahapan perkebunan yang telah dimiliki produk, seperti penggunaan pupuk kimia dan produk sejenis lainnya. Kode QR akan diletakkan pada produk yang dijual yang akan dibaca oleh aplikasi smartphone tertentu. Ini memberikan informasi tentang kondisi lingkungan di mana produk telah tumbuh dan produk kimia yang digunakan. Sistem pemantauan otomatis di rumah kaca terdiri dari sensor yang membaca data lingkungan dan aktuator, yang disebut Budak. Mereka berkomunikasi melalui Nirkabel dengan perangkat pusat, yang disebut Master. Yang terakhir mengirimkan kemungkinan perubahan ke budak (seperti perubahan ambang batas) dan data melalui WiFi ke server web juga. Ketika produk siap untuk dijual, pembuatan kode QR diminta ke layanan web dan akan dimasukkan ke dalam paket. Bagian terakhir dari sistem adalah aplikasi seluler yang bertanggung jawab atas pemindaian kode QR dan menunjukkan informasi relatif kepada pengguna.*//*Master*//*DEVO AGGIUNGERE SOLO LA PARTE CHE MI SERVE PER RICEVERE LE NUOVE SOGLIE CHE VENGONO INVIATE DALL'APP*//*Libraries used*/#include #include #include #include #include /* Variabel untuk koneksi*/char ssid[] ="SSID"; /*SSID jaringan Anda (nama)*/char pass[] ="pass"; /*Kata sandi jaringan Anda (gunakan untuk WPA, atau gunakan sebagai kunci untuk WEP)*/int keyIndex =0; /* Nomor indeks kunci jaringan Anda (hanya diperlukan untuk WEP)*/char ssid_ap[] ="Arduino"; /*Membuat nama AP*/char pass_ap[] =""; /*(Belum didukung)*/int status =WL_IDLE_STATUS;tidak ditandatangani int localPort =2390; /*Port lokal untuk mendengarkan di*/char server[] ="www.cormaz.altervista.org"; /*Nama alamat untuk Google (menggunakan DNS)*/WiFiServer server_ap(80);WiFiClient client_ap;WiFiUDP Udp;RTCZero rtc;WiFiClient client;char packetBuffer[255]; /*Buffer untuk menampung paket yang masuk*/char ReplyBuffer[255]; /*Sebuah string untuk dikirim kembali*//*Variabel untuk ambang baru*/float humax =0;float humin =0;float tumax =0;float tumin =0;/*Bekerja seperti Access Point (flag =false), menghubungkan ke WebServer (flag =true)*/boolean flag =false;boolean threeshold_available =false;void setup() { /*Inisialisasi serial dan tunggu port terbuka:*/ Serial.begin(9600); while (!Serial) {; /*Tunggu hingga port serial terhubung. Diperlukan hanya untuk port USB asli*/ } Serial.println();}void loop() { int packetSize; suhu ganda; dengung ganda; int id; byte crc; String strURL; //Periksa keberadaan perisai:/*************************************** ***********************************************/ jika ( WiFi.status() ==WL_NO_SHIELD) { Serial.println("WiFi shield tidak ada"); /*Jangan lanjutkan:*/ while (true); } /************************************************ **************************************/ //Mencoba terhubung ke jaringan WiFi:/* ************************************************** ***********************************/ while (status !=WL_CONNECTED) { Serial.print("Membuat Jaringan bernama:"); Serial.println(ssid_ap); /*Hubungkan ke jaringan WPA/WPA2. Ubah baris ini jika menggunakan jaringan terbuka atau WEP:*/ status =WiFi.beginAP(ssid_ap); /*Tunggu 10 detik untuk koneksi:*/ delay(10000); server_ap.begin(); } Serial.println("Tersambung ke wifi"); /************************************************ *************************************/ //Mulai komunikasi UDP /****** ************************************************** ******************************/ Udp.begin(localPort); printWifiStatus(); client_ap =server_ap.available(); if (client_ap) { /*Jika Anda mendapatkan klien*/ /*Saya menunggu beberapa informasi*/ Serial.println("klien baru"); /*Mencetak pesan dari port serial*/ /*Jika ada data yang tersedia, baca paket*/ packetSize =Udp.parsePacket(); if (packetSize) { Serial.print("Paket yang diterima berukuran "); Serial.println(Ukuran paket); Serial.print("Dari "); IPAddress remoteIp =Udp.remoteIP(); Serial.print(Ip jarak jauh); Serial.print(", port "); Serial.println(Udp.remotePort()); /*Membaca paket ke dalam packetBuffer*/ int len ​​=Udp.read(packetBuffer, 255); if (len> 0) packetBuffer[len] =0; Serial.println("Isi :"); Serial.println(paketBuffer); char* perintah =strtok((char *)packetBuffer, ";"); int jumlah =0; while (perintah !=0) { /*Membagi informasi*/ switch (hitungan) { case 0:id =atoi(perintah); merusak; kasus 1:temp =atof(perintah) / 10; merusak; kasus 2:hum =atof(perintah) / 10; merusak; } perintah =strtok(0, ";"); menghitung++; } Serial.print("Paket diterima dari "); Serial.print(id); Serial.print("T:"); Serial.print(temp, 1); Serial.print("H:"); Serial.println(hum, 1); /************************************************ *************************************/ delay(20); /*Hitung CRC-8, jadi buat byte array*/ /************************************ ************************************************/ byte bhmax =( byte)humaks; byte bhmin =(byte)humin; byte btmax =(byte)tumax; byte btmin =(byte)tumin; byte crc32_str[4] ={ bhmax, bhmin, btmax, btmin }; crc =CRC8(crc32_str); Serial.println("CRC:"); Serial.println(crc); /************************************************ *******************************/ if (threeshold_available ==true) { snprintf(ReplyBuffer, sizeof(ReplyBuffer), " %d;%d;%d;%d;%d;%d", id, (int)humax, (int)humin, (int)tumax, (int)tumin, (int)crc); /*Kirim balasan, ke alamat IP dan port yang mengirimkan paket yang kami terima*/ Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); } } /*Cetak serial monitor*/ /*Tutup koneksi:*/ client_ap.stop(); Serial.println("klien terputus"); bendera =benar; }/*AP Baik*/ /****************************************** **************************************/ /*Hubungkan ke server dan kirim data ke Basis Data */ /********************************************* ********************************/ if (flag ==true) { /*Mencoba menyambung ke jaringan Wifi :*/ while (status !=WL_CONNECTED) { Serial.print("Mencoba menyambung ke SSID:"); Serial.println(ssid); /*Hubungkan ke jaringan WPA/WPA2. Ubah baris ini jika menggunakan jaringan terbuka atau WEP:*/ status =WiFi.begin(ssid, pass); /*Tunggu 10 detik untuk koneksi:*/ delay(10000); } Serial.println("Tersambung ke wifi"); printWifiStatus(); strURL ="DAPATKAN /YourAddress.php?id="; strURL +=id; strURL +="¶meter1="; strURL +=suhu; strURL +="¶meter2="; strURL +=hum; strURL +="HTTP/1.1"; Serial.println("\nMemulai koneksi ke server..."); // jika Anda mendapatkan koneksi, laporkan kembali melalui serial:if (client.connect(server, 80)) { Serial.println("connected to server"); // Buat permintaan HTTP:client.println(strURL); client.println("Host:www.cormaz.altervista.org"); client.println("Koneksi:tutup"); klien.println(); klien.berhenti(); Serial.println("Oke!"); } /*Jika server terputus, hentikan klien:*/ if (!client.connected()) { Serial.println(); Serial.println("Terputus dari server."); klien.berhenti(); /*Tidak melakukan apa-apa selamanya:*/ while (true); } bendera =salah; } /************************************************ ********************************/}/*Hitung algoritma CRC-8 - berdasarkan rumus Dallas/Maxim*/ byte CRC8(const byte * data) { byte crc =0x00; while (*data) { byte ekstrak =*data++; for (byte tempI =8; tempI; tempI--) { byte sum =(crc ^ ekstrak) &0x01; crc>>=1; if (jumlah) { crc ^=0x8C; } ekstrak>>=1; } } return crc;}void printWifiStatus() { /*Cetak SSID jaringan tempat Anda terhubung:*/ Serial.print("SSID:"); Serial.println(WiFi.SSID()); /*Cetak alamat IP pelindung WiFi Anda:*/ IPAddress ip =WiFi.localIP(); Serial.print("Alamat IP:"); Serial.println(ip); /*Mencetak kekuatan sinyal yang diterima:*/ long rssi =WiFi.RSSI(); Serial.print("kekuatan sinyal (RSSI):"); Serial.print(rssi); Serial.println(" dBm");}
Budak Domotic Rumah KacaC/C++
Ini adalah kode Budak
/*Proyek rumah kaca otomatisasi*//*Penulis:Antonio La Mura, Umberto Festa*//*Tanggal:21/03/2016*//*Ide kami adalah mengizinkan pengguna, yang membeli buah dan sayuran yang ditanam di rumah kaca, untuk mengetahui secara pasti semua tahapan perkebunan yang telah dimiliki produk, seperti penggunaan pupuk kimia dan produk sejenis lainnya. Kode QR akan diletakkan pada produk yang dijual yang akan dibaca oleh aplikasi smartphone tertentu. Ini memberikan informasi tentang kondisi lingkungan di mana produk telah tumbuh dan produk kimia yang digunakan. Sistem pemantauan otomatis di rumah kaca terdiri dari sensor yang membaca data lingkungan dan aktuator, yang disebut Budak. Mereka berkomunikasi melalui Nirkabel dengan perangkat pusat, yang disebut Master. Yang terakhir mengirimkan kemungkinan perubahan ke budak (seperti perubahan ambang batas) dan data melalui WiFi ke server web juga. Ketika produk siap untuk dijual, pembuatan kode QR diminta ke layanan web dan akan dimasukkan ke dalam paket. Bagian terakhir dari sistem adalah aplikasi seluler yang bertanggung jawab atas pemindaian kode QR dan menunjukkan informasi relatif kepada pengguna.*//*Slave*//*Libraries used*/#include #include #include #include #include //Define all PIN#define HUMIDIFIER A4#define HEATER A5#define DHT22_PIN 4//Define motor#define IS_1 0 #define IS_2 1#define IN_1 3#define IN_2 11#define INH_1 12#define INH_2 13#define TCONST 100 //Waktu Tunda antar Langkah//Variabel untuk mengatur ulang milis()extern unsigned long timer0_millis;int status =WL_IDLE_STATUS;char ssid [] ="Arduino"; // SSID jaringan Anda (nama)char pass[] =""; // kata sandi jaringan Anda (gunakan untuk WPA, atau gunakan sebagai kunci untuk WEP)int keyIndex =0; // Nomor indeks kunci jaringan Anda (hanya diperlukan untuk WEP) unsigned int localPort =2390; // port lokal untuk mendengarkan onchar packetBuffer[255]; //buffer untuk menahan paket masukWiFiUDP Udp;//Define DHT22DHT22 myDHT22(DHT22_PIN);//Variabel untuk sendfloat hmin =0;float hmax =0;float tmin =0;float tmax =0;int duty_motor =0;float moisture; float temperature;//Variabel untuk dikirim setiap 10 detik interval panjang yang tidak ditandatangani =600000;pengaturan batal() { Serial.begin(9600); while (!Serial) {; // tunggu port serial terhubung. Diperlukan hanya untuk port USB asli } //Inisialisasi PIN (INPUT - OUTPUT) pinMode(HEATER, OUTPUT); digitalWrite(PEmanas, RENDAH); pinMode(PELEMBAB, OUTPUT); digitalWrite(LEMBAB, RENDAH); //Setel PIN untuk mode pin kipas(IN_1, OUTPUT); pinMode(IN_2, OUTPUT); pinMode(INH_1, OUTPUT); pinMode(INH_2, OUTPUT); //Reset reset_ports(); digitalWrite(INH_1, 1); digitalWrite(INH_2, 1); Serial.println("Awal... "); delay(2000);}void loop() { // jika ada data, baca paket int packetSize =Udp.parsePacket(); unsigned long time =milis(); unsigned long currentMillis =milis(); DHT22_ERROR_t kode kesalahan; int saya =0; nama karakter[] ="clie1"; kelembaban =myDHT22.getHumidity() * 10; suhu =myDHT22.getTemperatureC() * 10; char untukKirim[32]; errorCode =myDHT22.readData(); byte crc; int crc_ric; //Periksa kesalahan sensor kelembaban dan suhu DHT22 /*************************************** ****************************************/ switch (errorCode) { kasus DHT_ERROR_NONE:char buf[128]; sprintf(buf, "Bacaan bilangan bulat saja:Suhu %hi.%01hi C, Kelembaban %i.%01i %% RH", myDHT22.getTemperatureCInt() / 10, abs(myDHT22.getTemperatureCInt() % 10), myDHT22. getHumidityInt() / 10, myDHT22.getHumidityInt() % 10); merusak; kasus DHT_ERROR_CHECKSUM:istirahat; kasus DHT_BUS_HUNG:istirahat; kasus DHT_ERROR_NOT_PRESENT:istirahat; kasus DHT_ERROR_ACK_TOO_LONG:istirahat; kasus DHT_ERROR_SYNC_TIMEOUT:istirahat; kasus DHT_ERROR_DATA_TIMEOUT:istirahat; kasus DHT_ERROR_TOOQUICK:istirahat; } /************************************************ ********************************/ //Mencetak nilai, ketika berubah /******* ************************************************** **************************/ if (kelembaban !=myDHT22.getHumidity() * 10 || suhu !=myDHT22.getTemperatureC() * 10) { Serial.print("T:"); Serial.print(myDHT22.getTemperatureC(), 1); Serial.print("C"); Serial.print("H:"); Serial.print(myDHT22.getHumidity(), 1); Serial.println("%"); } /************************************************ ********************************/ //Kirim parameter setiap 10 menit /********* ************************************************** *************************/ if (milis()> interval) { //Koneksi ke AP /************ ************************************************** ******************/ // periksa keberadaan pelindung:if (WiFi.status() ==WL_NO_SHIELD) { Serial.println("WiFi shield not present "); // jangan lanjutkan:while (true); } // mencoba menyambung ke jaringan Wifi:while ( status !=WL_CONNECTED) { Serial.print("Mencoba menyambung ke SSID:"); Serial.println(ssid); // Hubungkan ke jaringan WPA/WPA2. Ubah baris ini jika menggunakan jaringan terbuka atau WEP:status =WiFi.begin(ssid); // tunggu 10 detik untuk koneksi:delay(10000); } Serial.println("Tersambung ke wifi"); /************************************************ *******************************/ Serial.println("\nMemulai koneksi ke server..."); // jika Anda mendapatkan koneksi, laporkan kembali melalui serial:Udp.begin(localPort); snprintf(mengirim, sizeof(mengirim), "%s;%d;%d", nama, (int)kelembaban, (int)suhu); // kirim balasan, ke alamat IP dan port yang mengirimi kami paket yang kami terima Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.tulis(untukKirim); Udp.endPacket(); Serial.println("Selesai mengirim"); resetMillis(); while (milis() <10000) { ukuran paket =Udp.parsePacket(); if (packetSize) { /*Baca paket ke packetBuffer*/ int len ​​=Udp.read(packetBuffer, 255); if (len> 0) packetBuffer[len] =0; Serial.println("Isi :"); Serial.println(paketBuffer); char* perintah =strtok((char *)packetBuffer, ";"); int jumlah =0; while (perintah !=0) { /*Membagi informasi*/ switch (hitungan) { case 0:snprintf(name, sizeof(name), "%s", command); merusak; kasus 1:hmax =atof(perintah) / 10; //atof(char* ) mi converte un tipo char* dalam double break; kasus 2:hmin =atof(perintah) / 10; merusak; kasus 3:tmax =atof(perintah) / 10; merusak; kasus 4:tmin =atof(perintah) / 10; merusak; kasus 5:crc_ric =atoi(perintah); merusak; } perintah =strtok(0, ";"); menghitung++; } Serial.print("Jawaban:"); Serial.print(nama); Serial.print(";"); Serial.print(hmax, 1); Serial.print(";"); Serial.print(hmin, 1); Serial.print(";"); Serial.print(tmax, 1); Serial.print(";"); Serial.println(tmin, 1); Serial.print("CRC diterima:"); Serial.println(crc_ric); //hitung CRC-8, dan saya mendapatkan array byte /************************************ ********************************************/ byte bhmax =(byte )hmaks; byte bhmin =(byte)hmin; byte btmax =(byte)tmax; byte btmin =(byte)tmin; byte crc32_str[4] ={ bhmax, bhmin, btmax, btmin }; crc =CRC8(crc32_str); Serial.println("CRC:"); Serial.println(crc); /************************************************ *******************************/ if (crc_ric ==(int)crc) { //Simpan di EEPROM EEPROM_writeDouble (0, tmaks); EEPROM_writeDouble(4, tmin); EEPROM_writeInt(8, hmax); EEPROM_writeInt(10, hmin); } } } penundaan(10); } /************************************************ ********************************/ WiFi.disconnect(); //Mengelola HUMIDIFIER, HEATER, dan fan sesuai dengan nilai sensor /********************************* ************************************************** */ //HEATER if (myDHT22.getTemperatureC()>=tmax) { digitalWrite(HEATER, HIGH); } if (myDHT22.getTemperatureC() <=tmin + 1) { digitalWrite(HEATER, LOW); } //HUMIDIFIER if ((int)myDHT22.getHumidity()>=hmax) { digitalWrite(HUMIDIFIER, HIGH); } if ((int)myDHT22.getHumidity() <=hmin + 1) { digitalWrite(HUMIDIFIER, LOW); } //Fan, Motor Brushless if (myDHT22.getTemperatureC()>=tmax + 4) { //Rotasi motor sesuai dengan temperatur, duty -> 0 per t =tmax+4 dan duty -> 100 per t> tmax+10 //Rotazione del motore al variare della temperaturea, duty -> 0 per t =tmax+4 e duty -> 100 per t> tmax+10 duty_motor =map(i , tmax + 4, tmax + 10, 0, 100); if (tmax> tmax + 10) { duty_motor =100; } analogWrite(IN_2, duty_motor); penundaan (TCONST); } if (myDHT22.getTemperatureC() <=(tmax + tmin) / 2) { reset_ports(); //Rotasi motor sesuai dengan temperatur, duty -> 0 per t =tmax+4 dan duty -> 255 per t> tmax+10 duty_motor =0; analogWrite(IN_2, duty_motor); penundaan (TCONST); } /************************************************ **************************************/ delay(1000);}//Save double in EEPROMvoid EEPROM_writeDouble(int ee, double value) { byte* p =(byte*)(void*)&nilai; for (int i =0; i >=1; if (jumlah) { crc ^=0x8C; } ekstrak>>=1; } } return crc;}//Digunakan untuk mereset milis()void resetMillis() { cli(); timer0_milis =0; sei();}
getdatiPHP
Kami telah menggunakan ini untuk menghubungkan aplikasi kami dengan database
";//pilih database untuk bekerja dengan$selected =mysql_select_db("serra",$dbhandle) or die("Tidak dapat memilih contoh"); $datada =$_GET["datada"];$dataa =$_GET["dataa"];//eksekusi query SQL dan kembalikan record$result =mysql_query("SELECT hum,temp,date FROM record WHERE date>=' ".$datada."' dan tanggal <='".$dataa."'");$records=array();//mengambil data dari database while ($row =mysql_fetch_array($result)) { $ tmp =array("hum"=>$row{'hum'}, "temp"=>$row{'temp'}, "date"=>$row{'date'}); array_push($catatan,$tmp); //echo "HUM:".$row{'hum'}." TEMP:".$row{'temp'}."Tanggal:". //tampilkan hasilnya $row{'date'}."
";}echo json_encode($records);//tutup koneksimysql_close($dbhandle);?>
Aplikasi GrenHouse
Di halaman pertama Anda harus mengatur tanggal menggunakan dua DatePicker. Ketika Anda menekan tombol "GRAFIS", itu membuat panggilan HTTP GET ke skrip PHP "getdati" mengirimkan parameter dan tanggal yang telah Anda pilih. Kemudian menerima JSON dan memecahkan kode itu, setelah itu membuat grafik menggunakan perpustakaan GraphViewhttps://github.com/cormaz/app_greenhouse.git

Skema

Koneksi:Arduino UNO - DHT22 - Relay

Proses manufaktur

  1. Animasi Bitmap Pada ILI9341 TFT Touchscreen Display Shield
  2. Pengontrol DMX yang Dioperasikan Web
  3. Arduino Spybot
  4. FlickMote
  5. TV Buatan Sendiri B-Gone
  6. Jam Master
  7. HSVClock
  8. Mainan yang Dikendalikan Android Menggunakan Raspberry Motor Shield
  9. Temukan Saya
  10. Arduino Power