#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 ECHO5_PIN PB4
#define ECHO6_PIN PB3
#define SOIL1_PIN PA7
#define SOIL2_PIN PB0
#define SOIL3_PIN PB1
#define SOIL4_PIN PA5
#define SOIL5_PIN PA4
#define SOIL6_PIN PA6
#define SERVO1_PIN PB6
#define SERVO2_PIN PB7
#define SERVO3_PIN PB8
#define SERVO4_PIN PB9
#define SERVO5_PIN PA11
#define SERVO6_PIN PA15
#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[6] = {SOIL1_PIN, SOIL2_PIN, SOIL3_PIN, SOIL4_PIN, SOIL5_PIN, SOIL6_PIN};
int echoPins[6] = {ECHO1_PIN, ECHO2_PIN, ECHO3_PIN, ECHO4_PIN, ECHO5_PIN, ECHO6_PIN};
int servoPins[6] = {SERVO1_PIN, SERVO2_PIN, SERVO3_PIN, SERVO4_PIN, SERVO5_PIN, SERVO6_PIN};
// LED indikator per sensor 1-6
int ledPins[6] = {PA8, PA12, PB12, PB13, PB14, PB15}; // LED 6 menggunakan PB15
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
digitalWrite(TRIG_PIN, LOW);
for (int i = 0; i < 6; i++) {
pinMode(echoPins[i], INPUT);
pinMode(servoPins[i], OUTPUT);
pinMode(soilPins[i], INPUT_ANALOG);
}
// Inisialisasi LED indikator
for (int i = 0; i < 6; 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 < 6; 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)");
if (i < 6) digitalWrite(ledPins[i], LOW); // LED mati kalau tutup
} else {
if (soilValue < threshold_moisture) {
tulisServoManual(servoPins[i], 90);
Serial.println("Buka (Kering)");
if (i < 6) digitalWrite(ledPins[i], HIGH); // LED nyala kalau buka
} else {
tulisServoManual(servoPins[i], 0);
Serial.println("Tutup (Lembap)");
if (i < 6) digitalWrite(ledPins[i], LOW); // LED mati kalau tutup
}
}
// Jika sensor adalah yang ke-6, periksa LED dan kondisinya
if (i == 5) {
if (soilValue < threshold_moisture) {
digitalWrite(ledPins[5], HIGH); // Nyalakan LED 6 jika tanah kering
} else {
digitalWrite(ledPins[5], LOW); // Matikan LED 6 jika tanah lembap
}
}
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 5
Ultrasonic sensor 3
Ultrasonic sensor 4
Ultrasonic sensor 1
Ultrasonic sensor 2
Ultrasonic sensor 6
Servo 6
Servo 5
Servo 4
Servo 3
Servo 2
Servo 1
Soil Moisture 1
Soil Moisture 2
Soil Moisture 3
Soil Moisture 4
Soil Moisture 5
Soil Moisture 6
DHT22
Loading
cd74hc4067
cd74hc4067