Sistem Pemantauan Suhu Cerdas untuk Sekolah: Akurat, Real-Time, dan Aman
Komponen dan Perlengkapan
Berikut adalah daftar komponen yang diperlukan untuk membangun sistem pemantauan suhu cerdas ini:
- Pycom SiPy – 1 unit
- Raspberry Pi 3 Model B – 1 unit
- Arduino Nano R3 – 1 unit
- SparkFun Logic Level Converter - Bi-Directional – 1 unit
- NFC RFID-RC522 – 1 unit
- Sharp GP2Y0A41SK0F (4cm - 30cm) - Sensor Jarak Analog – 1 unit
- MLX90614-DCI I2C - Sensor Suhu – 1 unit
- DFRobot I2C 16x2 Arduino LCD Display Module – 1 unit
- LED (umum) – 1 unit
- Resistor 330 ohm – 2 unit
- Buzzer – 1 unit
Aplikasi dan Layanan Online
- Arduino IDE
- Visual Studio Code (Pymakr)
- ThingSpeak API
- IFTTT
- Putty
- IDLE IDE
Tentang Proyek Ini
Pernyataan Masalah
Di Asia, karena cuaca panas dan wabah sindrom pernafasan akut parah (SARS) pada tahun 2003, siswa sekolah dasar dan menengah diwajibkan melakukan pengukuran suhu setiap kuartal untuk memastikan kesejahteraan siswa. Setiap kali sekolah menjadwalkan latihan pengukuran suhu, siswa harus membawa termometer digital mereka sendiri. Namun, beberapa siswa mungkin tidak dapat berpartisipasi karena termometer hilang, rusak, atau lupa membawa perangkat. Karena alasan higienis, siswa tidak diizinkan berbagi termometer dan mungkin tidak memiliki uang cukup untuk membeli yang baru. Hal ini mempengaruhi tingkat keberhasilan latihan pengukuran suhu. Setelah latihan selesai, petugas harus memasukkan secara manual data suhu dan identitas semua siswa ke database. Tugas ini sangat melelahkan dan memakan waktu karena setiap wali kelas perlu menginput data untuk sekitar 40 siswa.
Apa Solusinya?
Tema proyek ini adalah Dampak Sosial oleh SqwidNet, dalam bidang Kesehatan dan Kesejahteraan dalam Tujuan Pembangunan Berkelanjutan (SDG). Sistem ini mampu mengukur suhu pengguna yang valid secara otomatis sehingga suhu dapat dipantau, dan peringatan akan dikirim jika suhu melebihi ambang batas tertentu.
Bagaimana Kerjanya: RaspberryPi & Arduino
RaspberryPi menyimpan program Python dan database MySQL. Saat program Python diluncurkan, secara otomatis memeriksa apakah database sudah dibuat; jika belum, akan dibuat secara otomatis. Tabel di dalamnya juga diperiksa dan dibuat jika diperlukan. Ini mengurangi beban kerja manual guru dan staf administrasi.
Selanjutnya, program membuat koneksi kueri ke database dan menunggu Arduino mengirim informasi melalui port Komunikasi Serial. Ketika kartu RFID di-tape pada Arduino, informasi kartu disimpan dan dikirim ke RaspberryPi. RaspberryPi memverifikasi apakah kartu tersebut merupakan pengguna valid melalui database. Jika valid, Arduino menampilkan "Selamat datang, nama" pada layar LCD. Jika tidak valid, layar akan menunjukkan "Error! Pengguna Tidak Valid!".
Setelah pengguna valid di-tape, Arduino meminta pengguna untuk mengukur suhu. Sensor jarak mendeteksi apakah pengguna siap. Jika ya, suhu diukur dan ditampilkan pada LCD. Jika suhu valid (28°C - 42°C), informasi dikirim ke RaspberryPi (MySQL) dan Sigfox (ThingSpeak) untuk disimpan. Database MySQL menyimpan userID, tanggal, stempel waktu, dan suhu setiap pengukuran.
RaspberryPi terus memeriksa apakah data suhu telah terkirim dengan benar sebelum melanjutkan. Ini dilakukan untuk sinkronisasi karena kedua program mengeksekusi pada waktu yang berbeda. Kode Python terus memeriksa data suhu sebelum melanjutkan program.
Catatan: Kode Python dan Arduino menggunakan metode sinkronisasi Handshaking. Jika RaspberryPi belum siap menerima data, Arduino tidak mengizinkan pengguna menempelkan kartu, dan sebaliknya. Sinyal "READY" dikirim terus menerus sampai pihak lain merespons dengan "RECEIVE".
Bagaimana Kerjanya: Sigfox (SiPy)
Setelah menerima data suhu dari Arduino, SiPy memisahkan userID dan suhu menjadi bilangan bulat dan desimal. Semua data kemudian dikirim ke backend Sigfox melalui bytes sehingga dapat dikirim ke Ubidots dan ThingSpeak. Backend Sigfox kemudian mengenkode ulang data untuk dikirim ke ThingSpeak. Di Sigfox Backend (device type > Device Name > CALLBACKS), custom payload harus dimasukkan tepat sesuai dengan kode SiPy karena payload menentukan data apa yang diterima pertama sebagai userID.
Bagaimana Kerjanya: The Cloud
Setelah data terkirim ke ThingSpeak, diterima terlebih dahulu di channel viewing pribadi di mana skrip MATLAB Analysis menganalisis data dan menggabungkan nilai suhu bilangan bulat dan desimal menjadi satu nilai. Kode tabel diambil dari proyek open source dan dimodifikasi; tabel memperbarui diri secara otomatis setiap kali data baru masuk. Sistem juga memeriksa apakah suhu pada tingkat berbahaya (demam); jika ya, email akan dikirim untuk memberitahu staf atau guru. Channel pertama adalah backend untuk pemrosesan, sedangkan channel kedua menampilkan nilai suhu yang sudah digabungkan dalam bentuk tabel seperti Excel untuk analisis data yang mudah.
1. Pengaturan Koneksi Arduino Nano
Untuk Arduino Nano, berikut adalah koneksi yang dibuat dengan modul-modul. Nano dan Uno memiliki pinout yang sama.
RFID - RC522
SDA D10
SCK D13
MOSI D11
MISO D12
IRQ Tidak Terhubung
GND GND
RST D9
3.3V 3.3V
LCD
SDA A4
SCL A5
GND GND
5V 5V
Sensor Jarak
5V 5V
GND GND
Input A0
Buzzer
GND GND
Output D6
Sensor Suhu IR
SDA A4
SCL A5
GND GND
5V 5V
LED
Sisi Datar (kathode) GND
Sisi Tidak Datar (anoda) D7
Bagus! Untuk koneksi Arduino, Anda sekarang siap melanjutkan.
2. Pengaturan RaspberryPi
Ada dua hal utama yang perlu diinstal pada Raspberry Pi 3: Sistem Operasi Raspbian dan perangkat pendukung. Instalasi Raspbian cukup sederhana: flash berkas image ke kartu SD dan masukkan ke Raspberry Pi 3. Gunakan balenaEtcher untuk mem-flash. Pilih "Raspbian Buster with Desktop and recommended software" untuk menghemat waktu mengunduh perangkat lunak tambahan. Setelah selesai, jalankan balenaEtcher, pilih image dan kartu SD, lalu tekan flash. Hubungkan Raspberry Pi melalui HDMI ke monitor untuk pengaturan awal. Buka Preferences -> Raspberry Pi Configuration untuk mengaktifkan antarmuka seperti SSH dan VNC. Opsional: edit dhcpcd.conf untuk menetapkan alamat IP statis (misalnya 192.168.0.11) melalui Ethernet. Setelah terhubung WiFi, Anda akan mendapatkan alamat IP wlan0 untuk akses nirkabel.
3. Pengaturan Database MySQL
Pastikan sistem telah diperbarui dengan perintah sudo apt update dan sudo apt upgrade. Instal apache2 (sudo apt install apache2) untuk membuat server web, kemudian PHP (sudo apt install php php-mbstring). Uji dengan membuka alamat IP Raspberry Pi atau "localhost" di browser. Instal database dengan sudo apt install mariadb-server php-mysql. Buat root user MySQL melalui sudo mysql --user=root dan jalankan perintah untuk menetapkan hak akses. Setelah itu, instal PHPMyAdmin (sudo apt install phpmyadmin) untuk mengelola database melalui browser di https://ip_raspberrypi/phpmyadmin.
4. Panduan Pengaturan dan Perangkat Lunak SiPy Expansion Board 2.0
Masukkan modul SiPy ke Expansion Board dengan tombol reset menghadap ke USB Connector. Perbarui firmware SiPy menggunakan firmware updater sesuai sistem operasi (Windows, macOS, atau Linux). Pastikan memilih Region Sigfox dan Board yang benar saat pertama kali menjalankan updater. Setelah firmware diperbarui, unduh Visual Studio Code, instal ekstensi Pymakr dan nodejs. Buat folder baru untuk menyimpan berkas yang akan diunggah ke SiPy. Buat berkas baru dan simpan sebagai file Python. Jika mengunggah ke SiPy, berkas harus bernama main. Untuk menjalankan kode tanpa mengunggah, tekan tombol run di bagian bawah program. Hati-hati dengan while loop tak terbatas karena satu-satunya cara mengakses SiPy lagi adalah melalui FTP untuk menghapus main.py.
Gunakan FileZilla untuk mengakses flash SiPy melalui FTP. Atur enkripsi ke "Only use plain FTP (insecure)" dan transfer ke "passive and limit the number of active connections to 1". Host, user, dan password dapat ditemukan di Visual Studio Code melalui semua perintah dan pengaturan global. Password untuk SSID Modul SiPy adalah www.pycom.io. Setelah terhubung, buka folder flash dan hapus main.py HANYA, kemudian restart SiPy untuk mulai menjalankan atau mengunggah program.
5. Mendaftar dengan Sigfox Backend
Setelah menginstal Visual Studio Code, hubungkan papan ekspansi pycom ke komputer. Salin dan jalankan kode berikut untuk mendapatkan Device ID dan PAC Number Sigfox:
from network import Sigfox
import binascii
sigfox = Sigfox(mode=Sigfox.SIGFOX, rcz=Sigfox.RCZ*)
print(binascii.hexlify(sigfox.id()))
print(binascii.hexlify(sigfox.pac()))
Ganti * dengan Nomor Region RCZ Anda. Setelah mendapatkan ID dan PAC, daftarkan Sigfox ke Sigfox Backend. Pilih negara tempat perangkat akan digunakan, masukkan Device ID dan PAC Number, lalu buat atau masuk ke akun Sigfox. Setelah akun siap, jalankan kode berikut untuk menguji pengiriman data:
from network import Sigfox
import socket
sigfox = Sigfox(mode=Sigfox.SIGFOX, rcz=Sigfox.RCZ*)
s = socket.socket(socket.AF_SIGFOX, socket.SOCK_RAW)
s.setblocking(True)
s.setsockopt(socket.SOL_SIGFOX, socket.SO_RX, False)
s.send(bytes([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]))
Catatan: Hubungkan antena Sigfox terlebih dahulu sebelum menjalankan program Sigfox.
6. Pengaturan Cloud
Siapkan IFTTT untuk pengiriman email. Buat akun di IFTTT, lalu buat applet baru. Pilih "This" dan cari Webhooks. Pilih "Receive a web request" dan masukkan nama acara (contoh: demam). Kemudian pilih "That", cari Email, dan pilih "Send me an email". Sertakan {{Value1}} dan {{Value2}} dalam body pesan. ThingSpeak adalah platform IoT yang mudah digunakan dan open source. Buat dua channel: (SIGFOX) TEMPERATURE PRIVATE VIEWING dan (SIGFOX) TEMPERATURE PUBLIC VIEWING. Channel privat untuk menerima data dari backend Sigfox dalam bentuk bytes, kemudian dikonversi menggunakan MATLAB Analysis menjadi satu nilai dan dipindahkan ke channel publik. userID juga dipindahkan ke channel publik untuk tujuan penampilan. Skrip MATLAB dipicu melalui ThingSpeak REACT saat data baru masuk dari backend Sigfox. Konfigurasikan reaksi dengan tipe kondisi string, frekuensi pada penyisipan data, dan kondisi field 3 (userid) tidak sama dengan 0. Tindakan adalah MATLAB Analysis dengan opsi jalankan hanya pertama kali kondisi terpenuhi.
Untuk mengambil informasi Webhooks, klik logo profil di pojok kanan atas, pilih My Services, lalu Webhooks dan dokumentasi. Anda akan melihat kunci dan format untuk mengirim permintaan. Nama acara untuk proyek ini adalah "demam". Contoh URL: https://maker.ifttt.com/trigger/demam/with/key/(contoh). Uji layanan dengan menempelkan URL ke browser atau menekan tombol uji saat membuat applet.
Kontribusi
Aden - RaspberryPi + Arduino + modul-modulnya + ThingSpeak (MATLAB+ Pengaturan)
Reginald - Sigfox + ThingSpeak Pengumpulan Data + Skematik
Bo Sheng - Pengaturan IFTTT
Kode
- [C] ARDUINO NANO
- [PYTHON] RaspberryPi
- [MicroPython] Sigfox (Pycom)
- [ThingSpeak] SKRIP MATLAB
Kode lengkap untuk Arduino Nano, RaspberryPi, SiPy, dan skrip MATLAB tersedia di bagian kode proyek asli dan dapat disesuaikan sesuai kebutuhan implementasi.
Skematik
Semua komponen terhubung bersama-sama sesuai skematik yang disediakan, termasuk koneksi sensor jarak, sensor suhu, LED, RFID, LCD, dan buzzer untuk Arduino.