Search Code

บทเรียน ESP32 27/55 - การวัดระยะทางด้วยเซนเซอร์อัลตราโซนิก | ชุดเรียนรู้ IoT ESP32 ของ SunFounder

บทเรียน ESP32 27/55 - การวัดระยะทางด้วยเซนเซอร์อัลตราโซนิก | ชุดเรียนรู้ IoT ESP32 ของ SunFounder

ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการใช้เซนเซอร์วัดระยะทางแบบอัลตราโซนิกร่วมกับ ESP32 เพื่อวัดระยะทางและแสดงผลบนหน้าจอ เราจะสำรวจวิธีการเปิดใช้งานออดเมื่อตรวจพบวัตถุภายในระยะที่กำหนด โปรเจกต์นี้แสดงให้เห็นถึงความสามารถรอบด้านของไมโครคอนโทรลเลอร์ ESP32 ซึ่งรวมความสามารถ Wi-Fi และ Bluetooth เข้าด้วยกัน ทำให้เหมาะสำหรับการใช้งาน IoT ต่างๆ

ultrasonic_principle

ตลอดคู่มือนี้ คุณจะพบคำอธิบายเกี่ยวกับส่วนประกอบฮาร์ดแวร์ คำแนะนำการเดินสายไฟ และตัวอย่างโค้ดเพื่อช่วยให้คุณดำเนินโปรเจกต์ได้สำเร็จ เพื่อความชัดเจนเพิ่มเติม โปรดดูวิดีโอ (ในวิดีโอที่ 00:00)

คำอธิบายฮาร์ดแวร์

ส่วนประกอบหลักของโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ ESP32 เซนเซอร์อัลตราโซนิก (HC-SR04) และออด เซนเซอร์อัลตราโซนิกประกอบด้วยสองส่วนหลัก: ตัวส่งที่ปล่อยคลื่นอัลตราโซนิกและตัวรับที่ฟังคลื่นที่สะท้อนกลับ โดยการวัดเวลาที่คลื่นใช้ในการกลับมา เราสามารถคำนวณระยะทางถึงวัตถุได้

ESP32 ทำหน้าที่เป็นตัวควบคุมหลัก ประมวลผลข้อมูลจากเซนเซอร์อัลตราโซนิกและควบคุมออดตามระยะทางที่วัดได้ ออดจะดังเมื่อระยะทางที่ตรวจพบน้อยกว่าเกณฑ์ที่กำหนด ซึ่งบ่งบอกว่าวัตถุอยู่ใกล้เกินไป

รายละเอียดจาก Datasheet

ผู้ผลิต HC-SR04
หมายเลขชิ้นส่วน HC-SR04
แรงดันไฟฟ้าลอจิก/IO 5 V
แรงดันไฟฟ้าจ่าย 5 V
กระแสเอาต์พุต (ต่อช่อง) 16 mA
กระแสสูงสุด (ต่อช่อง)
คำแนะนำความถี่ PWM
เกณฑ์แรงดันไฟฟ้าอินพุตลอจิก
แรงดันตก / RDS(on) / ความอิ่มตัว
ขีดจำกัดความร้อน
แพ็คเกจ
หมายเหตุ / รุ่นต่างๆ ช่วงการวัด: 2 ซม. ถึง 400 ซม.

 

  • ตรวจสอบให้แน่ใจว่ามีแหล่งจ่ายไฟ 5 V ที่เหมาะสมสำหรับเซนเซอร์
  • รักษาเส้นทางที่ชัดเจนสำหรับคลื่นอัลตราโซนิกเพื่อหลีกเลี่ยงการรบกวน
  • ใช้สายไฟสั้นเพื่อลดความล่าช้าของสัญญาณและสัญญาณรบกวน
  • ตรวจสอบการเชื่อมต่อพินที่ถูกต้องเพื่อหลีกเลี่ยงการสื่อสารที่ผิดพลาด
  • ทดสอบเซนเซอร์ในสภาพแวดล้อมต่างๆ เพื่อตรวจสอบความแม่นยำ

คำแนะนำการเดินสายไฟ

ESP32-27_ultrasonic_wiring

ในการเดินสายไฟเซนเซอร์อัลตราโซนิกเข้ากับ ESP32 ให้เชื่อมต่อพิน VCC ของเซนเซอร์เข้ากับพิน 5V บน ESP32 จากนั้นเชื่อมต่อพิน GND ของเซนเซอร์เข้ากับพินกราวด์ (GND) ตัวใดตัวหนึ่งบน ESP32 พินทริกเกอร์ (Trig) จากเซนเซอร์ควรเชื่อมต่อกับ GPIO 26 บน ESP32 ในขณะที่พินเอคโค่ (Echo) ควรเชื่อมต่อกับ GPIO 25 การตั้งค่านี้ช่วยให้ ESP32 ส่งสัญญาณไปยังเซนเซอร์และรับสัญญาณเอคโค่เพื่อคำนวณระยะทาง

ESP32-27_ultrasonic_schematic

สำหรับออด ให้เชื่อมต่อขาบวก (ยาว) เข้ากับ GPIO 12 บน ESP32 และขาลบ (สั้น) เข้ากับ GND ตรวจสอบให้แน่ใจว่าการเชื่อมต่อทั้งหมดแน่นหนาเพื่อป้องกันสายไฟหลวมระหว่างการทำงาน หากใช้เบรดบอร์ด ให้จัดตำแหน่งการเชื่อมต่อออดอย่างถูกต้องเพื่อหลีกเลี่ยงการเดินสายผิด โปรดดูวิดีโอเพื่อยืนยันการเดินสายไฟ (ในวิดีโอที่ 05:12)

ตัวอย่างโค้ดและคำอธิบาย

โค้ดเริ่มต้นพินสำหรับเซนเซอร์อัลตราโซนิกและตั้งค่าการสื่อสารแบบอนุกรม ฟังก์ชันหลัก readSensorData() มีหน้าที่ส่งสัญญาณทริกเกอร์และวัดเวลาตอบสนองจากพินเอคโค่

const int echoPin = 25;
const int trigPin = 26;

void setup() {
  Serial.begin(115200);
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
  Serial.println("Ultrasonic sensor:");  
}

โค้ดกำหนด echoPin และ trigPin เป็นค่าคงที่สำหรับพินที่เชื่อมต่อกับเซนเซอร์อัลตราโซนิก ในฟังก์ชัน setup() เราจะเริ่มต้นการสื่อสารแบบอนุกรมและตั้งค่าโหมดพินตามนั้น

float readSensorData() {
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  unsigned long microsecond = pulseIn(echoPin, HIGH);
  float distance = microsecond / 29.00 / 2;
  return distance;
}

ส่วนนี้แสดงฟังก์ชัน readSensorData() ซึ่งส่งพัลส์ 10 ไมโครวินาทีไปยังพินทริกเกอร์ จากนั้นจะวัดเวลาที่พินเอคโค่ใช้ในการรับสัญญาณกลับ คำนวณระยะทาง และส่งค่านี้กลับมา

สุดท้าย ฟังก์ชันลูปจะอ่านระยะทางอย่างต่อเนื่องและพิมพ์ลงในซีเรียลมอนิเตอร์ หากระยะทางต่ำกว่า 20 ซม. ออดจะถูกเปิดใช้งาน

การสาธิต / สิ่งที่คาดหวัง

เมื่อคุณรันโปรแกรม ESP32 จะแสดงระยะทางที่วัดได้เป็นเซนติเมตรบนซีเรียลมอนิเตอร์ หากวัตถุเข้ามาภายใน 20 ซม. จากเซนเซอร์ ออดจะดัง พฤติกรรมนี้สามารถทดสอบได้โดยวางวัตถุที่ระยะต่างๆ ด้านหน้าเซนเซอร์ ระวังการกลับขั้วและตรวจสอบให้แน่ใจว่าการเชื่อมต่อเป็นไปตามที่ระบุเพื่อหลีกเลี่ยงปัญหาใดๆ ระหว่างการทำงาน (ในวิดีโอที่ 08:00)

ไทม์สแตมป์ในวิดีโอ

  • 00:00 เริ่มต้น
  • 1:46 แนะนำเซนเซอร์อัลตราโซนิก
  • 6:02 อธิบายการเดินสายไฟ
  • 7:37 อธิบายโค้ด Arduino สำหรับ ESP32
  • 11:33 การเลือกบอร์ด ESP32 และพอร์ต COM ใน Arduino IDE
  • 13:15 สาธิตการวัดระยะทาง
  • 16:43 การดำเนินการตามระยะทาง: ออด

ภาพ

ESP32-27_ultrasonic_wiring
ESP32-27_ultrasonic_wiring
ESP32-27_ultrasonic_schematic
ESP32-27_ultrasonic_schematic
ultrasonic_principle
ultrasonic_principle
827-ESP32 Tutorial 27/55- Arduino code for ultrasonic sensor
ภาษา: C++
// Define pins for the ultrasonic sensor
const int echoPin = 25;
const int trigPin = 26;

// Function prototype for reading sensor data
float readSensorData();

void setup() {
  // Begin serial communication at 115200 baud rate
  Serial.begin(115200);
  // Set echoPin as input and trigPin as output
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
  // Print sensor information to the serial monitor
  Serial.println("Ultrasonic sensor:");  
}

void loop() {
  // Read distance from the ultrasonic sensor
  float distance = readSensorData();
  // Print the measured distance to the serial monitor
  Serial.print(distance);   
  Serial.println(" cm");
  // Delay between readings
  delay(200);
}

// Function to read data from the ultrasonic sensor
float readSensorData() {
  // Trigger a low signal before sending a high signal
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  // Send a 10-microsecond high signal to the trigPin
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  // Return to low signal
  digitalWrite(trigPin, LOW);
  
  // Measure the duration of the high signal on the echoPin
  unsigned long microsecond = pulseIn(echoPin, HIGH);

  // Calculate the distance using the speed of sound (29.00µs per centimeter)
  float distance = microsecond / 29.00 / 2;

  // Return the calculated distance
  return distance;
}

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

ไม่มีไฟล์ที่พร้อมใช้งาน