Search Code

Tutorial ESP32 35/55 - Monitor Tanaman, tanah, suhu, dan cahaya | Kit Pembelajaran IoT ESP32 SunFounder

Tutorial ESP32 35/55 - Monitor Tanaman, tanah, suhu, dan cahaya | Kit Pembelajaran IoT ESP32 SunFounder

Dalam tutorial ini, kita akan membuat monitor tanaman menggunakan mikrokontroler ESP32 dari SunFounder ESP32 IoT Learning Kit. Proyek ini menggabungkan beberapa komponen untuk memantau kelembapan tanah, suhu, kelembapan udara, dan tingkat cahaya. Di akhir panduan ini, Anda akan memiliki sistem yang berfungsi penuh yang dapat mengelola dan menampilkan parameter penting ini untuk perawatan tanaman. Untuk penjelasan visual yang detail, pastikan untuk menonton video (di video pada 00:00).

Skema monitor tanaman ESP32-25

Penjelasan Perangkat Keras

Komponen utama yang digunakan dalam proyek ini meliputi mikrokontroler ESP32, sensor DHT11, sensor kelembapan tanah, resistor dependen cahaya (LDR), dan LCD untuk menampilkan data. ESP32 berfungsi sebagai otak dari pengaturan ini, menangani pemrosesan data dan tugas kontrol. ESP32 memiliki Wi-Fi dan Bluetooth bawaan, menyediakan opsi konektivitas untuk pemantauan jarak jauh.

Fotoresistor
Modul DHT11
Modul DHT11

Sensor DHT11 mengukur suhu dan kelembapan udara, sementara sensor kelembapan tanah mendeteksi tingkat kelembapan di dalam tanah. LDR mengukur intensitas cahaya sekitar, memungkinkan wawasan tentang kondisi pencahayaan tanaman. Setiap komponen memainkan peran penting dalam memastikan kesehatan tanaman dengan menyediakan data real-time.

Detail Datasheet

Produsen SunFounder
Nomor bagian DHT11
Tegangan logika/IO 3,3 V
Tegangan suplai 5 V
Arus keluaran (per saluran) 20 mA
Arus puncak (per saluran) 50 mA
Panduan frekuensi PWM T/A
Ambang logika masukan 0,3 VCC (rendah), 0,7 VCC (tinggi)
Penurunan tegangan / RDS(on) / saturasi T/A
Batas termal 0°C hingga 50°C
Kemasan DIP
Catatan / varian Kompatibel dengan DHT22

 

  • Pastikan tingkat tegangan yang tepat untuk setiap komponen (5V untuk driver motor, 3,3V untuk sensor).
  • Gunakan resistor pull-down untuk tombol tekan untuk mencegah masukan mengambang.
  • Jaga kerapian kabel untuk menghindari kebingungan dan potensi korsleting.
  • Periksa koneksi sebelum memberi daya pada rangkaian untuk mencegah kerusakan.
  • Periksa kabel DHT11 karena sensitif terhadap koneksi yang salah.

Instruksi Pengkabelan

ESP32-25_plant_moitor_wiring

Untuk menghubungkan komponen, mulailah dengan menghubungkan jalur daya dan ground. ESP32 harus diberi daya dengan baterai lithium, menghubungkan terminal positif ke jalur VCC dan ground ke jalur GND pada breadboard. Pin data sensor DHT11 terhubung ke PIN 13, sementara VCC-nya menuju ke jalur 3,3V dan GND ke ground. Sensor kelembapan tanah terhubung dengan cara yang sama: pin sinyalnya ke PIN 14, VCC ke 3,3V, dan GND ke ground.

Untuk LDR, hubungkan satu pin ke jalur 3,3V dan pin lainnya ke PIN 35, dengan resistor 10k ohm terhubung dari LDR ke ground. Layar LCD terhubung ke jalur 5V untuk daya dan menggunakan pin SDA dan SCL yang terhubung ke PIN 21 dan PIN 22, masing-masing. Terakhir, hubungkan tombol tekan ke PIN 32 dengan resistor pull-down terhubung ke ground, memastikan tombol membaca rendah saat tidak ditekan dan tinggi saat ditekan.

Contoh Kode & Penjelasan

Inti dari program kita dimulai dengan mendefinisikan pin untuk setiap komponen. Misalnya, DHTPIN ditetapkan ke PIN 13 untuk sensor DHT11, sementara MOIS_PIN diatur ke PIN 14 untuk sensor kelembapan. Organisasi ini membantu melacak sensor mana yang terhubung ke pin mana.


#define DHTPIN 13     // Mengatur pin yang terhubung ke pin data DHT11
#define MOIS_PIN 14 // Modul kelembapan tanah
#define LIGHT_PIN 35 // Fotoresistor

Selanjutnya, kita menginisialisasi sensor DHT dan layar LCD di dalam fungsi setup(). Ini sangat penting karena mempersiapkan komponen-komponen ini untuk beroperasi. Pastikan untuk memanggil dht.begin() sangat penting agar sensor DHT mulai membaca nilai dengan benar.


void setup() {
  Serial.begin(115200);
  dht.begin();  // Menginisialisasi DHT11
  lcd.init();  // Menginisialisasi LCD
  lcd.backlight();
}

Dalam fungsi loop(), kita terus membaca nilai suhu dan kelembapan udara, menampilkannya di LCD. Jika tombol ditekan, motor diaktifkan untuk menyiram tanaman. Logika ini menggunakan pembacaan digital dari pin tombol untuk menentukan apakah akan menyalakan atau mematikan motor.


void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(motor1A, HIGH); // Menyalakan pompa air
  } else {
    digitalWrite(motor1A, LOW); // Mematikan pompa air
  }
  delay(2000);
}

Struktur kode ini memungkinkan alur data dan kontrol yang jelas, memastikan monitor tanaman berfungsi dengan lancar. Untuk detail lebih lanjut, kode lengkap dimuat di bawah artikel.

Demonstrasi / Apa yang Diharapkan

Setelah menyelesaikan pengaturan dan mengunggah kode, LCD harus menampilkan pembacaan suhu dan kelembapan secara bergantian dengan tingkat kelembapan tanah dan cahaya. Saat tombol tekan ditekan, pompa air harus aktif, mengalirkan air ke tanaman. Pastikan semua koneksi aman untuk menghindari masalah seperti input mengambang atau pembacaan yang salah (dalam video pada 05:30).

Memantau nilai yang ditampilkan di LCD dan monitor serial akan membantu memastikan sistem berfungsi dengan benar. Jika Anda mengalami masalah, periksa kembali kabel dan pastikan semua komponen diberi daya dengan tepat.

Stempel Waktu Video

  • 00:00 Mulai
  • 2:23 Pengenalan Proyek
  • 4:02 Halaman dokumen
  • 7:43 1-Penggerak motor pompa L293D
  • 14:30 2-Tombol tekan untuk Pompa
  • 16:35 3-Sensor Suhu dan Kelembapan DHT11
  • 19:26 4-Sensor Kelembapan Tanah
  • 21:43 5-Sensor Cahaya
  • 24:47 6-Sensor Kelembapan Tanah
  • 26:01 Kode Arduino Monitor Tanaman Lengkap
  • 29:21 Demonstrasi

Gambar

DHT11 Module
DHT11 Module
5V DC water pump
5V DC water pump
soil_mositure_module
soil_mositure_module
photoresistor
photoresistor
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_wiring
ESP32-25_plant_moitor_wiring
836-ESP32 Tutorial 35/55- Arduino code for plant monitor
Bahasa: C++
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN 13     // Set the pin connected to the DHT11 data pin
#define MOIS_PIN 14 // Soil mOisture module
#define LIGHT_PIN 35 // Photoresistor
#define motor1A 27 // Pump pin
#define motor2A 26 // Pump pin
#define BUTTON 32 // Button

#define DHTTYPE DHT11  // DHT 11
DHT dht(DHTPIN, DHTTYPE);

int page = 0;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {

  Serial.begin(115200);

  // Initialize the dht11
  dht.begin();

  lcd.init();  // initialize the lcd
  lcd.backlight();
  lcd.clear();

  // initialize digital pin as an output.
  pinMode(motor1A, OUTPUT);
  pinMode(motor2A, OUTPUT);

  pinMode(BUTTON, INPUT);
}

void loop() {

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
  float humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float temperature = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  lcd.clear();
  // Show message per 2 second
  if ((page++) % 2) {
    // Display temperature and humidity
    lcd.setCursor(0, 0);
    lcd.print("Humi: ");
    lcd.print(humidity);
    lcd.print("%");
    lcd.setCursor(0, 1);
    lcd.print("Temp: ");
    lcd.print(temperature);
    lcd.print("\xDF");
    lcd.print("C");
  } else {
    // Display moisture and light sensor values
    lcd.setCursor(0, 0);
    lcd.print("Mois: ");
    lcd.print(analogRead(MOIS_PIN));
    lcd.setCursor(0, 1);
    lcd.print("Light: ");
    lcd.print(analogRead(LIGHT_PIN));
  }
  // Water plant while button pressed
  Serial.println(digitalRead(BUTTON));
  if (digitalRead(BUTTON) == HIGH) {
    // Turn on water pump if button is pressed
    digitalWrite(motor1A, HIGH);
    digitalWrite(motor2A, LOW);
  } else {
    // Turn off water pump if button is not pressed
    digitalWrite(motor1A, LOW);
    digitalWrite(motor2A, LOW);
  }

  delay(2000);
}

Hal-hal yang mungkin Anda butuhkan

Sumber daya & referensi

Berkas📁

File Fritzing