- วัสดุที่ต้องการ:
- แผนภูมิวงจรรวม:
- โมดูล HC-SR04 ทำงานอย่างไร:
- การวัดระยะห่างระหว่างเซ็นเซอร์อัลตราโซนิกสองตัว (HC-SR04):
- โปรแกรมสำหรับเซ็นเซอร์ตัวส่ง:
- โปรแกรมสำหรับเซนเซอร์ตัวรับ:
- การทำงาน:
- แนวคิดชั่วคราว - การปรับเทียบเซ็นเซอร์โดยใช้ระยะทางที่ทราบ:
อัลตราโซนิกเซนเซอร์ (HC-SR04) มักใช้เพื่อค้นหาระยะห่างของวัตถุจากจุดใดจุดหนึ่ง มันค่อนข้างง่ายที่จะทำกับ Arduino และโค้ดก็ค่อนข้างง่าย แต่ในบทความนี้เราจะลองใช้เซ็นเซอร์ HC-SR04 ยอดนิยมเหล่านี้ เราจะลองคำนวณระยะห่างระหว่างเซ็นเซอร์อัลตราโซนิกสองตัวนั่นคือเราจะทำให้เซ็นเซอร์หนึ่งตัวทำหน้าที่เป็นตัวส่งและเซ็นเซอร์อีกตัวเพื่อทำหน้าที่เป็นตัวรับ ด้วยการทำเช่นนี้เราสามารถติดตามตำแหน่งของเครื่องส่งหนึ่งเครื่องโดยใช้เครื่องรับอัลตราโซนิกจำนวนมากการติดตามนี้เรียกว่าการระบุตำแหน่งและสามารถใช้สำหรับผู้ติดตามกระเป๋าหุ่นยนต์เชื่อมต่ออัตโนมัติและแอปพลิเคชันอื่น ๆ ที่คล้ายคลึงกัน การหาระยะห่างระหว่างเซ็นเซอร์สองตัวของสหรัฐฯ อาจฟังดูเป็นงานที่ค่อนข้างง่าย แต่ฉันต้องเผชิญกับความท้าทายเล็กน้อยซึ่งจะกล่าวถึงในโครงการนี้
เทคนิคที่กล่าวถึงในบทความนี้ไม่ถูกต้องและอาจไม่มีประโยชน์ในระบบจริงใด ๆ หากไม่มีการปรับเปลี่ยน ในช่วงเวลาของเอกสารนี้ฉันไม่พบว่ามีใครได้ผลลัพธ์ใกล้เคียงกับของฉันดังนั้นฉันจึงเพิ่งแบ่งปันความคิดเห็นของฉันว่าฉันจะทำงานอย่างไรเพื่อให้คนที่พยายามทำสิ่งนี้ไม่จำเป็นต้องประดิษฐ์วงล้อขึ้นมาใหม่
วัสดุที่ต้องการ:
- Arduino (2Nos) - รุ่นใดก็ได้
- โมดูล HCSR04 (2Nos)
แผนภูมิวงจรรวม:
แม้ว่าเราจะสร้างเซ็นเซอร์ US (Ultrasonic) หนึ่งตัวเพื่อทำงานเป็นตัวส่งและอีกตัวเป็นตัวรับสัญญาณจำเป็นต้องเชื่อมต่อพินทั้งสี่ของเซ็นเซอร์กับ Arduino ทำไมเราควร? ซึ่งจะกล่าวถึงในภายหลัง แต่สำหรับตอนนี้แผนภาพวงจรจะเป็นดังนี้
ดังที่คุณเห็นแผนภาพวงจรสำหรับทั้งตัวส่งและตัวรับนั้นเหมือนกัน ตรวจสอบด้วย: Arduino Ultrasonic Sensor Interfacing
โมดูล HC-SR04 ทำงานอย่างไร:
ก่อนที่เราจะดำเนินการใด ๆ เพิ่มเติมให้เราเข้าใจว่าเซ็นเซอร์ HC-SR04 ทำงานอย่างไร แผนภาพเวลาด้านล่างจะช่วยให้เราเข้าใจการทำงาน
เซ็นเซอร์มีสองพิน Trigger และ Echo ซึ่งใช้ในการวัดระยะทางดังแสดงในแผนภาพเวลา อันดับแรกในการเริ่มต้นการวัดเราควรส่งคลื่นอัลตราโซนิกจากเครื่องส่งซึ่งสามารถทำได้โดยตั้งค่าขาไกให้สูงเป็นเวลา 10uS ทันทีที่เสร็จสิ้นพินเครื่องส่งสัญญาณจะส่งคลื่นเสียงสหรัฐระเบิด 8 ลูก คลื่นสหรัฐนี้จะกระทบวัตถุที่ตีกลับและผู้รับจะได้รับ
แผนภาพเวลาแสดงให้เห็นว่าเมื่อผู้รับได้รับคลื่นแล้วจะทำให้ขา Echo อยู่สูงเป็นระยะเวลาหนึ่งซึ่งเท่ากับเวลาที่คลื่นเดินทางจากเซ็นเซอร์ของสหรัฐอเมริกาและกลับไปที่เซ็นเซอร์ นี้แผนภาพระยะเวลาที่ดูเหมือนจะไม่เป็นความจริง
ฉันปิดส่วน Tx (ตัวส่งสัญญาณ) ของเซ็นเซอร์และตรวจสอบว่า Echo pulse สูงหรือไม่และใช่มันสูงไป ซึ่งหมายความว่า Echo pulse ไม่รอให้คลื่น US (อัลตราโซนิก) ได้รับจากมัน เมื่อมันส่งคลื่นสหรัฐมันจะพุ่งสูงและอยู่สูงจนกว่าคลื่นจะกลับมา ดังนั้นแผนภาพเวลาที่ถูกต้องควรเป็นแบบนี้ที่แสดงด้านล่าง (ขออภัยสำหรับทักษะการเขียนที่ไม่ดีของฉัน)
การทำให้ HC-SR04 ของคุณทำงานเป็นตัวส่งเท่านั้น:
มันค่อนข้างตรงไปตรงมาที่จะทำให้ HC-SR04 ทำงานเป็นตัวส่งเท่านั้น ดังที่แสดงในแผนภาพเวลาคุณต้องประกาศพินทริกเกอร์เป็นพินเอาต์พุตและทำให้อยู่สูงเป็นเวลา 10 ไมโครวินาที สิ่งนี้จะเริ่มต้นการระเบิดของคลื่นอัลตราโซนิก ดังนั้นเมื่อใดก็ตามที่เราต้องการส่งคลื่นเราก็เพียงแค่ควบคุมขาทริกเกอร์ของเซ็นเซอร์ตัวส่งซึ่งรหัสจะได้รับด้านล่าง
การทำให้ HC-SR04 ของคุณทำงานเป็นตัวรับเท่านั้น:
ดังที่แสดงในแผนภาพเวลาเราไม่สามารถควบคุมการเพิ่มขึ้นของพิน Echo ได้เนื่องจากเกี่ยวข้องกับขาไก ดังนั้นจึงไม่มีทางที่เราจะทำให้ HC-SR04 ทำงานเป็นตัวรับได้เท่านั้น แต่เราสามารถใช้แฮ็คได้โดยเพียงแค่ปิดส่วน Transmitter ของเซ็นเซอร์ด้วยเทป (ดังแสดงในภาพด้านล่าง) หรือปิดคลื่นของสหรัฐไม่สามารถหลุดออกไปนอกปลอกเครื่องส่งสัญญาณได้และขา Echo จะไม่ได้รับผลกระทบจากคลื่นสหรัฐนี้
ตอนนี้เพื่อให้ echo pin สูงขึ้นเราก็แค่ดึงพินทริกเกอร์จำลองนี้ให้สูงเป็นเวลา 10 ไมโครวินาที เมื่อเซ็นเซอร์ตัวรับนี้ได้รับคลื่นของสหรัฐที่ส่งโดยเซ็นเซอร์ตัวส่งสัญญาณเสียงสะท้อนจะอยู่ในระดับต่ำ
การวัดระยะห่างระหว่างเซ็นเซอร์อัลตราโซนิกสองตัว (HC-SR04):
จนถึงตอนนี้เราเข้าใจวิธีทำให้เซ็นเซอร์หนึ่งทำงานเป็นตัวส่งและเซ็นเซอร์อีกตัวทำงานเป็นตัวรับ ตอนนี้เราต้องส่งคลื่นอัลตร้าโซนิคจากเซ็นเซอร์เครื่องส่งและรับด้วยเซ็นเซอร์รับและตรวจสอบเวลาที่คลื่นเดินทางจากเครื่องส่งไปยังเครื่องรับฟังดูง่ายใช่ไหม ?? แต่น่าเศร้า! เรามีปัญหาที่นี่และจะไม่ได้ผล
โมดูลตัวส่งและโมดูลตัวรับอยู่ห่างกันและเมื่อโมดูลตัวรับได้รับคลื่นของสหรัฐฯจากโมดูลเครื่องส่งสัญญาณจะไม่ทราบว่าเครื่องส่งส่งคลื่นนี้เมื่อใด โดยไม่ทราบเวลาเริ่มต้นเราไม่สามารถคำนวณเวลาและระยะทางได้ ในการแก้ปัญหานี้ต้องทำให้พัลส์ Echo ของโมดูลตัวรับสูงขึ้นอย่างแน่นอนเมื่อโมดูล Transmitter ส่งคลื่น US กล่าวอีกนัยหนึ่งโมดูลเครื่องส่งสัญญาณและโมดูลตัวรับควรทริกเกอร์พร้อมกัน สามารถทำได้โดยวิธีการต่อไปนี้
ในแผนภาพด้านบน Tx แสดงถึงเซ็นเซอร์ตัวส่งและ Rx หมายถึงเซ็นเซอร์ตัวรับ ดังที่แสดงให้เห็นว่าเซ็นเซอร์ตัวส่งจะถูกสร้างขึ้นเพื่อส่งคลื่นของสหรัฐฯด้วยความล่าช้าที่ทราบเป็นระยะนี่คือทั้งหมดที่ต้องทำ
ในเซ็นเซอร์ตัวรับเราต้องทำให้พินทริกเกอร์สูงขึ้นอย่างแน่นอนในช่วงที่พินเครื่องส่งสัญญาณสูงขึ้น ดังนั้นในตอนแรกเราจะสุ่มทริกเกอร์ตัวรับให้ไปที่สูงซึ่งจะอยู่ในระดับสูงจนกระทั่งพินเสียงสะท้อนต่ำลง พินสะท้อนนี้จะลดต่ำลงก็ต่อเมื่อได้รับคลื่นสหรัฐจากเครื่องส่ง ดังนั้นทันทีที่มันลดลงเราสามารถสันนิษฐานได้ว่าเซ็นเซอร์เครื่องส่งสัญญาณเพิ่งถูกกระตุ้น ตอนนี้ด้วยสมมติฐานนี้ทันทีที่เสียงสะท้อนต่ำเราสามารถรอให้ดีเลย์ที่ทราบแล้วเรียกทริกเกอร์ตัวรับ สิ่งนี้จะซิงค์ทริกเกอร์ของทั้งตัวส่งและตัวรับบางส่วนดังนั้นคุณสามารถอ่านระยะเวลาพัลส์ก้องได้ทันทีโดยใช้ pulseIn () และคำนวณระยะทาง
โปรแกรมสำหรับเซ็นเซอร์ตัวส่ง:
โปรแกรมทั้งหมดสำหรับโมดูลเครื่องส่งสามารถพบได้ที่ด้านล่างของหน้า มันไม่ได้ทำอะไรเลยนอกจากเรียกเซ็นเซอร์เครื่องส่งเป็นช่วง ๆ
digitalWrite (trigPin, สูง); delayMicroseconds (10); digitalWrite (trigPin, LOW);
ในการเรียกเซ็นเซอร์เราต้องทำให้ขาไกอยู่สูงเป็นเวลา 10uS รหัสในการทำเช่นเดียวกันแสดงไว้ด้านบน
โปรแกรมสำหรับเซนเซอร์ตัวรับ:
ในเซ็นเซอร์ตัวรับเราได้ปิดตาเครื่องส่งสัญญาณของเซ็นเซอร์เพื่อให้เป็นหุ่นจำลองตามที่กล่าวไว้ก่อนหน้า ตอนนี้เราสามารถใช้เทคนิคดังกล่าวข้างต้นเพื่อวัดระยะห่างระหว่างเซ็นเซอร์สองตัว โปรแกรมที่สมบูรณ์จะได้รับที่ด้านล่างของหน้านี้ มีการอธิบายบรรทัดสำคัญสองสามข้อด้านล่าง
Trigger_US (); ในขณะที่ (digitalRead (echoPin) == สูง); delayMicroseconds (10); Trigger_US (); ระยะเวลา = pulseIn (echoPin, HIGH);
ในขั้นต้นเราจะเรียกใช้เซ็นเซอร์ US โดยใช้ฟังก์ชัน Trigger_US () จากนั้นรอจนกว่าขาก้องจะอยู่สูงโดยใช้ while loop เมื่อลดลงแล้วเราจะรอระยะเวลาที่กำหนดไว้ล่วงหน้าระยะเวลานี้ควรอยู่ระหว่าง 10 ถึง 30 ไมโครวินาทีซึ่งสามารถกำหนดได้โดยใช้การลองผิดลองถูก (หรือคุณสามารถใช้แนวคิดชั่วคราวที่ระบุไว้ด้านล่าง) หลังจากการหน่วงเวลานี้จะทริกเกอร์ US อีกครั้งโดยใช้ฟังก์ชันเดียวกันจากนั้นใช้ฟังก์ชัน pulseIn () เพื่อคำนวณระยะเวลาของคลื่น
ตอนนี้ใช้สูตรเดิมเราสามารถคำนวณระยะทางได้ดังนี้
ระยะทาง = ระยะเวลา * 0.034;
การทำงาน:
ทำการเชื่อมต่อตามที่อธิบายไว้ในโปรแกรม ปิดส่วน Tx ของเซ็นเซอร์ตัวรับดังแสดงในภาพ จากนั้นอัปโหลดรหัสเครื่องส่งและรหัสตัวรับที่ระบุด้านล่างไปยังเครื่องส่งและตัวรับ Arduino ตามลำดับ เปิดจอภาพอนุกรมของโมดูลตัวรับสัญญาณและคุณควรสังเกตระยะห่างระหว่างสองโมดูลที่แสดงดังที่แสดงในวิดีโอด้านล่าง
หมายเหตุ: วิธีนี้เป็นเพียงอุดมการณ์และอาจไม่ถูกต้องหรือน่าพอใจ อย่างไรก็ตามคุณสามารถลองใช้แนวคิดชั่วคราวด้านล่างเพื่อให้ได้ผลลัพธ์ที่ดีขึ้น
แนวคิดชั่วคราว - การปรับเทียบเซ็นเซอร์โดยใช้ระยะทางที่ทราบ:
วิธีการที่อธิบายจนถึงตอนนี้ดูเหมือนว่าจะน่าพอใจ แต่ก็เพียงพอสำหรับโครงการของฉัน อย่างไรก็ตามฉันอยากจะแบ่งปันข้อเสียของวิธีนี้และวิธีที่จะเอาชนะพวกเขา ข้อเสียเปรียบที่สำคัญอย่างหนึ่งของวิธีนี้คือเราสมมติว่าขา Echo ของเครื่องรับตกลงต่ำทันทีหลังจากที่เซ็นเซอร์ Transmitter ส่งคลื่นสหรัฐซึ่งไม่เป็นความจริงเนื่องจากคลื่นจะใช้เวลาสักพักในการเดินทางจากเครื่องส่งไปยังเครื่องรับ ดังนั้นทริกเกอร์ของเครื่องส่งและทริกเกอร์ของเครื่องรับจะไม่ซิงค์กันอย่างสมบูรณ์แบบ
เพื่อเอาชนะสิ่งนี้เราสามารถปรับเทียบเซ็นเซอร์โดยใช้ระยะทางที่ทราบในตอนแรก หากทราบระยะทางเราจะทราบเวลาที่คลื่นสหรัฐไปถึงเครื่องรับจากเครื่องส่ง ให้เวลานี้เป็น Del (D) ดังที่แสดงด้านล่าง
ตอนนี้เราจะทราบอย่างแน่ชัดแล้วว่าเราควรทำให้ขา Trigger ของตัวรับสัญญาณสูงเพื่อซิงค์กับทริกเกอร์ของ Transmitter เป็นเวลาเท่าใด ระยะเวลานี้สามารถคำนวณได้โดย Known Delay (t) - Del (D) ฉันไม่สามารถทดสอบแนวคิดนี้ได้เนื่องจากข้อ จำกัด ด้านเวลาดังนั้นฉันจึงไม่แน่ใจว่าจะทำงานได้ถูกต้องเพียงใด ดังนั้นหากคุณบังเอิญลองทำโปรดแจ้งให้เราทราบผลผ่านส่วนความคิดเห็น