Proses manufaktur
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
|
| ||||
| ||||
|
Ikhtisar
Sungai atau danau bisa menjadi sumber kesenangan dan relaksasi. Tetapi jika sungai menjadi kotor dan tercemar, semua kesenangan itu hilang. Banyak orang bergantung pada air sungai untuk memberi makan ternak mereka dan tidak mampu memberikan air kotor kepada hewan mereka.
Bayangkan tinggal di sebelah sungai (jika tidak), Anda tidak ingin bangun di tengah malam dengan rumah Anda kebanjiran karena sungai. Atau bagaimana jika tetangga Anda memutuskan untuk membuang bensin ke sungai, Anda tidak ingin hewan Anda sakit.
MyRiver memecahkan semua masalah itu, ia dapat beroperasi di daerah terpencil berkat Sigfox sehingga setiap orang memiliki akses ke perangkat. Perangkat akan membaca pH air, tingkat polusinya menggunakan metode inovatif, dan ketinggian airnya. Anda akan dapat memantau sungai secara langsung di ponsel atau komputer Anda di mana saja berkat Wia. Dengan cara ini Anda dapat mengetahui jika ada masalah dengan aliran dan memungkinkan Anda untuk bertindak sebelum terlambat. Ini akan segera memberi tahu Anda jika ada masalah dengan sungai.
Video
Gambar
Fungsionalitas
Perangkat ini didasarkan pada Arduino MKR FOX, dirancang untuk penggunaan jarak jauh, pengguna dapat menempatkan perangkat di sungai atau danau dan memantaunya dari mana saja. Berkat mode daya rendah SAM D, perangkat dapat bekerja untuk waktu yang lama dengan baterai 2AA.
Perangkat membaca setiap 30 menit, tidur setelahnya, periode tidur dapat diatur ulang, meskipun waktu tidur minimum harus 20 menit.
MKR FOX membaca pH sungai menggunakan sensor pH, juga mendapatkan ketinggian airnya, menggunakan sensor ketinggian air, dan mendeteksi jika tercemar oleh zat yang tidak larut dengan menyinari LED pada fotoresistor, jika pembacaan fotoresistor adalah rendah, itu berarti ada zat padat (minyak, bensin, merkuri, dll.) di sungai. Perangkat kemudian mengirimkan semua data ke Sigfox, di mana data tersebut diteruskan ke Wia, diproses dan divisualisasikan. Pengguna diberitahu tentang keadaan sungai. Di bawah ini adalah gambar ikhtisar fungsionalitas.
Buffer akan dikirim ke Sigfox dikodekan sebagai HEX, Sigfox akan menyampaikan data ke Wia, data kemudian akan melewati aliran, data akan diubah kembali menjadi string dan kemudian menjadi nilai sensor. Nilai tersebut kemudian akan diproses dan pengguna akan diberi tahu jika nilainya di luar batas.
Di bawah ini adalah gambar lain yang mengilustrasikan ikhtisar kode proyek, yang dijelaskan di bawah ini.
Baca Sensor
akan membaca nilai pH, ketinggian air, dan sensor fotoresistor dan menyimpannya dalam variabel.Format Buffer
akan menggabungkan semua nilai menjadi buffer 12 Byte yang dapat dikirim ke Sigfox.Mengurai Data
akan mengurai buffer ke Sigfox.MKR FOX hanya dapat mengirim 12 byte melalui Sigfox, ini berarti bahwa semua nilai sensor harus digabungkan menjadi 12 byte, nilai mentah maksimum setiap sensor adalah 1024 (karena semuanya analog), jadi setiap sensor mewakili sepertiga dari penyangga (4 byte). Arduino harus menggabungkan nilai-nilai dan menambahkan nol ke awal setiap nilai hingga nilainya memiliki 4 byte. Gambar di bawah mengilustrasikan proses ini.
Arduino menerima nilai sensor sebagai bilangan bulat, kemudian mengubah bilangan bulat menjadi string dan menambahkan nol ke awal setiap nilai hingga memiliki 4 byte, misalnya, jika nilai fotoresistor adalah 620, satu nol akan ditambahkan, 0 620. Tetapi jika sensor ketinggian air sama dengan 24, dua angka nol ditambahkan, 00 24. Perangkat kemudian menggabungkan nilai-nilai tersebut menjadi buffer 12 byte dan mengirimkan data ke SigFox.
Perangkat Beraksi
Di bawah ini adalah sejumlah foto yang menampilkan fungsionalitas proyek, untuk tampilan yang lebih baik, lihat video di atas.
Manfaat
Yang pengguna beroperasi ini proyek akan manfaat di:
Membangun Proyek
Langkah 1:Aparat yang Diperlukan
Proyek ini membutuhkan semua komponen untuk disolder bersama, tidak banyak hal selain sensor. Daftar bahan dicatat di bawah ini.
Langkah 2:Menghubungkan Sirkuit
Diagram sirkuit proyek dapat sedikit membingungkan karena komponen tidak ditempatkan pada papan tempat memotong roti, jika Anda mengalami kesulitan dengan itu, coba unduh file Fritzing di bawah dan pindahkan kabel di komputer Anda.
Gambar di bawah ini akan mengilustrasikan bagaimana rangkaian akan terlihat saat selesai.
Gambar di bawah ini akan memandu Anda menghubungkan kotak baterai dan antena ke MKR FOX. Perhatikan bahwa kotak baterai harus terhubung setelah sensor terhubung. Pengkabelan dan pengaturan lainnya dapat ditemukan di bawah membuat proyek / Final.
Langkah 3:Mengenali Kode
Ada 3 bagian utama dari kode:
Bagian ini dijelaskan di bawah.
struct GetValue // membuat Struktur untuk memudahkan perulangan{ int riverLevel() // mendapatkan level sungai { const int val =analogRead(A2); if(proDebug) { Serial.print("Level Sungai"); Serial.println(val); } nilai kembali; } int riverPh() // dapatkan ph sungai { const int val =(analogRead(A1) / 5 * 3.3); if(proDebug) { Serial.print(" Ph Sungai "); Serial.println(val); } nilai kembali; } int riverPol() // mendapatkan tingkat pencemaran sungai { const int val =analogRead(A3); if(proDebug) { Serial.print("Pencemaran Sungai"); Serial.println(val); } nilai kembali; }};
Struktur di atas berisi loop yang membaca setiap nilai sensor, ada loop terpisah untuk setiap nilai.
Data string(int level, int ph, int pol) // menggabungkan nilai sensor ke dalam buffer { nilai int[3] ={level, ph, pol}; String nilai baru; for(int i =0; i <3; i++) // akan menjalankan semua nilai, menambahkan 0 ke awal { if(values[i] <10) { newValues +="000"; Serial.println("Opsi 1"); } else if(nilai[i] <100) { nilai baru +="00"; Serial.println("Opsi 2"); } else if(nilai[i] <1000) { nilai baru +="0"; Serial.println("Opsi 3"); } kalau tidak {}; newValues +=nilai[i]; Serial.print("Jalankan"); Serial.print(i); Serial.print("/3"); Serial.println(Nilai baru); } mengembalikan newValues; }
Loop di atas memasukkan 3 nilai sensor dan kemudian menempatkannya ke dalam array. Kemudian loop melalui setiap nilai, menambahkan nol ke awal setiap nilai hingga nilainya berukuran 4 byte, kemudian menambahkan setiap nilai ke string yang kemudian dikembalikan.
void parseData(Data string) // kirim buffer ke SigFox { SigFox.beginPacket(); SigFox.print(data); int ret =SigFox.endPacket(); }
Bagian ini mengambil string untuk diurai dan kemudian mengirimkan nilainya ke Sigfox.
Langkah 4:Menyiapkan Integrasi Wia Sigfox
Langkah ini akan menggambarkan cara mengatur Wia untuk menerima pesan dari Sigfox, Wia adalah platform IoT profesional yang memungkinkan pengguna untuk memvisualisasikan data menggunakan widget di web atau di aplikasi seluler, juga memungkinkan pengguna untuk membuat kode blok yang disebut aliran, yang memungkinkan pengguna untuk memproses data. Data diwakili oleh suatu peristiwa.
Untuk memulai, pastikan Anda memiliki akun Sigfox dan akun Wia. Unduh juga aplikasi Wia di iOS atau Android untuk memungkinkan Anda menerima notifikasi. Gambar di bawah ini akan mengilustrasikan menghubungkan Sigfox dan Wia.
Data Uplink
URL
POST
Otorisasi
dengan nilai Pembawa
(nilai ini akan diedit nanti)application/json
Langkah 5:Menyiapkan Aliran Wia
Bagian ini akan memakan waktu sedikit lebih lama untuk diselesaikan, aliran akan mengubah data yang diterima dari HEX menjadi String, kemudian akan mengurai string menjadi 3 nilai sensor dan kemudian mengubahnya menjadi bilangan bulat, kemudian akan mengubah nilai pencemaran sungai dan tingkat sungai ke deskriptor Tinggi atau Ok dan nilai ph mentah ke nilai ph aktual, kemudian akan memberi tahu pengguna jika nilainya di luar batas.
Panduan di bawah ini akan mengilustrasikan proses ini selangkah demi selangkah. Anda akan diinstruksikan untuk memasukkan potongan kode tertentu di Wia Functions, potongan kode ini disisipkan di bawah, cukup salin dan tempel kode tersebut ke dalam fungsi. Data yang akan disertakan dalam email juga disisipkan di bawah, bekerja dengannya seperti dengan fungsinya.
Fungsi Wia
if(input.body){ output.body.name ="nilai"; output.body.data =toByteArrayStr(input.body.data.sigfoxData);}fungsi toByteArrayStr(sigfoxData){ biarkan hasil =Buffer(sigfoxData, 'hex'); kembalikan result.toString('utf8');}
if(input.body.data){ biarkan data =input.body.data; if(data =="POLLUTED") { output.body.name ="waterLevel"; output.body.data =data; } lain { sementara(1); }}
biarkan minVal =6.5;biarkan maxVal =8.5;if(input.body.data){ let data =input.body.data; if(data> maxVal || data
if(input.body.data){ biarkan data =input.body.data; if(data =="TINGGI") { output.body.name ="waterLevel"; output.body.data =data; } lain { sementara(1); }}
biarkan minVal =200;biarkan maxVal =0;if(input.body.data.sigfoxData){ biarkan data =input.body.data.sigfoxData; biarkan diprosesData =toByteArrayStr(data); biarkan newData =cutString(processedData); output.body.name ="airPolusi"; output.body.data =processData(newData);}fungsi toByteArrayStr(sigfoxData){ biarkan hasil =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}fungsi cutString(data){ biarkan newVal =data[8]; newVal +=data[9]; newVal +=data[10]; newVal +=data[11]; biarkan finalVal =parseInt(newVal); return finalVal;}function processData(data){ if(data
biarkan minVal =300;biarkan maxVal =600;if(input.body.data.sigfoxData){ biarkan data =input.body.data.sigfoxData; biarkan diprosesData =toByteArrayStr(data); biarkan newData =cutString(processedData); biarkan finalVal =(data baru / 73.1428571); biarkan nilaiToSend =finalVal.toFixed(2); output.body.name ="waterPh"; output.body.data =valueToSend;}fungsi toByteArrayStr(sigfoxData){ biarkan hasil =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}fungsi cutString(data){ biarkan newVal =data[4]; newVal +=data[5]; newVal +=data[6]; newVal +=data[7]; biarkan finalVal =parseInt(newVal); kembalikan newVal;}
biarkan minVal =0;biarkan maxVal =200;if(input.body.data.sigfoxData){ biarkan data =input.body.data.sigfoxData; biarkan diprosesData =toByteArrayStr(data); biarkan newData =cutString(processedData); output.body.name ="tingkat air"; output.body.data =processData(newData);}fungsi cutString(data){ biarkan newVal =data[0]; newVal +=data[1]; newVal +=data[2]; newVal +=data[3]; biarkan finalVal =parseInt(newVal); return finalVal;}fungsi toByteArrayStr(sigfoxData){ biarkan hasil =Buffer(sigfoxData, 'hex'); return result.toString('utf8');}function processData(data){ if(data> maxVal) { mengembalikan "TINGGI"; } else { kembalikan "Oke"; }}
Email Wia
Automatic Messaging SystemDataWarning - perangkat myWater ${trigger.source.device.id} mendeteksi masalah di aliran.Peringatan - Air Tercemar oleh Zat yang Tidak Dapat Dilarutkan.InformationDevice ${trigger.source.device.id}Mentah Data ${input.body.data}
Sistem Perpesanan OtomatisDataWarning - perangkat myWater ${trigger.source.device.id} mendeteksi masalah di aliran.Peringatan - Ph Air Tidak Sesuai. Air Terkontaminasi.InformationDevice ${trigger.source.device.id}Data Mentah ${input.body.data}
Automatic Messaging SystemDataWarning - perangkat myWater ${trigger.source.device.id} mendeteksi masalah di aliran.Peringatan - Ketinggian air terlalu Tinggi, Sungai mungkin banjir.InformationDevice ${trigger.source.device .id}Data Mentah ${input.body.data}
Menyiapkan Variabel
Saat data diterima Wia harus diproses, jika data berada di antara nilai minimum dan maksimum, nilai aman, batas sensor pH dan ketinggian air telah diatur, tetapi pengguna harus mengatur fotoresistor secara manual. batas, tes harus dilakukan untuk menentukan nilai ini, langkah-langkah di bawah ini akan menginstruksikan Anda bagaimana melakukannya.
pengaturan batal(){ pinMode(1, OUTPUT); Serial.begin(9600); while(!Serial) {}; digitalWrite(1, HIGH);} void loop(){ const int val =analogRead(A3); Serial.println(val); delay(5000);}
Ada variabel lain yang harus disetel pengguna, proDebug
, jika diaktifkan, Arduino membutuhkan koneksi melalui USB ke komputer dan Serial Monitor harus terbuka, Arduino mencetak ke Serial Monitor dalam mode ini, sangat ideal untuk pemecahan masalah. proDebug default ke false
untuk beroperasi di lapangan.
Perpustakaan
Akhir
Langkah terakhir adalah menghubungkan Arduino Anda ke PC / Mac dan mengunggah sketsa, pastikan kotak baterai terhubung ke Arduino dan sirkuitnya baik-baik saja. Langkah selanjutnya akan memandu Anda dalam membuat enklosur untuk proyek.
Saya telah memutuskan untuk membuat kandang saya dari sebotol air, saya pikir ini adalah cara yang bagus dan ekologis untuk merangkul proyek. Perangkat terlihat seperti gambar di bawah.
Jika Anda menyukai ide enklosur, Anda dapat menelusuri gambar di bawah ini, yang mengilustrasikan bagaimana enklosur dibuat, jangan ragu untuk membuatnya sendiri.
The last thing to do is place the device in the river. To do this, go to the river you wish to implement MyRiver on during High Tide , this is essential to ensure that the device is not alerting that the river is flooding when it is actually just the tide.
Place some tape on the top of the water bottle to prevent water from seeping into the bottle and destroying everything.
We went to a local, dirty river to test the project out, all the alarms went off correctly.
When placing the probe in the water, ensure that the water is at the bottom of the water level sensor but is covering the photoresistor entirely. Secure the project to the shore using tape or a hammer and screws, and it should look like this (or better).
Background
Relaxing in your house, looking out the window at the once beautiful and delightful river rushing in front of you. But instead of the beautiful fresh river, you see a green slimy one, you might want to move house in that case.
And if the river decides to flood into your house in the middle of the night while you are sleeping, you will certainly decide to move.
I thought of these problems and how to solve them all in one device, and I came up with MyRiver.
If you are in the city and living beside a river, it will warn you in time if the river decides to ruin your day in any way or if your neighbour is dumping oil in the river. Or if you are on a farm, MyRiver will warn you that the river is dirty before you give the water to your animals, and will give you time to bring the animals in before the river floods.
But just reading the pH of the river was not enough, as insoluble substances like mercury or other metals do not effect the Ph of the water. So we came up with a new method to detect those substances, unique to this project, a photoresistor reading the amount of light from an LED penetrating the water. This way any water impurity can be detected.
Proses manufaktur
Komponen dan persediaan Arduino MKR GSM 1400 × 1 SORACOM Air Global IoT SIM × 1 Arduino MKR MEM Shield × 1 Suhu dan Kelembaban GY21 × 1 Sensor Sinar UV SI1145 Adafruit × 1 Sensor Kelembaban Tanah SparkFun (dengan Terminal Sekrup) × 1
Komponen dan persediaan SparkFun Dual H-Bridge driver motor L298 × 1 Motor DC (generik) × 4 Arduino UNO × 1 LED (generik) × 8 Resistor 221 ohm × 8 Servo (Tower Pro MG996R) × 1 Sensor Ultrasonik - HC-SR04 (Generik) × 1 A
Komponen dan persediaan Arduino UNO × 1 Sensor Ultrasonik - HC-SR04 (Generik) × 1 Led putih × 1 LDR × 1 Breadboard (generik) × 1 Kabel jumper (generik) × 1 Tentang proyek ini Halo semuanya. Di smartphone kami, ada berbagai jeni
Komponen dan persediaan Arduino Mini 05 × 1 Relai (umum) × 1 Sensor Biometrik - Model:FPM10A × 1 Modul Regulator Tegangan Digilent × 1 Alat dan mesin yang diperlukan Besi solder (generik) Kawat Solder, Bebas Timah Tape, Listrik