#include <Arduino.h>
#include "DHT.h"
// Pin konfigurasi
#define TRIG_PIN PA0
#define ECHO1_PIN PA1
#define ECHO2_PIN PA2
#define ECHO3_PIN PA3
#define ECHO4_PIN PB5
#define SOIL1_PIN PA7
#define SOIL2_PIN PB0
#define SOIL3_PIN PB1
#define SOIL4_PIN PA5
#define SERVO1_PIN PB6
#define SERVO2_PIN PB7
#define SERVO3_PIN PB8
#define SERVO4_PIN PB9
#define DHTPIN PB10
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Threshold nilai
int threshold_moisture = 500;
int threshold_level = 8;
// Array pin sensor dan servo
int soilPins[4] = {SOIL1_PIN, SOIL2_PIN, SOIL3_PIN, SOIL4_PIN};
int echoPins[4] = {ECHO1_PIN, ECHO2_PIN, ECHO3_PIN, ECHO4_PIN};
int servoPins[4] = {SERVO1_PIN, SERVO2_PIN, SERVO3_PIN, SERVO4_PIN};
// LED indikator per sensor 1-4
int ledPins[4] = {PA8, PA12, PB12, PB13};
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
digitalWrite(TRIG_PIN, LOW);
for (int i = 0; i < 4; i++) {
pinMode(echoPins[i], INPUT);
pinMode(servoPins[i], OUTPUT);
pinMode(soilPins[i], INPUT_ANALOG);
}
// Inisialisasi LED indikator
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
}
dht.begin();
delay(500);
}
// Fungsi servo manual
void tulisServoManual(int pin, int sudut) {
int pulseWidth = map(sudut, 0, 180, 500, 2500); // microsecond
for (int i = 0; i < 10; i++) {
digitalWrite(pin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(pin, LOW);
delayMicroseconds(20000 - pulseWidth);
}
}
// Fungsi ukur jarak
long measureDistance(int echoPin) {
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(echoPin, HIGH, 40000);
return duration * 0.034 / 2;
}
void loop() {
for (int i = 0; i < 4; i++) {
int soilValue = analogRead(soilPins[i]);
float distance = measureDistance(echoPins[i]);
Serial.print("Sensor ");
Serial.print(i + 1);
Serial.print(" - Soil: ");
Serial.print(soilValue);
Serial.print(" | Distance: ");
Serial.print(distance);
Serial.print(" cm | Servo: ");
if (distance > threshold_level) {
tulisServoManual(servoPins[i], 0);
Serial.println("Tutup (Ultrasonic)");
digitalWrite(ledPins[i], LOW);
} else {
if (soilValue < threshold_moisture) {
tulisServoManual(servoPins[i], 90);
Serial.println("Buka (Kering)");
digitalWrite(ledPins[i], HIGH);
} else {
tulisServoManual(servoPins[i], 0);
Serial.println("Tutup (Lembap)");
digitalWrite(ledPins[i], LOW);
}
}
delay(300);
}
// Baca DHT22
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" °C | Kelembaban: ");
Serial.print(kelembaban);
Serial.println(" %");
Serial.println("-------------");
delay(1000);
}
Ultrasonic sensor 3
Ultrasonic sensor 4
Ultrasonic sensor 1
Ultrasonic sensor 2
Servo 4
Servo 3
Servo 2
Servo 1
Soil Moisture 1
Soil Moisture 2
Soil Moisture 3
Soil Moisture 4
DHT22