Stasiun Cuaca Arduino Nano: Kit Sensor dan Layar OLED
Komponen dan Perlengkapan
Berikut adalah daftar komponen yang diperlukan untuk membangun stasiun cuaca lokal ini:
| Komponen | Jumlah |
| Arduino Nano R3 | 1 |
| Seeed Grove - Sensor Barometer (BMP280) | 1 |
| Sensor Suhu & Kelembaban DHT11 (4 pin) | 1 |
| Modul Layar OLED 0.96 inci 64×128 ElectroPeak | 1 |
| Sensor UV GUVA-S12SD | 1 |
| Modul RTC DS3231 | 1 |
Alat dan Mesin yang Diperlukan
- Paku las (umum)
- Kawat solder, tanpa timah (lead free)
- Printer 3D (umum)
Aplikasi dan Layanan Online
- Arduino IDE
- Autodesk Fusion 360
Tentang Proyek
Selama ini, saya ingin membuat stasiun cuaca tanpa menggunakan internet. Sangat mengesankan untuk mengukur data cuaca di sekitar Anda dan memeriksa data kapan saja yang diinginkan. Oleh karena itu, saya membuat stasiun cuaca lokal yang tampak keren, yang dapat mengukur tekanan udara, suhu, kelembaban, dan indeks UV hari ini (jika Anda menaruhnya di dekat jendela). Dan masih ada lagi! Stasiun ini juga dilengkapi layar jam untuk menampilkan waktu, tanggal, dan hari dalam seminggu.
Langkah 1: Membuat Kotak Pelindung (Enclosure)
Saya menggunakan Autodesk Fusion 360 untuk mendesain kotak pelindung dan mencetaknya dengan filament PLA hijau. Kotak ini memerlukan struktur pendukung (supports) dan saya mencetaknya dengan 20% infill serta kecepatan 70 mm/s menggunakan printer Ender 3. File STL untuk kotak pelindung disertakan dalam proyek ini.
Langkah 2: Sensor BMP280
BMP280 adalah sensor tekanan atmosfer dan suhu yang berkomunikasi dengan Arduino menggunakan protokol I2C atau SPI. Di sini, saya menggunakan SPI. Untuk menggunakan SPI, hubungkan sebagai berikut:
- CS ke D10
- SDA ke D11
- SDO ke D12
- SCK ke D13
Pada bagian kode, untuk menggunakan sensor ini kita perlu perpustakaan (library). Pertama, sertakan perpustakaan dalam kode dengan #include <Adafruit_BMP280.h>. Anda dapat mengunduh perpustakaan dari sumber resmi.
Selanjutnya, saya menentukan pin SPI untuk sensor. Dalam fungsi setup, saya menginisialisasi sensor BMP, dan dalam fungsi loop, saya membaca data tekanan dan suhu menggunakan perintah bmp.readPressure() dan bmp.readTemperature(). Saya membagi nilai tekanan dengan 100 untuk mengukur tekanan dalam satuan hPa. Untuk mengukur ketinggian, saya menggunakan perintah bmp.readAltitude(1005.47). Perhatikan bahwa Anda perlu mengubah nilai (1005.47) sesuai dengan tekanan rata-rata di wilayah Anda.
Langkah 3: Modul RTC DS3231
Stasiun cuaca ini juga memiliki layar waktu yang dapat menampilkan waktu saat ini, tanggal, dan hari dalam seminggu. Untuk tujuan ini, saya menggunakan modul RTC DS3231, yang berkomunikasi menggunakan protokol I2C. Oleh karena itu, hubungkan sebagai berikut:
Pertama, Anda harus mengatur waktu dan tanggal pada RTC menggunakan program DS3231_set.ino dari contoh perpustakaan.
Dalam program utama, saya sertakan perpustakaan #include <DS3231.h> dan membaca data waktu sesuai petunjuk dari perpustakaan. Di sini, saya menggunakan contoh dari perpustakaan sebagai referensi kode. Saya membuat kondisi untuk setiap hari dalam seminggu untuk menemukan hari saat ini.
Langkah 4: Sensor DHT11
Saya menggunakan sensor ini untuk mengukur kelembaban. Untuk itu, saya menghubungkan data out sensor ke pin D2 Arduino. Dalam program, saya sertakan perpustakaan DHT #include <DHT.h>, kemudian dalam setup saya menginisialisasi sensor dan dalam loop, saya membaca nilai kelembaban menggunakan perintah dht.readHumidity().
Langkah 5: Sensor UV GUVA-S12SD
GUVA-S12SD adalah dioda fototipe Schottky berbasis nitrat galium. Ini memiliki panjang gelombang deteksi UV typikal 240–370 nm (yang mencakup UVB dan sebagian besar spektrum UVA). Sensor ini menghasilkan tegangan analog yang dikalibrasi dan bervariasi sesuai intensitas cahaya UV. Jadi, kita dapat membaca nilai analog melalui ADC Arduino.
Dalam fungsi loop, saya membaca nilai analog sensor dan menghitung indeks UV:
float sensorValue = analogRead(A0);
float sensorVoltage = sensorValue / 1024 * 5.0;
int UV_index = sensorVoltage / 0.1;
Langkah 6: Layar OLED
Saya menggunakan layar OLED 0.96 inci 128×64 untuk proyek ini, yang menggunakan protokol I2C, jadi saya menghubungkannya ke Arduino sebagai berikut:
Dalam program, pertama-tama saya sertakan perpustakaan Adafruit_SSD1306 dan Adafruit_GFX:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Selanjutnya, saya membuat variabel layar dan menambahkan beberapa bitmap untuk menampilkan gambar. Dalam setup, saya menginisialisasi layar. Kemudian dalam loop, saya menampilkan setiap data menggunakan fungsi display.print(). Saya menampilkan data pada empat halaman: Waktu, Tekanan, Suhu & Kelembaban, dan Indeks UV. Ada jeda 5 detik antara setiap halaman.
Klip Video
Tonton demonstrasi proyek dalam video yang tersedia.
Kode
Berikut adalah kode lengkap untuk stasiun cuaca lokal Arduino Nano. Kode ini mengintegrasikan semua sensor dan menampilkan data secara bergantian pada layar OLED.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#include <DS3231.h>
#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/FreeMonoBoldOblique12pt7b.h>
// Inisialisasi pin dan objek sensor disertakan dalam file proyek asli.
// Loop utama menampilkan waktu, tekanan, ketinggian, suhu, kelembaban, dan indeks UV.
// Setiap data ditampilkan selama 5 detik sebelum beralih ke halaman berikutnya.
Bagian dan Kotak Khusus
File desain 3D untuk kotak pelindung tersedia untuk dicetak menggunakan printer 3D agar semua komponen teratur terpasang.
Skematik
Skematik rangkaian lengkap tersedia sebagai bagian dari dokumentasi proyek untuk referensi pemasangan kabel.