//ประกาศตัวแปรสำหรับขาของเซ็นเซอร์ Ultrasonic Module HC-SR04
const int pingPin = 19; //ขา Trig ต่อกับ ขา D23 ของบอร์ด esp32
int inPin = 18; //ขา Echo ต่อกับ ขา D22 ของบอร์ด esp32
//ประกาศตัวแปรสำหรับขา Buzzer(ลำโพง)
int buzzer = 20; //ขาขั้วบวกของ Buzzer ต่อกับ ขา D21 ของบอร์ด esp32
void setup() { //กำหนดค่าของโปรแกรม
pinMode(buzzer, OUTPUT); // กำหนดการทำงานของขา D21 ให้เป็น Output
Serial.begin(9600);
}
void loop()
{
long duration, cm; //ประกาศตัวแปร duration = แทนค่าระยะเวลา
// cm = แทนค่า เซ็นติเมตร
pinMode(pingPin, OUTPUT); // กำหนดการทำงานของขา D23 ให้เป็น Output
digitalWrite(pingPin, LOW);
delayMicroseconds(2); //delayMicroseconds(us) คือ ค่าเวลาที่ต้องการหน่วงเวลา มีหน่วยเป็น uS (micro-Second)
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(inPin, INPUT); //กำหนดการทำงานของขา D22 ให้เป็น Input
duration = pulseIn(inPin, HIGH); //pulseIn เป็นฟังชันสำหรับอ่านค่าสัญญาณพัลส์ที่ขาสัญญาณดิจิตอล ขา D22
cm = microsecondsToCentimeters(duration); //แปลงค่าความเร็วของสัญญาณไป-กลับ เป็นเซ็นติเมตร
//บรรทัดที่ 32 - 34 เป็นการสั่งให้แสดงค่าระยะทางผ่าน Serial Monitor
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
if(cm <= 50){ //ถ้าระยะห่างระหว่างเซ็นเซอร์ กับวัตถุ น้อยกว่าหรือเท่ากับ 50 cm
digitalWrite(buzzer,HIGH); //เสียงลำโพงดัง
delay(100); //หน่วงเวลา 100 ms
digitalWrite(buzzer,LOW); //เสียงลำโพงดับ
delay(100); //หน่วงเวลา 100 ms
}
}
long microsecondsToCentimeters(long microseconds)
{
/* ความเร็วของเสียงคือ 340 m/s หรือ 29 ไมโครวินาทีต่อเซนติเมตร
ค่าปิงเคลื่อนที่ไปและกลับ ดังนั้นในการหาระยะทางของวัตถุ เราจึงใช้ระยะทางที่เดินทางครึ่งหนึ่ง */
return microseconds / 29 / 2;
}