สารบัญ:

การเปรียบเทียบ LV-MaxSonar-EZ และ HC-SR04 Sonar Range Finders กับ Arduino: 20 ขั้นตอน (พร้อมรูปภาพ)
การเปรียบเทียบ LV-MaxSonar-EZ และ HC-SR04 Sonar Range Finders กับ Arduino: 20 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การเปรียบเทียบ LV-MaxSonar-EZ และ HC-SR04 Sonar Range Finders กับ Arduino: 20 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การเปรียบเทียบ LV-MaxSonar-EZ และ HC-SR04 Sonar Range Finders กับ Arduino: 20 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: MaxSonar EZ0 Sensor With Arduino || Detailed Tutorial || Long-Range Ultrasonic | Techeonics 2024, พฤศจิกายน
Anonim
เปรียบเทียบ LV-MaxSonar-EZ และ HC-SR04 Sonar Range Finders กับ Arduino
เปรียบเทียบ LV-MaxSonar-EZ และ HC-SR04 Sonar Range Finders กับ Arduino
เปรียบเทียบ LV-MaxSonar-EZ และ HC-SR04 Sonar Range Finders กับ Arduino
เปรียบเทียบ LV-MaxSonar-EZ และ HC-SR04 Sonar Range Finders กับ Arduino

ฉันพบว่าหลายโครงการ (โดยเฉพาะหุ่นยนต์) ต้องการหรือได้รับประโยชน์จากการวัดระยะทางไปยังวัตถุในแบบเรียลไทม์ ตัวค้นหาช่วงโซนาร์มีราคาไม่แพงนักและสามารถเชื่อมต่อกับไมโครคอนโทรลเลอร์เช่น Arduino ได้อย่างง่ายดาย

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

ฉันต้องการเปรียบเทียบอุปกรณ์ HC-SR04 (bug-eye) ที่ได้รับความนิยมอย่างมาก กับอุปกรณ์ LV-MaxSonar-EZ ที่ไม่ค่อยพบเห็น เพื่อดูว่าฉันอาจต้องการใช้อุปกรณ์ใดอุปกรณ์หนึ่งมากกว่าอีกอุปกรณ์หนึ่ง ฉันต้องการแบ่งปันสิ่งที่ค้นพบและการตั้งค่าของฉัน เพื่อให้คุณสามารถทดลองกับทั้งสองและตัดสินใจว่าจะใช้สิ่งใดในโครงการต่อไปของคุณ

ทำไมสองคนนี้…

ทำไม HC-SR04? 'Bug-Eye' HC-SR04 เป็นที่นิยมอย่างมาก - ด้วยเหตุผลบางประการ:

  • ราคาไม่แพง - 2 เหรียญหรือน้อยกว่าหากซื้อจำนวนมาก
  • มันค่อนข้างง่ายที่จะติดต่อกับ
  • หลายโครงการใช้มัน - จึงเป็นที่รู้กันดีและเข้าใจดี

ทำไมต้อง LV-MaxSonar-EZ?

  • มันง่ายมากที่จะเชื่อมต่อกับ
  • มีฟอร์มแฟคเตอร์ที่ดีและง่ายต่อการรวมเข้ากับโครงการ
  • มี 5 เวอร์ชันที่ตอบสนองความต้องการการวัดที่แตกต่างกัน (ดูเอกสารข้อมูล)
  • (โดยทั่วไป) มีความแม่นยำและเชื่อถือได้มากกว่า HC-SR04. มาก
  • ราคาไม่แพง - $ 15 ถึง $ 20

นอกจากนี้ ฉันหวังว่าคุณจะพบบิตและชิ้นส่วนในโค้ด Arduino ที่ฉันเขียนสำหรับการเปรียบเทียบที่มีประโยชน์ในโครงการของคุณ แม้กระทั่งนอกเหนือจากแอปพลิเคชันค้นหาระยะ

สมมติฐาน:

  • คุณคุ้นเคยกับ Arduino และ Arduino IDE
  • Arduino IDE ได้รับการติดตั้งและทำงานบนเครื่องพัฒนาที่คุณต้องการ (PC/Mac/Linux)
  • คุณมีการเชื่อมต่อจาก Arduino IDE กับ Arduino เพื่ออัปโหลดและเรียกใช้โปรแกรมและสื่อสาร

มีคำแนะนำและแหล่งข้อมูลอื่น ๆ ที่จะช่วยคุณในเรื่องนี้หากจำเป็น

เสบียง

  • HC-SR04 ตัวค้นหาระยะ 'Bug-Eye'
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4 - ฉันใช้ '1' แต่ทุกเวอร์ชันอินเทอร์เฟซเหมือนกัน)
  • Arduino UNO
  • เขียงหั่นขนม Solderless
  • หัวเข็ม - 7 ขา 90° (สำหรับอุปกรณ์ MaxSonar ดู * ด้านล่างสำหรับการใช้ 180°)
  • จัมเปอร์สายริบบอน 5 เส้น ตัวผู้-ตัวผู้
  • จัมเปอร์สายริบบอน 2 เส้น ตัวผู้-ตัวผู้
  • สายจัมเปอร์ ชาย-ชาย
  • สายต่อ - สีแดงและสีดำ (สำหรับจ่ายไฟจาก Arduino ไปยังเขียงหั่นขนมและเขียงหั่นขนมไปยังอุปกรณ์)
  • คอมพิวเตอร์ที่มี Arduino IDE และสาย USB เพื่อเชื่อมต่อกับ Arduino UNO

* MaxSonar ไม่ได้แนบส่วนหัวมาด้วย คุณจึงสามารถใช้ส่วนหัวที่เหมาะสมกับโครงการของคุณได้มากที่สุด สำหรับคำแนะนำนี้ ฉันใช้ส่วนหัว 90° เพื่อให้ง่ายต่อการเสียบเข้ากับเขียงหั่นขนม ในบางโครงการ ส่วนหัว 180° (แบบตรง) อาจดีกว่า ฉันรวมรูปภาพเพื่อแสดงวิธีเชื่อมต่อเพื่อที่คุณจะได้ไม่ต้องสลับ หากคุณต้องการใช้หัวต่อแบบ 180° คุณจะต้องมีจัมเปอร์สายริบบิ้นตัวผู้-ตัวเมียอีก 7 เส้นเพื่อเชื่อมต่อตามที่รูปถ่ายของฉันแสดง

ที่เก็บ Git Hub: ไฟล์โปรเจ็กต์

ขั้นตอนที่ 1: การไล่ล่า…

การไล่ล่า…
การไล่ล่า…

ก่อนที่เราจะลงรายละเอียดเกี่ยวกับวิธีการเชื่อมต่อสิ่งต่าง ๆ เพื่อให้คุณสามารถทดลองกับอุปกรณ์ที่ยอดเยี่ยมทั้งสองนี้ได้เอง ฉันต้องการอธิบายบางสิ่งที่ฉันหวังว่าคำแนะนำนี้จะช่วยคุณได้

เนื่องจากอุปกรณ์ MaxSonar มีการใช้งานน้อยและมีความเข้าใจน้อยกว่าเมื่อเปรียบเทียบกับอุปกรณ์ HC-SR04 ฉันจึงต้องการแสดง:

  • วิธีเชื่อมต่ออุปกรณ์ MaxSonar กับไมโครคอนโทรลเลอร์ (ในกรณีนี้คือ Arduino)
  • วิธีการวัดจากเอาต์พุตต่างๆ ของอุปกรณ์ MaxSonar
  • เปรียบเทียบการเชื่อมต่ออุปกรณ์ MaxSonar กับอุปกรณ์ HC-SR04
  • ทดสอบความสามารถในการวัดระยะทางของวัตถุที่มีพื้นผิวต่างกัน
  • ทำไมคุณอาจเลือกอุปกรณ์เครื่องหนึ่งมากกว่าอีกเครื่องหนึ่ง (หรือใช้ทั้งสองอย่างควบคู่กัน)

ฉันหวังว่าคำแนะนำนี้จะช่วยคุณในการไล่ล่านี้ …

ขั้นตอนที่ 2: เริ่มต้นใช้งาน - การตั้งค่า Arduino-Breadboard

เริ่มต้นใช้งาน - การตั้งค่า Arduino-Breadboard
เริ่มต้นใช้งาน - การตั้งค่า Arduino-Breadboard

หากคุณเคยสร้างต้นแบบด้วย Arduino คุณอาจมีการตั้งค่า Arduino-Breadboard ที่คุณคุ้นเคยอยู่แล้ว ถ้าใช่ ฉันมั่นใจว่าคุณสามารถใช้มันสำหรับคำแนะนำนี้ได้ ถ้าไม่ นี่คือวิธีที่ฉันตั้งค่า - อย่าลังเลที่จะคัดลอกสำหรับโครงการนี้และในอนาคต

  1. ฉันติด Arduino UNO และเขียงหั่นขนมไร้สายขนาดเล็กเข้ากับชิ้นส่วนพลาสติกขนาด 3-3/8" x 4-3/4" (8.6 x 12.0 ซม.) โดยมียางรองอยู่ด้านล่าง
  2. ฉันใช้สายเบ็ด 22-AWG สีแดงและสีดำเพื่อเชื่อมต่อ +5V และ GND จาก Arduino กับแถบจ่ายไฟแบบเขียงหั่นขนม
  3. ฉันรวมตัวเก็บประจุแทนทาลัม 10µF ไว้บนแถบจ่ายไฟกราวด์เพื่อช่วยลดเสียงรบกวนจากพลังงาน (แต่โครงการนี้ไม่ต้องการมัน)

นี่เป็นแพลตฟอร์มที่ดีที่ง่ายต่อการสร้างต้นแบบ

ขั้นตอนที่ 3: ต่อสาย LV-MaxSonar-EZ

ต่อสาย LV-MaxSonar-EZ
ต่อสาย LV-MaxSonar-EZ
ต่อสาย LV-MaxSonar-EZ
ต่อสาย LV-MaxSonar-EZ
ต่อสาย LV-MaxSonar-EZ
ต่อสาย LV-MaxSonar-EZ

ด้วยหัวต่อ 90° ที่บัดกรีบนอุปกรณ์ MaxSonar ทำให้ง่ายต่อการเสียบเข้ากับเขียงหั่นขนม จากนั้นสายริบบิ้น 5 พินเชื่อมต่อ MaxSonar กับ Arduino ตามที่เห็นในแผนภาพ นอกจากสายแพแล้ว ฉันยังใช้สายเบ็ดสั้นสีแดงและสีดำจากรางจ่ายไฟเพื่อจ่ายไฟให้กับอุปกรณ์

การเดินสายไฟ:

MaxSonar Arduino สี
1 (บีดับเบิ้ลยู) พลังงาน-GND สีเหลือง
2 (PW) ดิจิตอล-5 เขียว
3 (อ.) อนาล็อก-0 สีฟ้า
4 (อาร์เอ็กซ์) ดิจิตอล-3 สีม่วง
5 (เท็กซัส) ดิจิตอล-2 สีเทา
6 (+5) +5 ราง BB-PWR สีแดง
7 (จีเอ็นดี) ราง GND BB-PWR สีดำ

บันทึก:

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

ขั้นตอนที่ 4: ต่อสาย HC-SR04

โดยทั่วไปแล้ว HC-SR04 จะมาพร้อมกับส่วนหัว 90° ที่แนบมาอยู่แล้ว จึงสามารถเสียบเข้ากับเขียงหั่นขนมได้ง่าย จากนั้นสายริบบิ้น 2 พินเชื่อมต่อ HC-SR04 กับ Arduino ตามที่เห็นในแผนภาพ นอกจากสายแพแล้ว ฉันยังใช้สายเบ็ดสั้นสีแดงและสีดำจากรางจ่ายไฟเพื่อจ่ายไฟให้กับอุปกรณ์

HC-SR04 Arduino สี
1 (วีซีซี) +5 ราง BB-PWR สีแดง
2 (ทริก) ดิจิตอล-6 สีเหลือง
3 (เสียงสะท้อน) ดิจิตอล-7 ส้ม
4 (จีเอ็นดี) ราง GND BB-PWR สีดำ

ขั้นตอนที่ 5: ต่อสายตัวเลือกตัวเลือก 'HC-SR04'

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

รหัสจะตรวจสอบพินอินพุตเพื่อดูว่าควรรวมอุปกรณ์ HC-SR04 ไว้ในการอ่านและเอาต์พุตการวัดหรือไม่

ในไดอะแกรมนี้แสดงเป็นสวิตช์ แต่บนเขียงหั่นขนมฉันแค่ใช้สายจัมเปอร์ (ดังที่เห็นในรูปภาพ) หากต่อสายไฟเข้ากับ GND HC-SR04 จะรวมอยู่ในการวัด รหัส 'ดึงขึ้น' (ทำให้อินพุตสูง/จริง) ใน Arduino ดังนั้นหากไม่ได้ดึงให้ต่ำ (เชื่อมต่อกับ GND) HC-SR04 จะไม่ถูกวัด

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

เขียงหั่นขนม Arduino สี
ราง GND BB-PWR ดิจิตอล-12 สีขาว

ขั้นตอนที่ 6: ทำให้ทุกอย่างใช้งานได้…

ทำให้ทุกอย่างทำงาน …
ทำให้ทุกอย่างทำงาน …
ทำให้ทุกอย่างทำงาน …
ทำให้ทุกอย่างทำงาน …
ทำให้ทุกอย่างทำงาน …
ทำให้ทุกอย่างทำงาน …

เมื่อทุกอย่างเชื่อมต่อกันแล้ว - ถึงเวลาที่จะทำให้สิ่งต่าง ๆ ใช้งานได้!

ดังที่กล่าวไว้ใน 'สมมติฐาน' - ฉันจะไม่อธิบายว่า Arduino IDE ทำงานอย่างไรหรือเขียนโปรแกรม Arduino (โดยละเอียด)

ส่วนต่อไปนี้แยกย่อยรหัส Arduino ที่รวมอยู่ในโครงการนี้

โปรดเปิดเครื่องรูดไฟล์เก็บถาวรแบบเต็มลงในตำแหน่งที่คุณใช้สำหรับการพัฒนา Arduino ของคุณ โหลดโค้ด `MaxSonar-outputs.ino` ลงใน Arduino IDE ของคุณแล้วเริ่มกันเลย!

ขั้นตอนที่ 7: เค้าโครงโครงการ

โครงการประกอบด้วยข้อมูลเกี่ยวกับอุปกรณ์ LV-MaxSonar-EZ, แผนภาพวงจร, README และรหัส Arduino แผนภาพวงจรอยู่ในรูปแบบ Fritzing เช่นเดียวกับภาพ-p.webp

ขั้นตอนที่ 8: รหัส Lead-In…

ในคำแนะนำนี้ ฉันไม่สามารถผ่านทุกแง่มุมของโค้ดได้ ฉันครอบคลุมรายละเอียดระดับสูงบางอย่าง ฉันแนะนำให้คุณอ่านความคิดเห็นระดับบนสุดในโค้ดและเจาะลึกวิธีการต่างๆ

ความคิดเห็นให้ข้อมูลมากมายที่ฉันจะไม่พูดซ้ำที่นี่

มีบางสิ่งที่ฉันต้องการชี้ให้เห็นในรหัส 'การตั้งค่า'…

  • `_DEBUG_OUTPUT` - ตัวแปรและคำสั่ง #define
  • คำจำกัดความของ 'หมุด' ของ Arduino ที่ใช้สำหรับอินเทอร์เฟซ
  • คำจำกัดความของปัจจัยการแปลงที่ใช้ในการคำนวณ

การดีบักจะใช้ตลอดทั้งโค้ด และฉันจะแสดงวิธีการเปิด/ปิดแบบไดนามิก

'คำจำกัดความ' ใช้สำหรับพิน Arduino และการแปลงเพื่อให้ง่ายต่อการใช้รหัสนี้ในโครงการอื่น

กำลังแก้ไขข้อบกพร่อง…

ส่วน 'การดีบัก' กำหนดตัวแปรและมาโครบางตัวที่ทำให้ง่ายต่อการรวมข้อมูลการดีบักในเอาต์พุตอนุกรมตามต้องการ

ตัวแปรบูลีน `_DEBUG_OUTPUT` ถูกตั้งค่าเป็นเท็จในโค้ด (สามารถตั้งค่าเป็นจริงได้) และใช้เป็นการทดสอบในมาโคร `DB_PRINT…` สามารถเปลี่ยนไดนามิกในโค้ด (ตามที่เห็นในเมธอด `setDebugOutputMode`)

โกลบอลส์…

หลังจากคำจำกัดความ โค้ดจะสร้างและเริ่มต้นตัวแปรและอ็อบเจ็กต์ส่วนกลางสองสามตัว

  • SoftwareSerial (ดูหัวข้อถัดไป)
  • _loopCount - ใช้เพื่อส่งออกส่วนหัวทุก ๆ 'n' แถว
  • _inputBuffer - ใช้เพื่อรวบรวมอินพุตอนุกรม/เทอร์มินัลเพื่อประมวลผลตัวเลือก (เปิด/ปิดดีบัก)

ขั้นตอนที่ 9: Arduino Software-Serial…

หนึ่งในตัวเลือกอินเทอร์เฟซ MaxSonar คือสตรีมข้อมูลแบบอนุกรม อย่างไรก็ตาม Arduino UNO ให้การเชื่อมต่อข้อมูลแบบอนุกรมเดียวเท่านั้น และใช้/แชร์กับพอร์ต USB เพื่อสื่อสารกับ Arduino IDE (คอมพิวเตอร์โฮสต์)

โชคดีที่มีส่วนประกอบไลบรารีที่มาพร้อมกับ Arduino IDE ที่ใช้พิน Arduino digital-I/O เพื่อใช้อินเทอร์เฟซแบบอนุกรม-i/o เนื่องจากอินเทอร์เฟซแบบอนุกรม MaxSonar ใช้ 9600 BAUD อินเทอร์เฟซ 'ซอฟต์แวร์' นี้จึงสามารถจัดการการสื่อสารได้อย่างสมบูรณ์แบบ

สำหรับผู้ที่ใช้ Arduino-Mega (หรืออุปกรณ์อื่นๆ ที่มีพอร์ตอนุกรม HW หลายพอร์ต) โปรดปรับเปลี่ยนรหัสเพื่อใช้พอร์ตอนุกรมจริงและไม่จำเป็นต้องใช้ SW-Serial

วิธี "ตั้งค่า" จะเริ่มต้นอินเทอร์เฟซ "SoftwareSerial" เพื่อใช้กับอุปกรณ์ MaxSonar ต้องการเฉพาะตัวรับ (RX) เท่านั้น อินเทอร์เฟซ 'ผกผัน' เพื่อให้ตรงกับเอาต์พุตของ MaxSonar

ขั้นตอนที่ 10: รหัส - ตั้งค่า

ตามที่อธิบายไว้ข้างต้น วิธี "ตั้งค่า" จะเริ่มต้นอินเทอร์เฟซ "SoftwareSerial" รวมถึงอินเทอร์เฟซแบบอนุกรมจริง มันกำหนดค่าพิน Arduino I/O และส่งส่วนหัว

ขั้นตอนที่ 11: รหัส - Loop

รหัส "วนซ้ำ" ทำงานผ่านสิ่งต่อไปนี้:

  • ส่งออกส่วนหัว (ใช้สำหรับดีบักและพล็อตเตอร์)
  • ทริกเกอร์ MaxSonar เพื่อทำการวัด
  • อ่านค่า MaxSonar Pulse-Width
  • อ่านค่า MaxSonar Serial-Data
  • อ่านค่า MaxSonar Analog
  • เลือกตัวเลือก 'HC-SR04' และหากเปิดใช้งาน:

    ทริกเกอร์และอ่านอุปกรณ์ HC-SR04

  • ส่งออกข้อมูลในรูปแบบตัวคั่นแท็บที่สามารถใช้โดย Serial Plotter
  • รอจนเวลาผ่านไปพอสมควรจึงจะทำการวัดอื่นได้

ขั้นตอนที่ 12: รหัส - ทริกเกอร์ MaxSonar อ่านค่า PW

MaxSonar มีสองโหมด: 'ทริกเกอร์' และ 'ต่อเนื่อง'

คำแนะนำนี้ใช้โหมด 'ทริกเกอร์' แต่หลายโครงการสามารถได้รับประโยชน์จากการใช้โหมด 'ต่อเนื่อง' (ดูแผ่นข้อมูล)

เมื่อใช้โหมด 'ทริกเกอร์' เอาต์พุตแรกที่ถูกต้องจะมาจากเอาต์พุต Pulse-Width (PW) หลังจากนั้น ผลลัพธ์ที่เหลือจะถูกต้อง

`tiggerAndReadDistanceFromPulse` กระตุ้นพินทริกเกอร์บนอุปกรณ์ MaxSonar และอ่านค่าระยะทางพัลส์ความกว้างที่ได้

โปรดทราบว่าไม่เหมือนกับอุปกรณ์โซนาร์อื่นๆ MaxSonar จัดการการแปลงแบบไปกลับ ดังนั้นระยะทางที่อ่านได้คือระยะทางไปยังเป้าหมาย

วิธีนี้ยังล่าช้านานพอที่เอาต์พุตอื่นๆ ของอุปกรณ์จะใช้งานได้ (ซีเรียล แอนะล็อก)

ขั้นตอนที่ 13: รหัส - อ่านค่าอนุกรม MaxSonar

หลังจาก MaxSonar ถูกทริกเกอร์ (หรือเมื่ออยู่ในโหมด 'ต่อเนื่อง') หากเปิดใช้งานตัวเลือกเอาต์พุตแบบอนุกรม (ผ่านตัวควบคุม 'BW - Pin-1') สตรีมข้อมูลอนุกรมในรูปแบบ "R nnn" จะถูกส่งไปตาม โดย CARRIAGE-RETURN '\r' 'nnn' คือค่านิ้วของวัตถุ

เมธอด `readDistanceFromSerial' อ่านข้อมูลอนุกรม (จากพอร์ต Software Serial) และแปลงค่า 'nnn' เป็นทศนิยม ซึ่งรวมถึงระยะหมดเวลาที่ปลอดภัยในกรณีที่ไม่ได้รับค่าซีเรียล

ขั้นตอนที่ 14: รหัส - อ่านค่าอนาล็อก MaxSonar

พอร์ตแอนะล็อก MaxSonar ให้แรงดันเอาต์พุตตามสัดส่วนกับระยะทางสุดท้ายที่วัดได้อย่างต่อเนื่อง สามารถอ่านค่านี้ได้ทุกเมื่อหลังจากที่เริ่มต้นอุปกรณ์แล้ว ค่าจะอัปเดตภายใน 50mS ของการอ่านระยะทางล่าสุด (โหมดทริกเกอร์หรือโหมดต่อเนื่อง)

ค่าคือ (Vcc/512) ต่อนิ้ว ดังนั้น ด้วย Vcc จาก Arduino 5 โวลต์ ค่าจะอยู่ที่ ~9.8mV/in วิธี `readDistanceFromAnalog' จะอ่านค่าจากอินพุตอนาล็อกของ Arduino และแปลงเป็นค่า 'นิ้ว'

ขั้นตอนที่ 15: รหัส - ทริกเกอร์และอ่าน HC-SR04

แม้ว่าจะมีห้องสมุดให้อ่าน HC-SR04 แต่ฉันพบว่าบางห้องสมุดไม่น่าเชื่อถือกับอุปกรณ์ต่างๆ ที่ฉันทดสอบด้วย ฉันพบรหัสที่ฉันรวมไว้ในวิธี `sr04ReadDistance' ที่ง่ายและน่าเชื่อถือมากขึ้น (มากเท่ากับอุปกรณ์ HC-SR04 ราคาไม่แพง)

วิธีนี้จะตั้งค่าและทริกเกอร์อุปกรณ์ HC-SR04 จากนั้นรอเพื่อวัดความกว้างพัลส์ที่ส่งคืน การวัดความกว้างพัลส์รวมถึงการหมดเวลาเพื่อจัดการกับปัญหา HC-SR04 ของระยะเวลาพัลส์ที่ยาวมากเมื่อไม่พบเป้าหมาย ความกว้างพัลส์ที่ยาวกว่าระยะเป้าหมาย ~ 10 ฟุตจะถือว่าไม่มีวัตถุหรือวัตถุที่ไม่สามารถจดจำได้ หากหมดเวลา ค่า '0' จะถูกส่งคืนตามระยะทาง 'ระยะทาง' (ความกว้างพัลส์) นี้สามารถปรับได้โดยใช้ค่า #define

ความกว้างพัลส์จะถูกแปลงเป็นระยะทางไปกลับก่อนที่จะส่งกลับเป็นระยะห่างของวัตถุ

ขั้นตอนที่ 16: รหัส - Arduino IDE Serial Plotter Support

รหัส - Arduino IDE Serial Plotter รองรับ
รหัส - Arduino IDE Serial Plotter รองรับ

ตอนนี้สำหรับการส่งออก!

วิธีการ 'วนรอบ' เรียกการรวบรวมการวัดระยะทางจากอุปกรณ์ทั้งสอง - แต่เราจะทำอย่างไรกับมัน

แน่นอน เราจะส่งมันออกไปเพื่อให้สามารถดูได้บนคอนโซล - แต่เราต้องการมากกว่านี้!

Arduino IDE ยังมีอินเทอร์เฟซ Serial Plotter เราจะใช้สิ่งนั้นเพื่อให้กราฟแบบเรียลไทม์ของระยะทางไปยังวัตถุของเราจากเอาต์พุตของอุปกรณ์ทั้งสองของเรา

Serial Plotter ยอมรับส่วนหัวที่มีป้ายชื่อค่า จากนั้นจึงนำค่าที่คั่นด้วยตัวคั่นหลายแถวมาลงจุดเป็นกราฟ หากค่าถูกส่งออกเป็นประจำ (ทุกๆ 'หลายวินาที') กราฟจะแสดงภาพระยะทางไปยังวัตถุในช่วงเวลาหนึ่ง

เมธอด `loop` ส่งออกค่าสามค่าจาก MaxSonar และค่าจาก HC-SR04 ในรูปแบบแท็บแยกที่สามารถใช้ได้กับ Serial Plotter ทุกๆ 20 แถวจะส่งออกส่วนหัว (ในกรณีที่ Serial Plotter เปิดใช้งานกลางสตรีม)

วิธีนี้ช่วยให้คุณเห็นภาพระยะทางไปยังสิ่งกีดขวางและเห็นความแตกต่างของค่าที่ส่งคืนโดยอุปกรณ์ทั้งสอง

ขั้นตอนที่ 17: รหัส - การดีบัก…

รหัส - การดีบัก…
รหัส - การดีบัก…
รหัส - การดีบัก…
รหัส - การดีบัก…

การดีบักเป็นสิ่งจำเป็น คุณจะติดตามปัญหาได้อย่างไรเมื่อมีบางอย่างไม่ทำงานตามที่คาดไว้

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

ในคำแนะนำนี้ ฉันได้รวมกลไกเพื่อเปิดใช้งานและปิดใช้งานคำสั่งการพิมพ์ดีบัก (เอาต์พุตแบบอนุกรม) แบบไดนามิกจากอินพุตที่อ่านจาก Arduino IDE Serial Monitor (ในรุ่นถัดไป Serial Plotter คาดว่าจะให้ข้อมูลอินพุตนี้ด้วย)

บูลีน `_DEBUG_OUTPUT` ใช้ใน #define วิธีการพิมพ์จำนวนหนึ่งที่สามารถใช้ได้ภายในโค้ด ค่าของตัวแปร _DEBUG_OUTPUT ใช้เพื่อเปิดใช้งานการพิมพ์ (กำลังส่งออก) หรือไม่ ค่าสามารถเปลี่ยนแปลงไดนามิกภายในโค้ด เช่นเดียวกับเมธอด `setDebugOutputMode'

เมธอด "setDebugOutputMode" ถูกเรียกจาก "ลูป" ตามอินพุตที่ได้รับจากอินพุตแบบอนุกรม อินพุตจะถูกแยกวิเคราะห์เพื่อดูว่าตรงกับ "debug on/off | true/false" เพื่อเปิดใช้งาน/ปิดใช้งานโหมดแก้ไขข้อบกพร่องหรือไม่

ขั้นตอนที่ 18: บทสรุป

ฉันหวังว่าการตั้งค่าฮาร์ดแวร์ที่เรียบง่ายนี้และโค้ดตัวอย่างจะช่วยให้คุณเข้าใจความแตกต่างระหว่างอุปกรณ์ HC-SR04 และอุปกรณ์ LV-MaxSonar-EZ ทั้งสองใช้งานง่ายมาก และฉันเชื่อว่าแต่ละอย่างมีประโยชน์ การรู้ว่าเมื่อใดควรใช้อันใดอันหนึ่งมากกว่าอันอื่นอาจเป็นประโยชน์ต่อโครงการที่ประสบความสำเร็จ

BTW - ฉันบอกเป็นนัยถึงวิธีที่ใช้งานง่ายมากในการวัดระยะทางไปยังวัตถุอย่างแม่นยำโดยใช้ LV-MaxSonar-EZ… คุณสามารถใช้เอาต์พุตแอนะล็อก (สายเดียว) และโหมดการวัดต่อเนื่องเพื่ออ่านระยะทางเมื่อจำเป็นโดยใช้วิธีง่ายๆ โค้ดใน `readDistanceFromAnalog' โดยตรงจากอินพุตอนาล็อกของ Arduino หนึ่งสายและ (ย่อ) โค้ดหนึ่งบรรทัด!

ขั้นตอนที่ 19: การเชื่อมต่อ MaxSonar สำรอง (โดยใช้ส่วนหัว 180°)

การเชื่อมต่อ MaxSonar สำรอง (โดยใช้ส่วนหัว 180°)
การเชื่อมต่อ MaxSonar สำรอง (โดยใช้ส่วนหัว 180°)
การเชื่อมต่อ MaxSonar สำรอง (โดยใช้ส่วนหัว 180°)
การเชื่อมต่อ MaxSonar สำรอง (โดยใช้ส่วนหัว 180°)
การเชื่อมต่อ MaxSonar สำรอง (โดยใช้ส่วนหัว 180°)
การเชื่อมต่อ MaxSonar สำรอง (โดยใช้ส่วนหัว 180°)

ดังที่ฉันได้กล่าวไปแล้ว MaxSonar ไม่ได้เชื่อมต่อกับส่วนหัว ดังนั้น คุณสามารถใช้การเชื่อมต่อใดก็ได้ที่เหมาะสมกับโครงการของคุณมากที่สุด ในบางกรณีส่วนหัว 180° (แบบตรง) อาจเหมาะสมกว่า หากเป็นกรณีนี้ ฉันต้องการแสดงให้เห็นอย่างรวดเร็วว่าคุณสามารถใช้สิ่งนั้นกับคำแนะนำนี้ได้อย่างไร ภาพประกอบนี้แสดง MaxSonar ที่มีส่วนหัวตรงที่เชื่อมต่อกับเขียงหั่นขนมด้วยสายริบบิ้นชาย - หญิง จากนั้นเชื่อมต่อกับ Arduino ตามที่อธิบายไว้ในส่วนที่เหลือของบทความ

ขั้นตอนที่ 20: รหัส Arduino

รหัส Arduino อยู่ในโฟลเดอร์ 'MaxSonar-outputs' ของโครงการในการเปรียบเทียบ Sonar Range-Finder

แนะนำ: