UnifiedWater v1 – Kit Lengkap Sensor Kualitas Air Arduino
Komponen dan Perlengkapan
Arduino MKR GSM 1400
×
1
Adafruit NeoPixel Ring: WS2812 5050 RGB LED
×
1
GY21 Suhu dan Kelembaban
×
1
Sensor Kekeruhan, Output Phototransistor
×
1
Adafruit Waterproof DS18B20 Digital temperature sensor
×
1
DFRobot Gravity: Analog Spear Tip pH Sensor / Meter Kit
×
1
SparkFun Pushbutton switch 12mm
×
1
Kabel Jumper (umum)
×
1
Resistor 220 ohm
×
1
Alat dan Mesin yang Diperlukan
Pakuin (umum)
Aplikasi dan Layanan Online
Arduino Web Editor
SORACOM Air IoT Connectivity Platform
SORACOM Harvest
SORACOM Lagoon
Tentang Proyek Ini
Ringkasan
Sungai. Esensial untuk kelangsungan hidup, perdagangan dan sebagainya. Upaya besar telah dilakukan dalam sepuluh tahun terakhir untuk mengurangi polusi tubuh air di dunia. Sungai adalah sumber polusi, karena orang tidak pergi ke laut untuk membuang sampah mereka. Mereka membuangnya di sungai.
Sungai tersebut kemudian tumpah ke laut, ke samudera dan sikat gigi yang sekali dibuang ke sungai menjalar ke seluruh dunia dan mendarat di sisi lain.
Di dunia yang mencoba mengatasi polusi, data sangat penting. Harus mudah bagi perusahaan dan bisnis untuk bekerjasama pada proyek global untuk mengurangi polusi air. Di sinilah UnifiedWater hadir.
Sebuah perangkat yang cukup murah dan dapat diskalakan yang dapat dengan mudah mengumpulkan dan menganalisis data ini, yang sangat diperlukan untuk mengetahui seberapa kotor suatu sungai. WaterAid hadir dalam 2 mode, satu yang cocok untuk perusahaan dan satu lagi untuk individu.
Beberapa perangkat dapat bekerja bersama, ditempatkan di titik-titik berbeda di sepanjang sungai atau di tubuh air yang berbeda. Perangkat ini mengumpulkan data pada interval waktu tertentu dan mengirimkannya ke database yang sama. Ini memungkinkan bisnis untuk memeriksa status sungai atau danau yang dipantau dengan satu klik.
Versi portabel perangkat juga tersedia. Dalam versi ini, individu dapat membawa perangkat bersama mereka dan ketika mereka ingin mengambil sampel air, mereka menekan tombol pada perangkat dan menempatkannya dalam air selama 30 detik. Data kemudian akan tersedia pada dashboard online.
Dengan mengumpulkan suhu air, pH dan kelembaban serta suhu dan kelembaban atmosfer, WaterAid dilengkapi dengan semua sensor yang Anda butuhkan untuk memantau polusi sungai.
Video
Gambar
Fungsionalitas
WaterAid memungkinkan pengguna, perusahaan atau individu untuk mengumpulkan data dengan aman dan akurat dan memvisualisasikan semua data ini di satu tempat berkat cloud Soracom. Proyek ini terdiri dari front end dan backend.
Front End
Front end proyek adalah perangkat fisik yang digunakan untuk mengumpulkan data dan mengirimkannya ke cloud. Perangkat dapat diatur ke mode 1 atau 2. Dalam mode 1, perangkat mencatat satu set data dengan tekanan tombol, berguna untuk pemantauan sesekali tubuh air. Mode 2 mengatur perangkat untuk mengambil pembacaan pada interval waktu yang ditentukan dan mendorong data ini ke cloud.
Sebuah MKR GSM digunakan untuk front end karena mudah digunakan dan andal. Ia juga dapat mengakses Soracom melalui GSM. Berikut adalah langkah-langkah yang diambil oleh perangkat saat mengumpulkan data.
Baterai
Perangkat dapat dayakan melalui berbagai cara. Ia dapat dayakan oleh baterai LiPo melalui port yang disediakan pada perangkat, oleh power bank atau dengan menghubungkan baterai melalui port VIN pada perangkat.
Umur pakai perangkat sangat bergantung pada daya baterai. Perangkat masuk ke mode tidur antara pembacaan untuk menghemat energi seakir mungkin.
LED Ring
Perangkat juga dilengkapi dengan LED ring. Ini memberikan umpan balik kepada pengguna tentang apa yang dilakukan perangkat saat ini. Ada 3 mode yang dapat dimiliki ring.
Multicolour menunjukkan bahwa perangkat sedang menyiapkan atau memproses data
Flashing Red peringatan, biasanya berarti perangkat harus ditempatkan dalam air meskipun juga dapat menunjukkan kesalahan
Progressing Blue or Green menunjukkan bahwa perangkat sedang mengambil sampel dan harus ditempatkan dalam air.
Mengambil Sampel
Semua sensor perangkat harus ditempatkan dalam air saat perangkat mengambil sampel. Tunda 6 detik ditempatkan sebelum sampel diambil untuk memanaskan sensor. Untuk hasil terbaik, sensor harus direndam saat pemanasan berlangsung.
Parsing Data
Data harus dikirim ke Soracom dalam bentuk string JSON. Ini memberikan semua kunci yang digunakan sebuah nilai. Data kemudian akan mudah ditafsirkan oleh backend. Berikut adalah contoh payload yang akan dikirim.
Backend proyek merujuk pada Soracom. Data dikumpulkan dan divisualisasikan di backend pada dashboard. Dashboard ini dibuat menggunakan Soracom Lagoon.
Dashboard
Dashboard meringkas semua data yang dikumpulkan dari perangkat. Ini menampilkan tempat data dikumpulkan pada peta, warnanya bervariasi sesuai dengan seberapa kotornya air. Data kemudian digrafik pada diagram garis di bawahnya dan kemudian diringkas sepenuhnya pada tabel.
Pengguna juga akan menerima peringatan melalui email jika nilai pH atau kekeruhan air tidak normal. Berikut adalah beberapa tangkapan layar dashboard.
Skalabilitas
Perangkat dapat dengan mudah diskalakan dan semua data dapat dikumpulkan dan diilustrasikan pada dashboard yang sama. Beberapa perangkat dapat streaming data ke Soracom dan memiliki data divisualisasikan pada dashboard.
Harga perangkat dan kemudahan yang luar biasa untuk membangun dan memprogramnya membuatnya mudah bagi armada perangkat untuk digunakan. Perangkat ini juga dapat dengan mudah didaftarkan ke Soracom menggunakan alat seperti Soracom Krypton.
Setiap perusahaan atau individu akan memiliki dashboard pribadi mereka tempat data yang dikumpulkan oleh perangkat mereka akan divisualisasikan. Semoga, orang akan dapat bekerja sama pada dashboard yang sama dan berbagi data mereka satu sama lain di masa depan.
Manfaat
Individu atau perusahaan yang menggunakan produk ini akan mendapatkan manfaat dalam:
Biaya operasional yang lebih rendah karena perangkat sangat mandiri.
Dapat diskalakan dengan mudah, perangkat dapat bekerja sendirian atau dalam armada puluhan lainnya.
Pengumpulan data yang cepat memungkinkan data untuk didorong ke cloud dan divisualisasikan secara real time.
Visualisasi yang mudah, data dapat divisualisasikan di mana saja dan kapan saja menggunakan dashboard online.
Membangun Proyek
Langkah 1: Alat yang Diperlukan
Proyek ini membutuhkan banyak sensor yang akan memantau banyak parameter terkait air dan atmosfer yang ditempatkan di dalamnya. Berikut adalah daftar semua bahan yang diperlukan.
1, Arduino MKR GSM
1, LED ring RGB 16 LED
1, Modul suhu dan kelembaban GY-21
1, Sensor kekeruhan
1, Sensor suhu tahan air
1, Sensor pH dan modul
1, Tombol
1, Resistor (220Ω)
Kabel Jumper
Langkah 2: Menghubungkan Rangkaian
Komponen harus disolder bersama. Untuk memudahkan pemahaman skematik, breadboard telah digunakan. Skematik di bawah ini.
Menyiapkan MKR GSM
Setelah sensor disolder ke perangkat, kartu SIM, antena GSM dan baterai harus dipasang ke perangkat. Saya dayakan papan dengan 2 baterai AA melalui port VIN. Langkah-langkahnya di bawah ini.
Langkah 3: Memahami Kode
Ada 4 bagian utama dari kode proyek.
Mengumpulkan Data Sensor
Mendapatkan waktu dan tanggal
Memproses Data
Mengirim Data
Semua bagian ini dijelaskan dan diuraikan di bawah ini.
Mengumpulkan Data Sensor
Serial.println("Taking Sample"); Serial.println("________________________________________"); Serial.println("Taking Sample"); Serial.println(" OK - Warming Up"); delay(6000); // delay for sensor calibration colourLED(50); Serial.println(" OK - Taking Sample"); Serial.print(" "); for (int i = 0; i < 16; i++) { if (mode == 1) { strip.setPixelColor(i, strip.Color(0, 255, 0)); strip.show(); } else { strip.setPixelColor(i, strip.Color(0, 0, 255)); strip.show(); } // going to take multiple water samples - sensors not that precise waterTurbidity += getWaterTurbidity(); waterPh += getWaterPh(); if (i > 14) { // take a single sample for high precision sensors waterTemperature = getWaterTemp(); atmoTemperature = getAtmoTemp(); atmoHumidity = getAtmoHumidity(); } Serial.print("."); delay(500); } Serial.println(""); Serial.println(" Success - Samples Taken"); for (int i = 0; i <= 16; i++) { strip.setPixelColor(i, strip.Color(0, 0, 0)); strip.show(); delay(30); } Serial.println("________________________________________"); Serial.println(""); delay(500);
Bagian kode di atas memulai dengan menunggu 6 detik untuk sensor kalibrasi dalam air. Perangkat kemudian berulang untuk 16 kali, satu LED baru menyala di ring setiap ulang.
Data dari sensor yang nilainya berfluktuasi dikumpulkan 16 kali dan kemudian rata-rata dicari. Sensor presisi tinggi dibaca pada ulang terakhir.
Mendapatkan Waktu dan Tanggal
void getCredentials() { Serial.println(" [1/2] Time"); Serial.println(" OK - Getting Time from RTC"); currentEpoch = processTime(); colourLED(50); Serial.println(" [2/2] Geolocation"); Serial.println(" OK - Getting Geolocation from GPRS"); while (!getLocation()); Serial.print(" Success - Geolocation is "); Serial.print(latitude, 7); Serial.print(", "); Serial.println(longitude, 7); colourLED(50); }
Ulang pertama menangani kredensial. Waktu diekstrak dari RTC papan karena sudah disinkronkan ke jaringan GSM dalam setup. Lokasi geografis diekstrak dari GPRS.
Memproses Data
void processData() { Serial.println(" OK - Getting Mean of Water pH and Turbidity"); waterPh = (waterPh / 16); waterTurbidity = (waterTurbidity / 16); Serial.println(" OK - Dumping Data to Serial"); Serial.println(""); Serial.print(" [Water] pH "); Serial.println(waterPh); Serial.print(" [Water] Turbidity "); Serial.println(waterTurbidity); Serial.print(" [Water] Temperature "); Serial.println(waterTemperature); Serial.print(" [Atmo] Temperature "); Serial.println(atmoTemperature); Serial.print(" [Atmo] Humidity "); Serial.println(atmoHumidity); Serial.println(""); Serial.println(" Success - Data Processed"); colourLED(50); }
processData() mendapatkan rata-rata data yang dikumpulkan dari sensor yang cenderung berfluktuasi dan kemudian membuang semua data ke Serial Monitor.
makeLine() mengkompilasi semua data ke dalam string JSON yang dikirim ke Soracom. Semua nilai diurai ke dalam buffer JSON siap untuk dikirim ke backend.
Mengirim Data
void parseData(String dataToSend) { Serial.println(" OK - Setting Up Connection"); if(client.connect(url, 80)) { Serial.println(" OK - Connection Established, Parsing Data"); client.println("POST / HTTP/1.1"); client.println("Host: harvest.soracom.io"); client.println("User-Agent: Arduino/1.0"); client.println("Connection: close"); client.print("Content-Length: "); client.println(dataToSend.length()); client.println(""); client.println(dataToSend); Serial.println(" OK - Data Parsed"); } Serial.println(" OK - Getting Responce"); Serial.println(""); while(1) { if(client.available()) { char c = client.read(); Serial.print(c); } if(!client.connected()) { break; } } Serial.println(" Success - Data is Parsed"); }
Akhirnya, data dikirim ke Soracom. Perangkat membuat koneksi dengan server dan kemudian menyiapkan kredensial. Data kemudian dikirim ke server dan respons dicetak ke Serial Monitor.
Perangkat kemudian masuk ke mode tidur sampai pemicu membangunkan ulang langkah-langkahnya.
Langkah 4: Menyiapkan Variabel
Ada beberapa variabel yang harus diedit sebelum proyek dapat digunakan. Ini tercantum di bawah ini. Instruksi untuk menyiapkannya juga di bawah ini.
mode mode perangkat menentukan apakah perangkat mengambil sampel secara berkala atau mengambil sampel dengan tindakan tombol. Jika variabel ini diatur ke 1, perangkat perlu diaktifkan melalui tombol. Jika mode diatur ke 2, perangkat akan mengambil sampel secara berkala.
deviceID and deviceName ini adalah variabel khusus yang digunakan untuk mengidentifikasi perangkat jika armada perangkat digunakan. Setiap perangkat yang digunakan harus diberikan ID dan Nama unik sehingga dapat dengan mudah diidentifikasi.
sleepTime menyimpan waktu yang dihabiskan perangkat untuk tidur antara pembacaan, diatur ke 5 detik dalam kode yang sesuai untuk pengujian tetapi harus diubah saat digunakan di lapangan. Sampel dapat diambil setiap interval 15 menit.
proDebug digunakan saat debugging, diatur ke false dalam kode tetapi jika serial monitor diperlukan saat debugging seharusnya diatur ke true. Catat bahwa perangkat akan tetap mencetak ke serial bahkan jika debug mati. Jika debug menyala, perangkat tidak akan berjalan kecuali serial monitor menyala.
Langkah 5: Mengunggah Kode
Sebelum menyiapkan backend, data harus dikirim ke sana.
Untuk melakukan ini, hubungkan MKR GSM Anda ke komputer dan unggah kode ke perangkat, pastikan mode perangkat diatur ke 1 untuk pengaturan ini. Setelah kode terunggah, letakkan semua sensor dalam air.
Sekarang tekan tombol pada perangkat dan tunggu data dikumpulkan dan dikirim. Ulangi beberapa kali untuk mengisi Soracom Air.
Langkah 6: Menyiapkan Soracom
Langkah ini terbagi menjadi 2 bagian, bagian pertama akan membahas pembuatan akun Soracom dan pendaftaran SIM Anda sementara bagian lain akan membahas pengaturan Soracom Harvest untuk mengumpulkan data dari Air. Jika Anda sudah memiliki akun Soracom, lewati bagian pertama.
Bagian 1: Membuat Akun
Bagian 2: Grup dan Harvest
Langkah 7: Menyiapkan Lagoon
Yang terakhir yang harus diatur di Soracom adalah Lagoon, ini adalah alat yang akan kita gunakan untuk memvisualisasikan data kita dan membuat peringatan email jika data tidak baik. Ikuti langkah-langkah di bawah ini.
Masalah Kalibrasi
Sensor kekeruhan dan pH harus dikalibrasi untuk digunakan secara presisi, Anda mungkin menemukan bahwa saat menjalankan kode, kekeruhan mungkin 105% atau pH air 3. Dalam hal ini, sensor harus dikalibrasi. Panduan cepat untuk mengkalibrasinya di bawah ini.
Sensor pH Sensor pH dapat dikalibrasi menggunakan potensiometer pada modul, letakkan sonda dalam air botol tawar pH 7 dan tunggu selama 5 menit, sekarang buat kode yang mencetak pH dari sensor ke serial monitor. Putar potensiometer sampai pH adalah 7.
Sensor Kekeruhan Sensor kekeruhan tidak terlalu presisi jadi persentase relatif, dibandingkan dengan air murni, diambil. Untuk menyempurnakan nilai air murni, jika pembacaan Anda melebihi 100% kekeruhan, Anda akan perlu menempatkan sensor kekeruhan dalam air murni dan membuat kode yang mencetak tegangan pada pin analog sensor pH ke serial monitor. Variabel bernama calibration ditemukan dalam sensors.h, ubah nilai variabel tersebut ke tegangan yang diterima ketika sonda ditempatkan dalam air murni.
Library
ArduinoLowPower (c) 2016 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
Adafruit_Neopixel (c) Phil Burges Lesser General Public Licence this library is in the public domain
MKRGSM (c) 2016 Arduino AG GNU Lesser General Public Licence this library is in the public domain
Wire (c) 2006 Nicholas Zambetti GNU Lesser General Public Licence this library is in the public domain
OneWire (c) 2007 Jim Studt GNU General Public Licence this library is in the public domain
DallasTemperature GNU General Public Licence this library is in the public domain
RTCZero (c) 2015 Arduino LLC GNU Lesser General Public Licence this library is in the public domain
Akhir
Akhirnya, saya mendapatkan enclosure untuk proyek yang dapat dengan mudah dipindahkan tetapi dapat dipasang untuk mengambil sampel baik dalam mode 1 maupun 2. Langkah-langkahnya di bawah ini.
Akhirnya, pastikan mode diatur dengan baik dan mulai menggunakan perangkat di lapangan. Periksa sungai atau danau di sekitar Anda dan lihat seberapa bersihnya. Coba coba dashboard dan lihat widget apa lagi yang ada.
Latar Belakang
Saat ini, data adalah mata uang baru dan mengumpulkannya dengan mudah dan efisien adalah kunci untuk lingkungan yang lebih baik. Dengan mengukur polusi sungai dan danau secara kolektif, kita dapat meningkatkan kesadaran bahwa air semakin kotor dan sesuatu harus dilakukan.
Saya sedang memikirkan ide untuk kontes Soracom dan saya merasa saya harus membuat sesuatu yang bermanfaat untuk lingkungan, ide orang dan perusahaan bekerja sama pada dashboard kolektif untuk memvisualisasikan status sungai dan danau secara global telah menginspirasi saya untuk mengambil proyek ini.
Apa yang akan Anda lakukan untuk menghentikan polusi air? Karena tindakan harus diambil hari ini, dan besok terlambat terlalu lama.
Kode
Kode
Repo untuk proyekhttps://github.com/Andrei-Florian/UnifiedWater-v1