Membangun Stasiun Cuaca MKR FOX 1200 dengan Baterai
Komponen dan Perlengkapan
Berikut adalah komponen yang dibutuhkan untuk membangun stasiun cuaca ini:
Arduino MKR Fox 1200 – 1 unit
SparkFun Atmospheric Sensor Breakout - BME280 – 1 unit
TSL2561 digital luminosity light sensor – 1 unit
HTU 1D – 1 unit
Aplikasi dan Layanan Online
Arduino Web Editor
ThingSpeak API
Sigfox
Tentang Proyek Ini
Catatan: Tutorial ini mungkin sudah usang. Silakan kunjungi disini untuk versi yang lebih terbaru.
Proyek ini menunjukkan cara mengubah MKR FOX 1200 dan sejumlah sensor I2C menjadi stasiun cuaca sederhana dengan baterai.
Kita akan menggunakan:
sensor suhu papan atas (ketelitian rendah, ± 1 °C)
sensor HTU21D I2C untuk tingkat kelembaban
Bosch BMP280 untuk tekanan barometrik dan suhu yang lebih presisi
sensor cahaya TSL2561 untuk tingkat kecerahan
Pengaturan Hardware
Koneksi hardware untuk proyek ini cukup sederhana: semua sensor menggunakan antarmuka I2C dan beroperasi pada 3.3V.
Mereka membutuhkan empat kabel dari MKR FOX 1200: GND, 3.3V, SDA pada Pin 11, dan SCL pada Pin 12. Keempat koneksi yang sama dapat dibagikan secara paralel dengan ketiga sensor karena masing-masing memiliki alamat I2C spesifik, sehingga pustaka dan fungsi yang relevan akan menangani pemisahan masing-masing.
Seluruh proyek dapat diberi daya oleh dua baterai AA atau AAA alkaline yang disambungkan secara seri untuk menghasilkan 3V dan diterapkan ke blok terminal sambungan baut pada papan.
Pesan Sigfox
Karena jaringan Sigfox dapat mengirim maksimal 140 pesan per hari, kita akan mengoptimalkan pembacaan dan mengirim data dalam format biner padat.
Pengemasan data penting karena ukuran maksimal pesan yang dapat dikirim adalah 12 byte. Sebuah float occupies 4 byte, jadi kita perlu mengemas pembacaan kita ke representasi yang lebih kecil.
Format float sangat luas (Anda dapat mewakili angka sebesar 3.402823e+38 (!)) dan kita tidak memerlukan seluruh ruang data; kita kemudian dapat menentukan batas aman (berdasarkan lokasi tempat stasiun akan digunakan) dan memulihkan representasi asli di backend.
Konfigurasi Layanan Cloud
Kita akan menggunakan dua layanan cloud:
Backend Sigfox
Thingspeak
Daftarkan papan Anda pada backend Sigfox menggunakan PAC dan ID yang disediakan oleh contoh FirstConfiguration (lewati jika sudah dilakukan untuk proyek sebelumnya).
Kedua layanan perlu dikonfigurasi untuk sal berkomunikasi dan menafsirkan data dalam format yang benar. Daftarkan di keduanya dan buat beberapa channel pada Thingspeak. Konfigurasi terlihat pada gambar di bawah ini.
Channel pertama yang kita konfigurasikan akan menjadi yang menerima data mentah (readChannelID), sementara channel kedua akan mengumpulkan data yang telah diskalakan ulang (writeChannelID).
Saatnya untuk mengunggah sketsa menggunakan Arduino Create Editor. Sketsa default memungkinkan Anda menguji semua infrastruktur secara luas sebelum menerapkan di lapangan.
Ingat untuk mendeklarasikan:
oneshot = false
ketika Anda yakin bahwa semua pengaturan infrastruktur backend sudah benar. Sketsa menunggu port serial, jadi kita tidak akan meluncurkannya sekarang. Sebaliknya, buka backend SigFox dan konfigurasikan callback:
Klik DEVICE TYPE -> LIST -> klik kanan pada papan Anda dan klik Edit.
Klik CALLBACKS pada menu sisi kiri:
Anda akan melihat jendela seperti ini:
Klik tombol New di pojok kanan atas jendela:
Pilih Custom callback:
Konfigurasi yang relevan terlihat di bawah ini. Pastikan callback disiapkan sebagai:
Ini mewakili struktur yang kita kemas dalam sketsa. Kami menetapkan variabel untuk setiap bidang, jadi kita dapat mereferensikannya dalam callback HTTP.
Setelah dikonfigurasi, jendela Anda harus terlihat seperti ini:
Ingat untuk mengubah kunci API api_key dengan yang disediakan oleh Thingspeak sebagai Write API Key untuk Channel1.
Simpan dan keluar. Kita sekarang dapat membuka port serial dan mengamati pesan pertama yang dikirim. Hore!
Dari Mentah ke Grafis
Pengaturan yang kita konfigurasikan akan mengarahkan data kita ke backend Thingspeak, namun data masih dalam format mentah; untuk mengonversinya kembali, mari kita gunakan alat analisis Thingspeak dengan cuplikan ini:
% TODO - Replace the [] with channel ID to read data from: readChannelID = []; % TODO - Enter the Read API Key between the '' below: readAPIKey = 'T6UK7XO6A4H2AGT7'; % TODO - Replace the [] with channel ID to write data to: writeChannelID = []; % TODO - Enter the Write API Key between the '' below: writeAPIKey = 'XU4TGY261P6B5USN'; %% Read Data %% data = thingSpeakRead(readChannelID, 'ReadKey', readAPIKey,'OutputFormat','table'); analyzedData = data; %% Analyze Data %% INT16_t_MAX = 32767; UINT16_t_MAX = 65536; analyzedData.('Temperature1') = data.('Temperature1') / INT16_t_MAX * 120 ; analyzedData.('Temperature2') = data.('Temperature2') / INT16_t_MAX * 120 ; analyzedData.('Pressure') = data.('Pressure') / UINT16_t_MAX * 200000 ; analyzedData.('Light') = data.('Light') / UINT16_t_MAX * 100000 ; analyzedData.('Humidity') = data.('Humidity') / UINT16_t_MAX * 110 ; %% Write Data %% thingSpeakWrite(writeChannelID, analyzedData, 'WriteKey', writeAPIKey); %% Schedule action: React -> every 10 minutes
Dengan mengganti channel IDs dengan milik kita sendiri, kita akhirnya dapat mengonversi data mentah kembali ke nilai aktual. Ingat untuk menjadwalkan tindakan analisis setiap 10 menit menggunakan React atau tindakan tersebut tidak akan pernah dieksekusi!