กลับไปหน้ารวมไฟล์
proximity-alarm-and-distance-monitor-using-ultrasonic-sensor-1922ae.md

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

เพื่อให้มันตื่นเต้นกว่าเดิม เรายัด LED สีแดงกับบัซเซอร์ (Buzzer) เข้าไปด้วย โค้ดเราตั้งค่าไว้ว่า ถ้ามีอะไรเข้ามาใกล้เกิน 15 ซม. LED จะสว่างนิดหน่อย แต่ถ้าเข้ามาใกล้เกิน 5 ซม. ละก็ LED จะสว่างจ้าและบัซเซอร์จะส่งเสียงเตือนทันที น้องสามารถแกะโค้ดไปปรับระยะเหล่านี้ได้ตามใจเลย

ล้วงลึกเทคนิค

โปรเจกต์ "Sonic-Sentinel" นี้คือการลงลึกเบื้องต้นเกี่ยวกับ Active Acoustic Sensing โดยการจับคู่ทรานซิฟเวอร์อัลตราโซนิกกับเซอร์โวมอเตอร์ที่หมุนสอดคล้องกัน เราก็จะได้ระบบ "เรดาร์" (จริงๆ คือโซนาร์) ราคาประหยัด มันแสดงให้เห็นจุดตัดระหว่างฟิสิกส์กับเฟิร์มแวร์ ที่ใช้การจับเวลาในระดับไมโครวินาทีเพื่อคำนวณพิกัดตำแหน่ง

  • การวิเคราะห์ Acoustic Time-of-Flight (ToF):
    • การส่งพัลส์ 40kHz: เซ็นเซอร์ HC-SR04 จะส่งพัลส์เสียงอัลตราโซนิก 8 รอบที่ความถี่ 40kHz ออกไป เมื่อถูกกระตุ้นด้วยพัลส์ 10µs จาก Arduino
    • การแปลงเป็นระยะทาง: ระบบจะวัดความยาวของพัลส์ "Echo" ที่สะท้อนกลับมา โดยใช้ความเร็วเสียงในอากาศ ($343m/s$ หรือ $0.0343cm/µs$) เฟิร์มแวร์จะคำนวณระยะทางด้วยสูตร: $Distance = \frac{Time \times 0.0343}{2}$ การหารด้วย 2 นี่คือเพื่อชดเชยการเดินทางไป-กลับของคลื่นเสียงจากเซ็นเซอร์ไปยังวัตถุแล้วกลับมา
  • การสแกนพื้นที่แบบประสานงานกับเซอร์โว:
    • การทำแผนที่พิกัดเชิงขั้ว: เพื่อสแกนมุมมอง 180º เซอร์โว SG90 จะกวาดไปเป็นขั้นๆ (discrete steps) โค้ด Arduino จะทำให้แน่ใจว่าการ "ปิง" ของเซ็นเซอร์อัลตราโซนิกเกิดขึ้นหลังจากเซอร์โวหมุนไปยังตำแหน่งที่ตั้งไว้แล้วเท่านั้น ป้องกันข้อมูลเบลอ
    • ข้อดีของไลบรารี NewPing: ต่างจากวิธีมาตรฐานอย่าง pulseIn() ไลบรารี NewPing ใช้ลอจิกจับเวลาที่ออปติไมซ์และไม่บล็อกการทำงาน ทำให้อัตราการสแกนเร็วและเสถียรกว่า
  • การตอบสนองแบบสัมผัสและหลายระดับ:
    • การปรับความสว่างด้วย PWM: LED สีแดงต่อกับขาพิน PWM (Pulse-Width Modulation) ซอฟต์แวร์จะแมประยะทาง (ซม.) ไปเป็นค่าความสว่าง (0-255) เมื่อวัตถุเคลื่อนจาก 15 ซม. เข้ามาใกล้ 5 ซม. วงจรทำงาน (duty cycle) จะเพิ่มขึ้น ทำให้เกิด "แสงเตือน" ที่เข้มข้นขึ้นเรื่อยๆ
    • การเตือนเมื่อถึงขีดจำกัด: เมื่อวัตถุล้ำเข้าไปใน "โซนวิกฤต" 5 ซม. บัซเซอร์จะทำงานทันที ให้สัญญาณเตือนทางเสียง

วิศวกรรมและการลงมือทำ

ประกอบชิ้นส่วนต่างๆ ตามแผนภาพวงจรด้านล่างนี้เลย

  • การติดตั้งส่วนกลไก: ติดเซ็นเซอร์อัลตราโซนิกบนเซอร์โวมอเตอร์ให้มั่นคง โดยให้เซ็นเซอร์สามารถกวาดได้ 180 องศาตามการเคลื่อนที่ของเซอร์โว ทำได้ด้วยเทปกาวสองหน้าหรือปืนกาว จากนั้นติดเซอร์โวให้แน่น โดยให้เซ็นเซอร์หันไปทางพื้นที่ที่ต้องการสแกน เราใช้กระดาษลังทำที่ยึดเซอร์โวแบบง่ายๆ การยึด HC-SR04 ให้แน่นเป็นเรื่องสำคัญมาก เพราะการสั่นไหวแม้เพียงนิดจะทำให้เกิดความคลาดเคลื่อนเชิงมุมในการอ่านค่าระยะทางได้
  • ความแน่นอนของเฟิร์มแวร์: โปรเจกต์นี้แสดงวิธีลงมือทำสองแบบ: แบบจัดการขา Trig/Echo ด้วยตัวเอง (raw bit-banging) กับแบบใช้ไลบรารี แบบแรกช่วยให้เข้าใจการทำงานระดับฮาร์ดแวร์ชัดเจน ส่วนแบบหลังให้เฟรมเวิร์กที่แข็งแรงกว่า

ก่อนจะใส่โค้ด ไปที่ตัวจัดการไลบรารีก่อน (Tools->Manage Libraries) แล้วดาวน์โหลดไลบรารี NewPing (พิมพ์ในช่องค้นหา แล้วกดติดตั้งเมื่อมันโผล่มาในลิสต์) น้องทำโปรเจกต์นี้โดยไม่ใช้ไลบรารีนี้ก็ได้ วิธีทำจะอธิบายไว้ตอนท้าย

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

ดูผลลัพธ์ เช่น ระยะห่างจากสิ่งกีดขวาง ได้ใน Serial Monitor หรือจะดูเป็นกราฟในเครื่องมือ Serial Plotter ก็ได้

  • การแสดงผลข้อมูล: ด้วยการส่งค่าตัวเลขระยะทาง (ซม.) ออกไปยัง Serial Plotter ระบบจะให้มุมมองแบบ "ออสซิลโลสโคป" แสดงสภาพแวดล้อมรอบตัวแบบเรียลไทม์ ทำให้ง่ายต่อการตรวจหาสัญญาณรบกวนหรือจุดที่เซ็นเซอร์อ่านค่าไม่ได้
กดดูผลลัพธ์ได้จากเมนูพวกนี้นะจ๊ะ

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

เราเพิ่มแขนให้มันสองข้างไปแล้วว 💪😁

มาเพิ่มทิปส์เล็กๆ น้อยๆ ให้หน่อย;

โค้ดที่ให้ด้านล่างใช้ไลบรารี่ NewPing นะ ถ้าน้องไม่อยากลงไลบรารี่ ก็ทำได้โดยไม่ต้องใช้มัน แค่แทนที่บรรทัดนี้

int cm = sonar.ping_cm();

ด้วยโค้ดชุดยาวเหยียดนี้แทน

long duration, inches, cm;
pinMode(trigPin, OUTPUT);
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
cm

อย่างที่เห็น มันยาวและดูซับซ้อนดีเนอะ แต่มันจะทำให้น้องเห็นภาพชัดเจนขึ้นว่าเซ็นเซอร์อัลตราโซนิกทำงานยังไง มันคือการส่งสัญญาณไปที่ขา trigpin เป็นเวลา 10 ไมโครวินาที แล้วคำนวณเวลาที่ใช้ในการเดินทางไปกลับถึงขา echoPin เนื่องจากระยะทางที่เดินทางไปกลับ (จากเซ็นเซอร์ไปหาวัตถุแล้วสะท้อนกลับมา) เท่ากับความเร็ว (ความเร็วเสียง ซึ่งคือ 0.0343 cm/ไมโครวินาที) คูณกับเวลา (duration) เราก็จะได้ค่าของระยะทางเก็บไว้ในตัวแปร cm นั่นเอง

สำหรับโปรเจคที่อยากให้ง่ายกว่านี้ เราสามารถตัด LED กับ Buzzer และแม้แต่ Servo ออกไปได้เลย แค่ไม่ต้องต่อมันในวงจร แล้วใช้โค้ดด้านล่างนี้แทน

#include <NewPing.h>
const int TriggerPin = 6;
const int EchoPin = 7;
// 100 = maxDistance
NewPing sonar (TriggerPin, EchoPin, 100);

void setup() {
 Serial.begin(9600);
}
void loop() {
 int cm = sonar.ping_cm();
 Serial.println(cm);
 delay(50);
}

สรุปเลยวัยรุ่น

Sonic-Sentinel นี่เป็นตัวอย่างที่เจ๋งมากที่แสดงให้เห็นว่าเซ็นเซอร์พื้นฐานๆ สามารถเอามารวมกันสร้างเป็นระบบตรวจจับพื้นที่รอบตัวที่ล้ำขึ้นได้ยังไง การเข้าใจเรื่อง Acoustic Ranging และ Servo Synchronization จะช่วยให้น้องมีสกิลที่จำเป็นสำหรับการสร้างระบบหลบหลีกสิ่งกีดขวางขั้นสูงในวงการหุ่นยนต์อัตโนมัติและ IoT Security ได้เลย


Sonic Visualization: การทำแผนที่สิ่งที่มองไม่เห็นผ่านเสียง

จัดไปวัยรุ่น!! สู้งานนะน้อง อย่าหยุดสงสัย อย่าหยุดสร้างแรงบันดาลใจ!!

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Arduino IDE"
author: "theriveroars"
category: ""
components:
  - "1x LED (generic)"
  - "1x SG90 Micro-servo motor"
  - "1x Ultrasonic Sensor - HC-SR04 (Generic)"
  - "1x Hot glue gun (generic)"
  - "1x Arduino UNO"
  - "1x Jumper wires (generic)"
  - "1x Buzzer"
  - "1x Tape, Double Sided"
description: "งานง่ายแต่หล่อ! อุปกรณ์วัดระยะใกล้-ไกลแบบเรียลไทม์ เราเพิ่มเอฟเฟกต์ให้ตื่นเต้นด้วยเสียงและไฟกระพริบสุดเท่ ถ้าวัตถุเข้ามาใกล้เกินไป เตรียมตัวโดนอินเตอร์รัพต์รัวๆ!"
difficulty: "Easy"
documentationLinks: []
downloadableFiles:
  - "https://create.arduino.cc/editor/thegreatpanda/93b5b663-c337-4cc0-9c13-ce004ad70c5d"
  - "https://create.arduino.cc/editor/thegreatpanda/93b5b663-c337-4cc0-9c13-ce004ad70c5d"
encryptedPayload: "U2FsdGVkX18zaScGeGxEwBkCVTbheJ/wuGa4CZ1bDw/9kVhCD8EoI3l2DtV5IIGMWhIm9i9AMJnzCvl7PMCIMHQCWeDQ9RWKQAC77LuS+fU="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/proximity-alarm-and-distance-monitor-using-ultrasonic-sensor-1922ae_cover.jpg"
lang: "en"
likes: 0
passwordHash: "ac62b3666a841f3278cd9a6a0eefb5184e435b3f165398ecbc140de2726bef84"
price: 1499
seoDescription: "Build a Proximity Alarm and distance monitor using an Ultrasonic Sensor with sound and light alerts for objects that are too close."
tags:
  - "sonar"
  - "ultrasonic sensor"
  - "radar"
  - "monitoring"
  - "servo"
title: "โปรเจคเตือนระยะประชิด + วัดระยะแบบตึงๆ ด้วย Ultrasonic Sensor"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/Ll8vVZrt34Y"
views: 7357