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

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

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

วิธีการใช้ Arduino และ Ultrasonic Sensor ในการวัดระยะทาง?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ขั้นตอนที่ 6: เริ่มต้นใช้งาน Arduino

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

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

หากต้องการดาวน์โหลดโค้ด คลิกที่นี่

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

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

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

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

// กำหนดหมายเลขพิน const int trigPin = 9; // เชื่อมต่อขา trig ของเซ็นเซอร์อัลตราโซนิกกับ pin9 ของ Arduino const int echoPin = 10; // เชื่อมต่อ eco pin ของ Ultrasonic Sensor กับ pin10 ของ 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; // เชื่อมต่อขา trig ของเซ็นเซอร์อัลตราโซนิกกับ pin9 ของ Arduino const int echoPin = 10; // เชื่อมต่อ eco pin ของ Ultrasonic Sensor กับ pin10 ของ Arduino // กำหนดตัวแปรระยะเวลานาน // ตัวแปรที่จะเก็บเวลาที่ใช้โดยคลื่นอัลตราโซนิก t เดินทางเป็นระยะทาง int; //ตัวแปรเก็บระยะทางคำนวณ

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

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

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

โมฆะ Trigger_US () {// ทริกเกอร์ปลอมเซ็นเซอร์ของสหรัฐฯ digitalWrite (trigPin, สูง); // ส่งสัญญาณสูงไปยังพินทริกเกอร์ของเซ็นเซอร์ตัวที่สองดีเลย์ไมโครวินาที (10); // รอ 10 micro วินาที digitalWrite (trigPin, LOW); // ส่งสัญญาณ LOW ไปยังทริกเกอร์พินผู้ส่งที่สอง }

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

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

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

วงเป็นโมฆะ () { 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(ระยะทาง/2); ล่าช้า (500); // รอ 0.5 วินาที }
Facebook Twitter Google Plus Pinterest