วิธีการวัดระยะห่างระหว่างสองจุดโดยใช้ Arduino

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



การวัดระยะทางโดยใช้ Arduino

เทคนิคที่ใช้ในที่นี้มีประโยชน์กับระบบขนาดเล็กที่ต้องพบระยะทางเล็กน้อย ในการใช้งานในปริมาณมากจำเป็นต้องมีการปรับเปลี่ยนบางอย่าง ความท้าทายทั้งหมดที่ต้องเผชิญขณะดำเนินโครงการนี้จะกล่าวถึงด้านล่าง



จะใช้ Arduino และ Ultrasonic Sensor เพื่อวัดระยะทางได้อย่างไร?

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



ขั้นตอนที่ 1: การรวบรวมส่วนประกอบ (ฮาร์ดแวร์)

หากคุณต้องการหลีกเลี่ยงความไม่สะดวกใด ๆ ในระหว่างโครงการแนวทางที่ดีที่สุดคือการจัดทำรายการส่วนประกอบทั้งหมดที่เราจะใช้ ขั้นตอนที่สองก่อนที่จะเริ่มสร้างวงจรคือการศึกษาส่วนประกอบเหล่านี้โดยย่อ รายการส่วนประกอบทั้งหมดที่เราต้องการในโครงการนี้มีให้ด้านล่าง



  • สายจัมเปอร์
  • อะแดปเตอร์ 5V AC เป็น DC (x2)

ขั้นตอนที่ 2: การรวบรวมส่วนประกอบ (ซอฟต์แวร์)

  • Proteus 8 Professional (สามารถดาวน์โหลดได้จาก ที่นี่ )

หลังจากดาวน์โหลด Proteus 8 Professional แล้วให้ออกแบบวงจรบนนั้น ฉันได้รวมการจำลองซอฟต์แวร์ไว้ที่นี่เพื่อให้ผู้เริ่มต้นออกแบบวงจรและทำการเชื่อมต่อกับฮาร์ดแวร์ได้อย่างเหมาะสม

ขั้นตอนที่ 3: การทำงานของ HCR-05

ในขณะนี้เราทราบบทคัดย่อหลักของโครงการแล้วให้เราดำเนินการต่อและศึกษาสั้น ๆ เกี่ยวกับการทำงานของ HCR-05 . คุณสามารถเข้าใจการทำงานหลักของเซ็นเซอร์นี้ได้จากแผนภาพต่อไปนี้

เซ็นเซอร์นี้มีสองพิน ทริกเกอร์พิน และ หมุด eco ที่ใช้ในการวัดระยะห่างระหว่างจุดสองจุดโดยเฉพาะ กระบวนการนี้เริ่มต้นโดยการส่งคลื่นอัลตราโซนิกจากเซ็นเซอร์ งานนี้ทำได้โดยการเรียกพิน Trig สำหรับ 10us การระเบิดของคลื่นอัลตร้าโซนิค 8 เสียงจะถูกส่งจากเครื่องส่งทันทีที่งานนี้เสร็จสิ้น คลื่นนี้จะเดินทางไปในอากาศและทันทีที่กระทบกับวัตถุในทางของมันคลื่นนี้จะตีกลับและรับโดยตัวรับที่สร้างขึ้นในเซ็นเซอร์



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

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

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

ขั้นตอนที่ 4: การทำงานของวงจร

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

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

ขั้นตอนที่ 5: การประกอบส่วนประกอบ

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

  1. ใช้เซ็นเซอร์อัลตราโซนิกสองตัว ครอบคลุมตัวรับของเซ็นเซอร์ตัวแรกและตัวส่งของเซ็นเซอร์ตัวที่สอง ใช้เทปพันสายไฟสีขาวเพื่อจุดประสงค์นี้และตรวจสอบให้แน่ใจว่าปิดทั้งสองอย่างมิดชิดเพื่อไม่ให้สัญญาณออกจากตัวส่งสัญญาณของเซ็นเซอร์ตัวที่สองและไม่มีสัญญาณเข้าไปในตัวรับของเซ็นเซอร์ตัวแรก
  2. เชื่อมต่อ Arduino สองตัวบนเขียงหั่นขนมสองอันที่แยกจากกันและเชื่อมต่อเซ็นเซอร์ที่เกี่ยวข้องกับพวกเขา เชื่อมต่อ Trigger Pin เข้ากับ pin9 ของ Arduino และ ecoPin กับ pin10 ของ Arduino เปิดเซ็นเซอร์อัลตราโซนิกด้วย 5V ของ Arduino และใช้งานได้ทั่วไปในทุกพื้นที่
  3. อัปโหลดรหัสเครื่องรับไปยัง Arduino ของเครื่องรับและรหัสเครื่องส่งไปยัง Arduino ของเครื่องส่ง
  4. ตอนนี้เปิดจอภาพอนุกรมของด้านรับและสังเกตระยะทางที่กำลังวัด

แผนภาพวงจรของโครงการนี้มีลักษณะดังนี้:

แผนภูมิวงจรรวม

ขั้นตอนที่ 6: เริ่มต้นกับ Arduino

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

  1. ดาวน์โหลด Arduino IDE เวอร์ชันล่าสุดจาก Arduino
  2. เชื่อมต่อบอร์ด Arduino Nano เข้ากับแล็ปท็อปของคุณและเปิดแผงควบคุม ในแผงควบคุมคลิกที่ ฮาร์ดแวร์และเสียง . ตอนนี้คลิกที่ อุปกรณ์และเครื่องพิมพ์ ค้นหาพอร์ตที่บอร์ดไมโครคอนโทรลเลอร์ของคุณเชื่อมต่ออยู่ที่นี่ ในกรณีของฉันมันคือ COM14 แต่จะแตกต่างกันในคอมพิวเตอร์เครื่องอื่น

    กำลังค้นหาพอร์ต

  3. คลิกที่เมนูเครื่องมือ และตั้งค่าบอร์ดเป็น Arduino นาโน จากเมนูแบบเลื่อนลง

    คณะกรรมการการตั้งค่า

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

    การตั้งค่าพอร์ต

  5. ในเมนูเครื่องมือเดียวกันตั้งค่าโปรเซสเซอร์เป็น ATmega328P (เก่า Bootloader ).

    โปรเซสเซอร์

  6. ดาวน์โหลดรหัสที่แนบด้านล่างและวางลงใน Arduino IDE ของคุณ คลิกที่ ที่อัพโหลด ปุ่มเพื่อเบิร์นโค้ดบนบอร์ดไมโครคอนโทรลเลอร์ของคุณ

    ที่อัพโหลด

ในการดาวน์โหลดรหัส คลิกที่นี่.

ขั้นตอนที่ 7: การทำความเข้าใจรหัส

รหัสที่ใช้ในโครงการนี้ง่ายมากและแสดงความคิดเห็นได้ดีทีเดียว มีไฟล์รหัสสองไฟล์ในโฟลเดอร์ที่แนบมา รหัสสำหรับเครื่องส่งและรหัสสำหรับฝั่งเครื่องรับจะได้รับแยกกัน เราจะอัปโหลดรหัสเหล่านี้ในบอร์ด Arduino ทั้งสองแบบ แม้ว่าจะอธิบายได้ด้วยตนเอง แต่ก็มีคำอธิบายสั้น ๆ ด้านล่าง

รหัสสำหรับด้านเครื่องส่งสัญญาณ

1. เมื่อเริ่มต้นพินของบอร์ด Arduino จะถูกเริ่มต้นซึ่งจะเชื่อมต่อกับ Ultrasonic Sensor จากนั้นจะมีการประกาศตัวแปรซึ่งจะใช้ในการจัดเก็บค่าสำหรับการคำนวณเวลาและระยะทางในช่วงเวลาทำงานของรหัส

// กำหนดหมายเลขพิน const int trigPin = 9; // เชื่อมต่อขาทริกของเซ็นเซอร์อัลตราโซนิกกับพิน 9 ของ Arduino const int echoPin = 10; // เชื่อมต่อพิน eco ของเซ็นเซอร์อัลตราโซนิกกับพิน 10 ของ Arduino // กำหนดตัวแปรระยะเวลานาน // ตัวแปรเพื่อจัดเก็บเวลาที่คลื่นอัลตราโซนิก t เดินทางระยะทาง int; // ตัวแปรในการจัดเก็บระยะทางคำนวณ

2. การตั้งค่าเป็นโมฆะ () เป็นฟังก์ชันที่ทำงานเพียงครั้งเดียวในการสตาร์ทเมื่อเปิดบอร์ดหรือกดปุ่มเปิดใช้งาน ที่นี่ทั้งหมุดของ Arduino ได้รับการประกาศให้ใช้เป็น อินพุต และ เอาท์พุท . Baudrate ถูกตั้งค่าในฟังก์ชันนี้ อัตราบอดคือความเร็วในหน่วยบิตต่อวินาทีที่ไมโครคอนโทรลเลอร์สื่อสารกับเซ็นเซอร์อัลตราโซนิก

การตั้งค่าเป็นโมฆะ () {pinMode (trigPin, OUTPUT); // ตั้งค่า trigPin เป็น PinMode ขาออก (echoPin, INPUT); // ตั้งค่า echoPin เป็น Input Serial.begin (9600); // เริ่มการสื่อสารแบบอนุกรม}

3. ห่วงเป็นโมฆะ () เป็นฟังก์ชันที่ทำงานซ้ำแล้วซ้ำอีกในลูป ที่นี่เราได้เข้ารหัสไมโครคอนโทรลเลอร์เพื่อให้ส่งสัญญาณ HIGH ไปยังขาทริกเกอร์ของเซ็นเซอร์อัลตราโซนิกโดยใช้เวลา 20 ไมโครวินาทีและส่งสัญญาณ LOW ไปยังมัน

void loop () {// ตั้งค่า trigPin ในสถานะ HIGH เป็นเวลา 10 ไมโครวินาที digitalWrite (trigPin, HIGH); // ส่งสัญญาณสูงไปที่ทริกเกอร์ของการหน่วงเวลาเซ็นเซอร์แรกไมโครวินาที (10); // รอ 10 ไมโครวินาที digitalWrite (trigPin, LOW); // ส่งสัญญาณ LOW ไปยังทริกเกอร์ของการหน่วงเวลาเซ็นเซอร์แรก (2); // รอ 0.2 วินาที}

รหัสสำหรับด้านผู้รับ

1. เมื่อเริ่มต้นพินของบอร์ด Arduino จะถูกเริ่มต้นซึ่งจะเชื่อมต่อกับ Ultrasonic Sensor จากนั้นจะมีการประกาศตัวแปรซึ่งจะใช้ในการจัดเก็บค่าสำหรับการคำนวณเวลาและระยะทางในช่วงเวลาทำงานของรหัส

// กำหนดหมายเลขพิน const int trigPin = 9; // เชื่อมต่อขาทริกของเซ็นเซอร์อัลตราโซนิกกับพิน 9 ของ Arduino const int echoPin = 10; // เชื่อมต่อพิน eco ของเซ็นเซอร์อัลตราโซนิกกับพิน 10 ของ Arduino // กำหนดตัวแปรระยะเวลานาน // ตัวแปรเพื่อจัดเก็บเวลาที่คลื่นอัลตราโซนิก t เดินทางระยะทาง int; // ตัวแปรในการจัดเก็บระยะทางคำนวณ

2. การตั้งค่าเป็นโมฆะ () เป็นฟังก์ชันที่ทำงานเพียงครั้งเดียวในการสตาร์ทเมื่อเปิดบอร์ดหรือกดปุ่มเปิดใช้งาน ที่นี่ทั้งหมุดของ Arduino ถูกประกาศให้ใช้เป็น INPUT และ OUTPUT Baudrate ถูกตั้งค่าในฟังก์ชันนี้ อัตราบอดคือความเร็วในหน่วยบิตต่อวินาทีที่ไมโครคอนโทรลเลอร์สื่อสารกับเซ็นเซอร์อัลตราโซนิก

การตั้งค่าเป็นโมฆะ () {pinMode (trigPin, OUTPUT); // ตั้งค่า TrigPin เป็น Output pinMode (echoPin, INPUT); // ตั้งค่า echoPin เป็น Input Serial.begin (9600); // เริ่มการสื่อสารแบบอนุกรม}

3. เป็นโมฆะ Trigger_US () เป็นฟังก์ชันที่จะถูกเรียกสำหรับ Fake Triggering ของขาทริกเกอร์ของเซ็นเซอร์อัลตราโซนิกตัวที่สอง เราจะซิงค์เวลาทริกเกอร์ของขาทริกเกอร์ของเซ็นเซอร์ทั้งสอง

เป็นโมฆะ Trigger_US () {// Fake trigger เซ็นเซอร์ US digitalWrite (trigPin, HIGH); // ส่งสัญญาณ HIGH ไปยังขาทริกเกอร์ของ Second sensor delayMicroseconds (10); // รอ 10 ไมโครวินาที digitalWrite (trigPin, LOW); // ส่งสัญญาณ LOW ไปยังทริกเกอร์พินตัวส่งที่สอง}

สี่. เป็นโมฆะ Calc () เป็นฟังก์ชันที่ใช้ในการคำนวณเวลาที่สัญญาณอัลตร้าโซนิคในการเดินทางจากเซ็นเซอร์ตัวแรกไปยังเซ็นเซอร์ตัวที่สอง

เป็นโมฆะ Calc () // ฟังก์ชั่นคำนวณเวลาที่คลื่นอัลตร้าโซนิคใช้ในการเดินทาง {ระยะเวลา = 0; // ระยะเวลาตั้งต้นเป็นศูนย์ Trigger_US (); // เรียกใช้ฟังก์ชัน Trigger_US while (digitalRead (echoPin) == HIGH); // ในขณะที่สถานะของขา eo ในความล่าช้าสูง (2); // หน่วงเวลา 0.2 วินาที Trigger_US (); // เรียกใช้ฟังก์ชัน Trigger_US ระยะเวลา = pulseIn (echoPin, HIGH); // คำนวณเวลาที่ใช้}

5. ที่นี่ใน ห่วงเป็นโมฆะ () เรากำลังคำนวณระยะทางโดยใช้เวลาที่สัญญาณอัลตราโซนิกเดินทางจากเซ็นเซอร์ตัวแรกไปยังเซ็นเซอร์ตัวที่สอง

โมฆะ loop () {Pdistance = ระยะทาง; คำนวณ (); // เรียกฟังก์ชัน Calc () ระยะทาง = ระยะเวลา * 0.034; // การคำนวณระยะทางที่ครอบคลุมโดยคลื่นอัลตร้าโซนิค if (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ('Measured Distance:'); // พิมพ์บนจอภาพอนุกรม Serial.println (ระยะทาง / 2); // พิมพ์บนจอภาพอนุกรม} //Serial.print('Distance: '); //Serial.println(distance/2); ล่าช้า (500); // รอ 0.5 วินาที}