แรงบันดาลใจ
วันหนึ่งพี่ก็ตัดสินใจทำระบบรักษาความปลอดภัยด้วยอัลตราโซนิกของ Krepak ตามไปทีละขั้นตอน ใช้โค้ดที่ MaddMatt แก้ไขมา ทดสอบไป งงกับระยะที่วัดได้ไม่ตรง สุดท้ายก็เจอว่าคำนวณผิด แก้ให้แล้วก็...เริ่มเบื่อ เพราะพี่มี [LCD](https://s.shopee.co.th/6AfsSPcAnb) เลยอยากให้มันแสดงระยะทางที่เซ็นเซอร์วัดได้ด้วย ในส่วนถัดไปพี่จะอธิบายให้ฟังว่าอุปกรณ์หลักสองตัวนี้ทำงานยังไง
The Ultrasonic [Sensor](https://s.shopee.co.th/7VBG2rX65j)
ตอนแรกพี่ก็คิดว่าจะทำตาม . รอเดี๋ยว...บทความนี้ทำไมงงจัง เขาเปลี่ยนสายไปมาตลอดเลย พี่ต้องมานั่งถอดรหัสโค้ดเองละ
ผ่านไป สักพัก...
ได้แล้วว! พี่ถอดรหัสโค้ดเสร็จแล้ว ต้องมาตรวจอีกทีว่าโค้ดที่ MaddMatt แก้ไขมามันเปลี่ยนอะไรไปมั้ย ไหนลองอัปโหลดดู...
โอเค เสร็จแล้ว รอเดี๋ยว... อะไรเนี่ย? นี่มันไม่ใช่ 5 เซนติเมตรแน่ๆ คำนวณผิดแล้วเพื่อน! พี่ต้องมาดูใหม่ซะแล้ว
ตอนนี้ได้สูตรที่ถูกต้องแล้ว ถ้าน้องๆ อยากรู้วิธีใช้ HC-SR04 ให้ละเอียดกว่านี้ (และได้สูตรที่แม่นยำกว่าที่พี่ใช้ ซึ่งของพี่ก็ใช้ได้อยู่แล้วนะ) ไปดูได้จาก โดย . ตอนนี้น้องๆ คงอยากเห็นแผนการต่อสาย มันอยู่ด้านล่างสุดตรงส่วน Schematic นะ จำไว้ว่านี่คือแผนของอุปกรณ์ที่เสร็จแล้ว พอสำหรับ Ultrasonic Sensor, ต่อไปคือ:
The LCD
ตอนนี้เซ็นเซอร์เสร็จแล้ว พี่ต้องมาต่อ LCD ต่อ โชคดีที่มีบทความสอนต่อ LCD ไว้ดีแล้ว ดูได้ . แต่พี่มีปัญหานิดนึง บางพินที่บทความนี้ใช้ มันถูกใช้โดยเซ็นเซอร์อัลตราโซนิกไปแล้ว พี่ต้องใช้พินอื่นแทน
ผ่านไป อีกสักพัก...
ถึงเวลาที่น้องจะลงมือสร้างแล้ว ใช้ Schematic ด้านล่างเป็นตัวช่วย ถ้ายังไม่ได้เริ่มนะ
ต่อสายเรียบร้อยแล้วใช่ไหม? มาทำให้มันทำงานกัน! คัดลอกโค้ดด้านล่างไปวางใน [Arduino](https://s.shopee.co.th/7fUgFAWSki) IDE ที่น้องชอบ แล้วอัปโหลดลงบอร์ดได้เลย:
const int trigPin = 2;
const int echoPin = 3;
const int LEDlampRed = 4;
const int LEDlampYellow = 5;
const int LEDlampGreen = 6;
const int [buzzer](https://s.shopee.co.th/6pvZFdZdRf) = 7;
int sound = 500;
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDlampRed, OUTPUT);
pinMode(LEDlampYellow, OUTPUT);
pinMode(LEDlampGreen, OUTPUT);
pinMode(buzzer, OUTPUT);
}
void loop() {
long durationindigit, distanceincm;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durationindigit = pulseIn(echoPin, HIGH);
distanceincm = (durationindigit*0.034) / 2;
if (distanceincm > 50) {
digitalWrite(LEDlampGreen, LOW);
digitalWrite(LEDlampYellow, LOW);
digitalWrite(LEDlampRed,LOW);
noTone(buzzer);
}
else if (distanceincm <= 50 && distanceincm > 20) {
digitalWrite(LEDlampGreen, HIGH);
digitalWrite(LEDlampYellow, LOW);
digitalWrite(LEDlampRed,LOW);
noTone(buzzer);
}
else if (distanceincm <= 20 && distanceincm > 5) {
digitalWrite(LEDlampYellow, HIGH);
digitalWrite(LEDlampGreen, HIGH);
digitalWrite(LEDlampRed,LOW);
tone(buzzer, 500);
}
else if (distanceincm <= 0) {
digitalWrite(LEDlampGreen, LOW);
digitalWrite(LEDlampYellow, HIGH);
digitalWrite(LEDlampRed, LOW);
noTone(buzzer);
}
else {
digitalWrite(LEDlampGreen, HIGH);
digitalWrite(LEDlampYellow, HIGH);
tone(buzzer, 1000);
digitalWrite(LEDlampRed, HIGH);
delay(300);
digitalWrite(LEDlampRed, LOW);
}
Serial.print(distanceincm);
Serial.println(" cm");
delay(300);
}
สู้ๆ นะ น้อง!
ข้อมูลเทคนิคเพิ่มเติม
Spatial Intrusion Detection
ระบบรักษาความปลอดภัยนี้สร้างขอบเขตที่มองไม่เห็นโดยใช้คลื่นเสียงอัลตราโซนิก
- HC-SR04 Sensor: Arduino จะส่งพัลส์เสียงความถี่ 40kHz ออกไป แล้ววัดเวลาที่เสียงสะท้อนกลับมา ระยะทางคำนวณเป็นเซนติเมตรโดยคูณเวลาด้วย 0.034
- Variable Distance Trigger: ต่างจากเซ็นเซอร์ PIR ทั่วไปตรงที่น้องสามารถกำหนด "โซน" ที่เฉพาะเจาะจงได้ เช่น ตั้งให้ระบบเตือนเมื่อมีวัตถุเข้ามาในระยะ 50 ซม. เท่านั้น โดยไม่สนใจสิ่งที่อยู่ไกลกว่านั้น