Best Practice IoT Smart Farming

Plant Health Classification Menggunakan R dan Decision Tree
19 Oktober 2025 oleh
Best Practice IoT Smart Farming
Bayu Widodo

​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:

  1. Tanaman yang sehat umumnya berada di rentang suhu dan kelembapan tanah yang stabil.
  2. 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.



Best Practice IoT Smart Farming
Bayu Widodo 19 Oktober 2025
Arsip