Weather station banyak di gunakan untuk menganalisa keadaan cuaca dalam satu wilayah dalam beberapa tahun. Dari data-data yang di peroleh dapat di ambil sebuah kebijakan, misal nya penanggulangan bencana atau bahkan tindakan khusus di dunia perkebunan. dengan data ini semua analisa akan menjadi lebih terukur dan terencana.
Nah, kebetulan mimin mendapatkan amanah untuk membuat sebuah weather station, dengan menggunakan sensor APRS Weather Station keluaran DFRobot ( walau vendor nya bukan punya DFrobot), dengan SKU SENS0186. Yuk kita mulai dari spesifikasi Sensor ini, agar tidak salah urutan dalam penggunaaan nya seperti yang sudah saya alami, 🙂
Spesifikasi Weather Station SENS0186
Adapun spesifikasi dari sensor ini adalah sebagai berikut,
- Tegangan Voltage Max 5V DC, jangan lebih. mimin lihat board nya menggunakan regulator AMS1117 3.3v.
- Mengukur Suhu dan Kelembaban udara
- Mengukur sudut arah angin, ketika mimin uji, hanya bisa mengukur sudut, 0, 45, 90, 135, 270 derajat.
- Mengukur kecepatan Angin
- Mengukur kecepatan hujan dalam 1 jam
- Mengukur kecepatan hujan dalam 24 jam,
- Controller tidak water prof, jadi harus di buat box lagi agar water prof,
- Dan yang terakhir adalah Tekanan Udara ( 0.1 hPa )
Installation Sensor
Installation sensor ini sangat penting, terutama di connector nya, agar sensor nya dapat di baca oleh Arduno dengan benar. Installaton nya adalah seperti berikut
Pertama-tama, part sensor terbagi 3. yaitu
- Sensor Kecepatan Angin
- Sensor Arah Angin
- Sensor Kecepatan Hujan
Ketiga Sensor ini memiliki kabel RJ45, Sebagai konektor yang akan di hubungkan ke kontroller, Kontroller nya dapat di lihat di bawah ini,
Kemeduan, perhatikan connector config yang berhawarna hijau, pastikan posisi nya di sana, jika tidak maka format data yang akan dikirim oleh controller di atas akan berbeda dengan yang ada pada tutorial kita. Contoh output sensor nya seperti di bawah ini,
Selanjut nya installasi output sensor ke arduino, Biasa nya warna kable RJ45 nya adalah warna hitam. Output kabel nya seperti berikut ini,
Perhatikan Kabel output dari controller, ada 3 Warna, Merah Sebagai supply power Sensor, yaitu 5V, Kuning Sebagai Output Sensor itu sendiri, dan Black sebagai Grounding nya. Connector ini akan kita hubungkan ke ESP32 Arduino,
Wiring nya cukup mudah, Jika menggunakan Controller kita, wiring nya sebagai berikut,
Setelah terhubung kita lanjut ke Pembacaan Program Sensor, Gak sulit, cukup copy paste 🙂
Program Baca Sensor Weather
Sebelum kita parsing data Sensor nya, alangkah baiknya, kita lihat data raw yang di keluarkan oleh sensor, coding nya cukup sederhana, bisa di lihat pada code di bawah ini
void setup() { // put your setup code here, to run once: Serial.begin(115200); Serial1.begin(9600, SERIAL_8N1, 32, 17); } void loop() { // put your main code here, to run repeatedly: while (Serial1.available()) { Serial.print(Serial1.read()); } delay(1000); }
Output sensor akan terlihat di serial monitor seperti pada gambar di bawah ini,
char databuffer[35]; double temp; unsigned long cur_time, old_time; void setup() { Serial.begin(9600); Serial1.begin(9600, SERIAL_8N1, 32, 17); } void loop() { cur_time = millis(); if (cur_time - old_time >= 5000) { getBuffer(); //Begin! Serial.print("Wind Direction: "); Serial.print(WindDirection()); Serial.println(" "); Serial.print("Average Wind Speed (One Minute): "); Serial.print(WindSpeedAverage()); Serial.println("m/s "); Serial.print("Max Wind Speed (Five Minutes): "); Serial.print(WindSpeedMax()); Serial.println("m/s"); Serial.print("Rain Fall (One Hour): "); Serial.print(RainfallOneHour()); Serial.println("mm "); Serial.print("Rain Fall (24 Hour): "); Serial.print(RainfallOneDay()); Serial.println("mm"); Serial.print("Temperature: "); Serial.print(Temperature()); Serial.println("C "); Serial.print("Humidity: "); Serial.print(Humidity()); Serial.println("% "); Serial.print("Barometric Pressure: "); Serial.print(BarPressure()); Serial.println("hPa"); Serial.println(""); Serial.println(""); old_time = millis(); } } void getBuffer() //Get weather status data { int index; for (index = 0; index < 35; index ++) { if (Serial1.available()) { databuffer[index] = Serial1.read(); if (databuffer[0] != 'c') { index = -1; } } else { index --; } } } int transCharToInt(char *_buffer, int _start, int _stop) //char to int) { int _index; int result = 0; int num = _stop - _start + 1; int _temp[num]; for (_index = _start; _index <= _stop; _index ++) { _temp[_index - _start] = _buffer[_index] - '0'; result = 10 * result + _temp[_index - _start]; } return result; } int WindDirection() //Wind Direction { return transCharToInt(databuffer, 1, 3); } float WindSpeedAverage() //air Speed (1 minute) { temp = 0.44704 * transCharToInt(databuffer, 5, 7); return temp; } float WindSpeedMax() //Max air speed (5 minutes) { temp = 0.44704 * transCharToInt(databuffer, 9, 11); return temp; } float Temperature() //Temperature ("C") { temp = (transCharToInt(databuffer, 13, 15) - 32.00) * 5.00 / 9.00; return temp; } float RainfallOneHour() //Rainfall (1 hour) { temp = transCharToInt(databuffer, 17, 19) * 25.40 * 0.01; return temp; } float RainfallOneDay() //Rainfall (24 hours) { temp = transCharToInt(databuffer, 21, 23) * 25.40 * 0.01; return temp; } int Humidity() //Humidity { return transCharToInt(databuffer, 25, 26); } float BarPressure() //Barometric Pressure { temp = transCharToInt(databuffer, 28, 32); return temp / 10.00; }
Perhatikan output Sensor pada serial monitor, maka terlihat pada gambar di bawah ini,
Nah, sensor sudah terbaca dengan sempurna, Sekian dulu tulisan kita tentang weather station,
Jika ingin tanya lebih jauh tentang sensor ini atau custom board untuk logger Weather Station, boleh whatsapp kita dengan click button di bawah ini
Thanks
Link Refrensi: DFrobot sensor weather station