Teknologi Internet of Things (IoT) kini sudah menjadi bagian penting dari pertanian modern. Dengan sensor-sensor cerdas dan koneksi internet, kita bisa memantau kondisi tanaman secara real-time — mulai dari suhu, kelembapan udara, hingga intensitas cahaya.
Menariknya, data yang dikumpulkan dari sensor IoT tidak hanya berhenti di tahap pemantauan — data tersebut bisa diolah lebih lanjut untuk memprediksi kondisi kesehatan tanaman.
Dalam tulisan ini, kita akan menjelajahi praktik terbaik penerapan IoT Smart Farming dengan memanfaatkan machine learning di R, khususnya algoritma Decision Tree (CART), disajikan dengan pendekatan edukatif dan praktis
Persiapan Dataset Simulasi IoT
Kita mulai dari simulasi data sensor berbasis ESP32 dengan kombinasi sensor DHT22, Soil Moisture, dan LDR. Data ini akan kita olah untuk menentukan apakah kondisi tanaman termasuk “Sehat” atau “Tidak Sehat.”
library(tidyverse)
library(caret)
library(rpart)
library(rpart.plot)
library(janitor)
set.seed(123)
# Simulasi data sensor IoT
n <- 1000
iot_data <- tibble(
temperature = rnorm(n, mean = 28, sd = 3), # suhu (°C)
humidity_air = rnorm(n, mean = 70, sd = 10), # kelembapan udara (%)
soil_moisture = rnorm(n, mean = 45, sd = 15), # kelembapan tanah (%)
light_intensity = rnorm(n, mean = 600, sd = 200) # intensitas cahaya (lux)
)
# Menentukan kondisi tanaman
iot_data <- iot_data %>%
mutate(
plant_condition = case_when(
temperature >= 25 & temperature <= 32 &
humidity_air >= 60 & humidity_air <= 85 &
soil_moisture >= 35 & soil_moisture <= 65 &
light_intensity >= 400 & light_intensity <= 800 ~ "Sehat",
TRUE ~ "Tidak_Sehat"
)
)
iot_data$plant_condition <- as.factor(iot_data$plant_condition)
Dengan simulasi ini, kita memiliki 1000 data observasi lengkap yang bisa digunakan untuk pemodelan klasifikasi.
Eksplorasi Data (EDA)
Langkah pertama dalam data science: kenali dulu datanya!
Kita akan melihat sebaran kondisi tanaman dan hubungan antarvariabel.
# Distribusi kondisi tanaman
ggplot(iot_data, aes(plant_condition, fill = plant_condition)) +
geom_bar() +
theme_minimal() +
labs(title = "Distribusi Kondisi Tanaman")
# Hubungan antar variabel
ggplot(iot_data, aes(soil_moisture, temperature, color = plant_condition)) +
geom_point(size = 2) +
theme_minimal() +
labs(title = "Sebaran Suhu vs Kelembapan Tanah")
Insight awal:
- Tanaman yang sehat umumnya berada di rentang suhu dan kelembapan tanah yang stabil.
- Pola visual membantu kita memahami bagaimana sensor bekerja dalam konteks lingkungan
Split Data: Training & Testing
Agar model tidak bias, kita bagi dataset menjadi 80% data training dan 20% data testing
set.seed(123)
index <- createDataPartition(iot_data$plant_condition, p = 0.8, list = FALSE)
train <- iot_data[index, ]
test <- iot_data[-index, ]
Membangun Model Decision Tree (CART)
Model Decision Tree membantu kita memahami logika keputusan seperti “jika suhu tinggi dan kelembapan rendah, maka tanaman berpotensi tidak sehat.”
model_dt <- rpart(
plant_condition ~ .,
data = train,
method = "class",
control = rpart.control(cp = 0.01)
)
summary(model_dt)
Visualisasi Pohon Keputusan
rpart.plot(model_dt,
type = 3,
fallen.leaves = TRUE,
box.palette = "GnBu",
shadow.col = "gray",
main = "Decision Tree: Kondisi Tanaman")
Interpretasi:
- Setiap node menunjukkan kondisi sensor IoT.
- Setiap leaf node menampilkan hasil klasifikasi: “Sehat” atau “Tidak_Sehat.”
- Semakin dalam cabangnya, semakin kompleks keputusan yang diambil model.
Evaluasi Model
Langkah selanjutnya, mari kita uji seberapa baik model ini mengenali kondisi tanaman.
pred_dt <- predict(model_dt, test, type = "class")
conf_matrix_dt <- confusionMatrix(pred_dt, test$plant_condition)
conf_matrix_dt
Dari hasil confusion matrix, kita bisa melihat:
- Accuracy: seberapa sering model benar.
- Kappa: konsistensi prediksi model.
- Sensitivity & Specificity: kemampuan model dalam mengenali tanaman sehat dan tidak sehat.
Fitur yang Paling Berpengaruh
Model juga bisa memberi tahu kita sensor mana yang paling berperan dalam menentukan kondisi tanaman.
importance <- model_dt$variable.importance
importance
Biasanya, fitur seperti soil_moisture dan temperature mendominasi, karena keduanya paling sensitif terhadap kondisi tanaman.
Prediksi Data Sensor Baru
Terakhir, kita coba prediksi kondisi tanaman dari data sensor baru yang dikirim sistem IoT.
new_sensor <- tibble(temperature = 31,
humidity_air = 72,
soil_moisture = 55,
light_intensity = 650
)
predict(model_dt, new_sensor, type = "class")
Output:
"Sehat"
Artinya, dengan kombinasi nilai sensor tersebut, sistem bisa mendeteksi bahwa tanaman dalam kondisi optimal!
Kesimpulan
Melalui pendekatan sederhana dengan Decision Tree di R, kita bisa:
- Membangun sistem klasifikasi kondisi tanaman dari data IoT.
- Mengetahui fitur sensor paling berpengaruh.
- Melakukan prediksi kondisi tanaman secara real-time.
Langkah ini bisa menjadi pondasi awal untuk Smart Farming berbasis Machine Learning, dan bahkan bisa dikembangkan untuk integrasi real-time dashboard, alert system, atau otomatisasi penyiraman berdasarkan hasil prediksi
Ingin membuat sistem yang lebih cerdas? Sambungkan ESP32-mu ke R lewat MQTT atau API, dan biarkan datanya mengalir seperti aliran nutrisi bagi inovasi.
Kini, di dunia smart farming, data adalah pupuk digital yang menyuburkan ide dan efisiensi.