วัดระยะฉับไวด้วย Digital Distance Meter
เจ้าเครื่องวัดระยะด้วยคลื่นเสียงความถี่สูง (Ultrasonic) นี้ มันทำงานคล้ายๆ เรดาร์หรือโซนาร์เลยนะ น้อง มันประเมินตำแหน่งของเป้าหมายโดยการตีความเสียงสะท้อนของคลื่นเสียงนั่นแหละ เซนเซอร์พวกนี้จะปล่อยคลื่นเสียงความถี่สูงออกไป แล้วค่อยฟังเสียงสะท้อนที่กลับมา มันคำนวณเวลาระหว่างการส่งสัญญาณกับการรับเสียงสะท้อน เพื่อหาระยะห่างจากวัตถุ
เทปวัดระยะเนี่ย ต้องใช้สองคนก้มๆ เงยๆ วัดกันให้เมื่อย Digital Distance Meter ตัวนี้แหละคือเครื่องมือช่างขั้นเทพ (First Maker Tool) ที่จะเปลี่ยนชีวิต! มันผสานการสำรวจพื้นที่จริงๆ เข้ากับความสามารถทางคณิตศาสตร์ของ Arduino และโมดูลโซนาร์ HC-SR04 แค่กดปุ่ม "ปิง" ไปที่กำแพง เสียงสะท้อนที่มองไม่เห็นก็จะถูกแปลงเป็นค่าตัวเลขเมตริกที่แม่นยำ แสดงผลบนหน้าจอให้เห็นเลย
เกี่ยวกับอุปกรณ์
ระบบนี้มีส่วนหลักแค่ชิ้นเดียวเลยนะ นั่นคือไมโครคอนโทรลเลอร์ที่ทำหน้าที่เป็นสมองของระบบ ส่วนประกอบอินพุตและเอาต์พุตต่างๆ เช่น วงจรส่งสัญญาณ (Transmitter) วงจรรับสัญญาณ (Receiver) ตัวควบคุมอุณหภูมิ และจอ LCD ต่างก็เชื่อมต่อกับสมองส่วนนี้
วงจรส่งสัญญาณจะสร้างสัญญาณความถี่ 40 kHz และเริ่มจับเวลาในขณะที่ส่งสัญญาณออกไป ขณะที่สัญญาณเริ่มเดินทางผ่านตัวแปลงสัญญาณ (Ultrasonic Transducer) ไมโครคอนโทรลเลอร์จะบันทึกเวลาเริ่มต้นส่งไว้ รอจนกว่าวงจรรับจะได้ยินเสียงสะท้อนกลับมา
สัญญาณจะเดินทางไปชนกับวัตถุใดๆ ที่ขวางหน้า แล้วสะท้อนกลับมาที่วงจรรับ พอสัญญาณกลับมา วงจรรับต้องตรวจจับเสียงสะท้อนนั้น ประมวลผล แล้วส่งข้อมูลให้ไมโครคอนโทรลเลอร์ ไมโครคอนโทรลเลอร์จะหยุดจับเวลาทันที และคำนวณระยะห่างโดยใช้เวลาที่วัดได้ จากนั้นก็แสดงผลระยะทางบนจอ LCD
แต่ถ้าสัญญาณที่ส่งออกไปไม่ชนอะไรเลย หรือเวลาที่วัดได้เร็วเกินไป (ระยะใกล้สุด) ระบบก็จะแสดงข้อความผิดพลาดบนจอ LCD บอกว่าระยะนั้นไม่เหมาะสมกับระบบนะจ๊ะ
คณิตศาสตร์ของพัลส์ (ความเร็วเสียง)
โค้ดทั้งหมดนี้วางอยู่บนตัวคูณที่เจาะจงมากๆ คือ 0.034 cm/us
- Arduino Uno จะสั่งให้ขา Trigger ปล่อยพัลส์แรงๆ เป็นเวลา
10 ไมโครวินาทีซึ่งจะไปกระตุ้นให้โมดูล HC-SR04 ปล่อยคลื่นเสียงอัลตราโซนิกความถี่ 40kHz ออกมาจริงๆ จำนวน 8 รอบ (8-cycle burst) - จากนั้นโค้ดจะใช้ฟังก์ชันพิเศษ
<pulseIn()>เพื่อฟังเสียงที่ขา Echo - ฟังก์ชันนี้จะทำให้ Arduino หยุดประมวลผลทุกอย่าง จนกว่าไมโครโฟนจิ๋วจะได้ยินเสียงสะท้อนกลับมา! มันจะคืนค่าจำนวนไมโครวินาทีที่ผ่านไป
- ปัจจัยทางฟิสิกส์: ความเร็วเสียงในอากาศที่อุณหภูมิห้องจะอยู่ที่ประมาณ
343 m/sหรือ0.0343 cm/µs
สูตรที่ใช้:
ระยะทาง = (ความเร็วเสียง * เวลา) / 2
ความเร็วเสียง = 340m/s (หรือประมาณ 343 m/s ที่อุณหภูมิห้อง)
ในโค้ด จะเขียนแบบนี้:
float distanceCM = (durationMicroseconds * 0.034) / 2;
(ต้องหาร 2 เพราะเสียงต้องเดินทางไปยังวัตถุแล้วสะท้อนกลับมาด้วยน้า!).
การส่งข้อมูลไปยังจอแสดงผลฮาร์ดแวร์
เพราะว่าโปรเจกต์นี้มันต้องพกพาได้ เลยเปลี่ยนจากจอ LCD 16x2 ตัวเบิ้มๆ มาเป็นตัวที่เล็กกว่า กระชับกว่า
- ถ้าอยากได้ลุคสวย โมเดิร์นหน่อย ลองใช้ I2C 0.96" SSD1306 OLED ดู
- ใช้ไลบรารีอย่าง
Adafruit_GFXกับAdafruit_SSD1306มาช่วยคำนวณตำแหน่งสำหรับวาดกราฟิกเองได้เลย:
display.clearDisplay();
display.setTextSize(3); // ฟอนต์เบิ้มๆ!
display.setCursor(0,0);
display.print(distanceCM); display.print(" cm");
display.display(); // ยิงข้อมูลจากบัฟเฟอร์ที่มองไม่เห็นไปยังหน้าจอ!
ส่วนประกอบของเครื่องวัดระยะแบบเทป
- Arduino Nano (ตัวเล็กสุดๆ พอดีกับกล่อง)
- HC-SR04 Ultrasonic Sonar Module หรือ VL53L0X Laser Time-of-Flight Sensor (ถ้าต้องการความแม่นยำระดับมิลลิเมตร แทนที่จะเป็นเซนติเมตร!)
- 0.96" I2C OLED Display Module หรือจอ LCD 16x2 ธรรมดา
- แบตเตอรี่ 9V หรือ LiPo ขนาด 18650 ก้อนเดียว ยัดลงไปในกล่องแบบถือที่พิมพ์จาก 3D Printer ทั้งชิ้น หน้าตาเหมือนปืน Phaser ใน Star Trek!
ข้อดี
- ไม่ได้รับผลกระทบจากสีหรือความโปร่งใสของวัตถุ
- ใช้ในที่มืดได้
- ราคาถูก
- ไม่ค่อยได้รับผลกระทบจากฝุ่น, สิ่งสกปรก, หรือสภาพแวดล้อมที่มีความชื้นสูง
- มีความแม่นยำสูงกว่าวิธีอื่นๆ หลายวิธีในการวัดความหนาและระยะห่างถึงพื้นผิวที่ขนานกัน
- ความถี่สูง, ความไวสูง และพลังทะลุทะลวง ทำให้ตรวจจับวัตถุภายนอกหรือวัตถุที่ลึกได้ง่าย
- เซ็นเซอร์อัลตราโซนิกของเราใช้ง่าย และไม่เป็นอันตรายต่อวัตถุ, คน หรืออุปกรณ์ที่อยู่ใกล้เคียงระหว่างการทำงาน
- เซ็นเซอร์ของเราต่อเข้ากับไมโครคอนโทรลเลอร์หรือคอนโทรลเลอร์ชนิดไหนก็ได้ง่ายมาก
หวังว่าน้องๆ จะสนุกกับโปรเจกต์ของพี่นะ อย่าลืมกดไลค์ แชร์ คอมเมนต์ แล้วก็ติดตามช่องกันด้วย!