// กำหนดขาสำหรับเซ็นเซอร์ Ultrasonic
#define TRIG_HORIZONTAL1 23
#define ECHO_HORIZONTAL1 22
#define TRIG_HORIZONTAL2 19
#define ECHO_HORIZONTAL2 18
#define TRIG_HORIZONTAL3 17
#define ECHO_HORIZONTAL3 16
#define TRIG_VERTICAL 4
#define ECHO_VERTICAL 5
// กำหนดขาสำหรับ LED สีเขียว (แสดงสถานะทำงาน)
#define GREEN_LED_HORIZONTAL1 32
#define GREEN_LED_HORIZONTAL2 34
#define GREEN_LED_HORIZONTAL3 25
#define GREEN_LED_VERTICAL 14
// กำหนดขาสำหรับ LED สีแดง (แสดงสถานะไม่ทำงาน)
#define RED_LED_HORIZONTAL1 33
#define RED_LED_HORIZONTAL2 26
#define RED_LED_HORIZONTAL3 27
#define RED_LED_VERTICAL 12
// ฟังก์ชันตั้งค่าเริ่มต้น
void setup() {
Serial.begin(115200); // เริ่มต้น Serial Monitor
// ตั้งค่าขาเซ็นเซอร์เป็น INPUT และ OUTPUT
pinMode(TRIG_HORIZONTAL1, OUTPUT);
pinMode(ECHO_HORIZONTAL1, INPUT);
pinMode(TRIG_HORIZONTAL2, OUTPUT);
pinMode(ECHO_HORIZONTAL2, INPUT);
pinMode(TRIG_HORIZONTAL3, OUTPUT);
pinMode(ECHO_HORIZONTAL3, INPUT);
pinMode(TRIG_VERTICAL, OUTPUT);
pinMode(ECHO_VERTICAL, INPUT);
// ตั้งค่าขา LED สีเขียว
pinMode(GREEN_LED_HORIZONTAL1, OUTPUT);
pinMode(GREEN_LED_HORIZONTAL2, OUTPUT);
pinMode(GREEN_LED_HORIZONTAL3, OUTPUT);
pinMode(GREEN_LED_VERTICAL, OUTPUT);
// ตั้งค่าขา LED สีแดง
pinMode(RED_LED_HORIZONTAL1, OUTPUT);
pinMode(RED_LED_HORIZONTAL2, OUTPUT);
pinMode(RED_LED_HORIZONTAL3, OUTPUT);
pinMode(RED_LED_VERTICAL, OUTPUT);
}
void checkSensorStatus(int trigPin, int echoPin, int greenLedPin, int redLedPin) {
long distance = readDistance(trigPin, echoPin);
if (distance > 0 && distance < 400) { // เซ็นเซอร์ทำงานปกติ
digitalWrite(greenLedPin, HIGH); // เปิด LED สีเขียว
digitalWrite(redLedPin, LOW); // ปิด LED สีแดง
} else { // เซ็นเซอร์ไม่ทำงาน
digitalWrite(greenLedPin, LOW); // ปิด LED สีเขียว
digitalWrite(redLedPin, HIGH); // เปิด LED สีแดง
}
}
// ฟังก์ชันสำหรับวัดระยะทาง
long readDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH); // วัดระยะเวลาเสียงสะท้อนกลับ
long distance = duration * 0.034 / 2; // คำนวณระยะทาง (เซนติเมตร)
return distance;
}
// ฟังก์ชันหลักทำงานซ้ำ
void loop() {
// ตรวจสอบสถานะเซ็นเซอร์แนวนอนตัวที่ 1
checkSensorStatus(TRIG_HORIZONTAL1, ECHO_HORIZONTAL1, GREEN_LED_HORIZONTAL1, RED_LED_HORIZONTAL1);
// ตรวจสอบสถานะเซ็นเซอร์แนวนอนตัวที่ 2
checkSensorStatus(TRIG_HORIZONTAL2, ECHO_HORIZONTAL2, GREEN_LED_HORIZONTAL2, RED_LED_HORIZONTAL2);
// ตรวจสอบสถานะเซ็นเซอร์แนวนอนตัวที่ 3
checkSensorStatus(TRIG_HORIZONTAL3, ECHO_HORIZONTAL3, GREEN_LED_HORIZONTAL3, RED_LED_HORIZONTAL3);
// ตรวจสอบสถานะเซ็นเซอร์แนวดิ่ง
checkSensorStatus(TRIG_VERTICAL, ECHO_VERTICAL, GREEN_LED_VERTICAL, RED_LED_VERTICAL);
// วัดระยะทางจากเซ็นเซอร์แนวนอนทั้ง 3 ตัว
long distanceHorizontal1 = readDistance(TRIG_HORIZONTAL1, ECHO_HORIZONTAL1);
long distanceHorizontal2 = readDistance(TRIG_HORIZONTAL2, ECHO_HORIZONTAL2);
long distanceHorizontal3 = readDistance(TRIG_HORIZONTAL3, ECHO_HORIZONTAL3);
// วัดระยะทางจากเซ็นเซอร์แนวดิ่ง
long distanceVertical = readDistance(TRIG_VERTICAL, ECHO_VERTICAL);
// แสดงผลข้อมูลใน Serial Monitor
Serial.println("ตรวจสอบสถานะเซ็นเซอร์เสร็จสิ้น");
delay(1000); // หน่วงเวลา 1 วินาที
Serial.println("=== ระยะทางจากเซ็นเซอร์ ===");
Serial.print("แนวนอน (10%): ");
Serial.print(distanceHorizontal1);
Serial.println(" cm");
Serial.print("แนวนอน (50%): ");
Serial.print(distanceHorizontal2);
Serial.println(" cm");
Serial.print("แนวนอน (90%): ");
Serial.print(distanceHorizontal3);
Serial.println(" cm");
Serial.print("แนวดิ่ง: ");
Serial.print(distanceVertical);
Serial.println(" cm");
// วิเคราะห์ข้อมูลเพื่อดูสถานะขยะ
if (distanceHorizontal3 < 5) {
Serial.println("สถานะ: ขยะเต็มถัง!");
} else if (distanceHorizontal1 < 5 || distanceHorizontal2 < 5) {
Serial.println("สถานะ: ขยะเริ่มสะสม!");
} else {
Serial.println("สถานะ: ขยะยังไม่เต็ม");
}
// ตรวจสอบการกระจายตัวของขยะ
if (distanceVertical > 15) {
Serial.println("คำแนะนำ: ขยะไม่ได้กระจายตัวดี");
}
Serial.println("==========================");
delay(10000); // รอ 10 วินาที ก่อนวัดใหม่
}
//เอ็นจอยครับโผมมมม หนูเหนื่อยแล้วอะ ทำต่อดีมั้ย