สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: การไล่ล่า…
- ขั้นตอนที่ 2: เริ่มต้นใช้งาน - การตั้งค่า Arduino-Breadboard
- ขั้นตอนที่ 3: ต่อสาย LV-MaxSonar-EZ
- ขั้นตอนที่ 4: ต่อสาย HC-SR04
- ขั้นตอนที่ 5: ต่อสายตัวเลือกตัวเลือก 'HC-SR04'
- ขั้นตอนที่ 6: ทำให้ทุกอย่างใช้งานได้…
- ขั้นตอนที่ 7: เค้าโครงโครงการ
- ขั้นตอนที่ 8: รหัส Lead-In…
- ขั้นตอนที่ 9: Arduino Software-Serial…
- ขั้นตอนที่ 10: รหัส - ตั้งค่า
- ขั้นตอนที่ 11: รหัส - Loop
- ขั้นตอนที่ 12: รหัส - ทริกเกอร์ MaxSonar อ่านค่า PW
- ขั้นตอนที่ 13: รหัส - อ่านค่าอนุกรม MaxSonar
- ขั้นตอนที่ 14: รหัส - อ่านค่าอนาล็อก MaxSonar
- ขั้นตอนที่ 15: รหัส - ทริกเกอร์และอ่าน HC-SR04
- ขั้นตอนที่ 16: รหัส - Arduino IDE Serial Plotter Support
- ขั้นตอนที่ 17: รหัส - การดีบัก…
- ขั้นตอนที่ 18: บทสรุป
- ขั้นตอนที่ 19: การเชื่อมต่อ MaxSonar สำรอง (โดยใช้ส่วนหัว 180°)
- ขั้นตอนที่ 20: รหัส Arduino
วีดีโอ: การเปรียบเทียบ LV-MaxSonar-EZ และ HC-SR04 Sonar Range Finders กับ Arduino: 20 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
ฉันพบว่าหลายโครงการ (โดยเฉพาะหุ่นยนต์) ต้องการหรือได้รับประโยชน์จากการวัดระยะทางไปยังวัตถุในแบบเรียลไทม์ ตัวค้นหาช่วงโซนาร์มีราคาไม่แพงนักและสามารถเชื่อมต่อกับไมโครคอนโทรลเลอร์เช่น 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 คุณอาจมีการตั้งค่า Arduino-Breadboard ที่คุณคุ้นเคยอยู่แล้ว ถ้าใช่ ฉันมั่นใจว่าคุณสามารถใช้มันสำหรับคำแนะนำนี้ได้ ถ้าไม่ นี่คือวิธีที่ฉันตั้งค่า - อย่าลังเลที่จะคัดลอกสำหรับโครงการนี้และในอนาคต
- ฉันติด Arduino UNO และเขียงหั่นขนมไร้สายขนาดเล็กเข้ากับชิ้นส่วนพลาสติกขนาด 3-3/8" x 4-3/4" (8.6 x 12.0 ซม.) โดยมียางรองอยู่ด้านล่าง
- ฉันใช้สายเบ็ด 22-AWG สีแดงและสีดำเพื่อเชื่อมต่อ +5V และ GND จาก Arduino กับแถบจ่ายไฟแบบเขียงหั่นขนม
- ฉันรวมตัวเก็บประจุแทนทาลัม 10µF ไว้บนแถบจ่ายไฟกราวด์เพื่อช่วยลดเสียงรบกวนจากพลังงาน (แต่โครงการนี้ไม่ต้องการมัน)
นี่เป็นแพลตฟอร์มที่ดีที่ง่ายต่อการสร้างต้นแบบ
ขั้นตอนที่ 3: ต่อสาย 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 เราจะใช้สิ่งนั้นเพื่อให้กราฟแบบเรียลไทม์ของระยะทางไปยังวัตถุของเราจากเอาต์พุตของอุปกรณ์ทั้งสองของเรา
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 ที่มีส่วนหัวตรงที่เชื่อมต่อกับเขียงหั่นขนมด้วยสายริบบิ้นชาย - หญิง จากนั้นเชื่อมต่อกับ Arduino ตามที่อธิบายไว้ในส่วนที่เหลือของบทความ
ขั้นตอนที่ 20: รหัส Arduino
รหัส Arduino อยู่ในโฟลเดอร์ 'MaxSonar-outputs' ของโครงการในการเปรียบเทียบ Sonar Range-Finder
แนะนำ:
การเชื่อมต่อเซ็นเซอร์อุณหภูมิ DS18B20 กับ Arduino และ ESP8266: 8 ขั้นตอน
การเชื่อมต่อเซ็นเซอร์อุณหภูมิ DS18B20 กับ Arduino และ ESP8266: ว่าไงพวก! Akarsh จาก CETech วันนี้เราจะเพิ่ม Sensor ใหม่ให้กับคลังแสงของเราที่รู้จักกันในชื่อ DS18B20 Temperature Sensor เป็นเซ็นเซอร์อุณหภูมิคล้ายกับ DHT11 แต่มีชุดการใช้งานที่แตกต่างกัน เราจะเปรียบเทียบว่า
การใช้โมดูลนาฬิกาเรียลไทม์ DS1307 และ DS3231 กับ Arduino: 3 ขั้นตอน
การใช้โมดูลนาฬิกาเรียลไทม์ DS1307 และ DS3231 กับ Arduino: เราได้รับคำขอเกี่ยวกับวิธีการใช้โมดูลนาฬิกาเรียลไทม์ DS1307 และ DS3231 กับ Arduino จากแหล่งต่างๆ อยู่เสมอ นี่เป็นบทแนะนำส่วนแรกในสองส่วนเกี่ยวกับวิธีการใช้งาน สำหรับบทช่วยสอน Arduino นี้ เรามีโมดูลนาฬิกาแบบเรียลไทม์สองโมดูลสำหรับเรา
วิธีใช้ MQTT กับ Raspberry Pi และ ESP8266: 8 ขั้นตอน (พร้อมรูปภาพ)
วิธีใช้ MQTT กับ Raspberry Pi และ ESP8266: ในคำแนะนำนี้ ฉันจะอธิบายว่าโปรโตคอล MQTT คืออะไรและใช้อย่างไรในการสื่อสารระหว่างอุปกรณ์ต่างๆ จากนั้นในการสาธิตเชิงปฏิบัติ ฉันจะแสดงวิธีตั้งค่าสองอย่างง่ายๆ ระบบไคลเอ็นต์ โดยที่โมดูล ESP8266 จะส่งข้อความ
การใช้ ESP8266 กับ Arduino และ Blynk: 4 ขั้นตอน
การใช้ ESP8266 กับ Arduino และ Blynk: เชื่อมต่อ Arduino Mega ของคุณกับแอป blynk โดยใช้ espp8266 shield
อีกหนึ่งคำแนะนำในการใช้ DIYMall RFID-RC522 และ Nokia LCD5110 กับ Arduino: 8 ขั้นตอน (พร้อมรูปภาพ)
อีกหนึ่งคำแนะนำในการใช้ DIYMall RFID-RC522 และ Nokia LCD5110 กับ Arduino: เหตุใดฉันจึงรู้สึกว่าจำเป็นต้องสร้างคำแนะนำอื่นสำหรับ DIYMall RFID-RC522 และ Nokia LCD5110 เพื่อบอกความจริงกับคุณว่าฉันกำลังทำงานกับ Proof of Concept เมื่อปีที่แล้วโดยใช้อุปกรณ์ทั้งสองนี้และอย่างใด "วางผิดที่"