ภารกิจที่ 5: Sensor & Actuator
🚧 ไม้กั้นทางรถไฟอัตโนมัติ (Auto Gate)
🎯 จุดประสงค์การเรียนรู้: นักเรียนสามารถประยุกต์ใช้งานเซนเซอร์อัลตราโซนิกเพื่อวัดระยะทาง และนำค่ามาสร้างเงื่อนไขควบคุมการหมุนของ Servo Motor เพื่อสร้างระบบไม้กั้นอัตโนมัติที่ทำงานได้จริง
คลังความรู้ (Knowledge Base)
📌 หลักการทำงานของเซนเซอร์ Ultrasonic (HC-SR04)
เซนเซอร์จะใช้หลักการสะท้อนของคลื่นเสียง มี 2 ขาหลักที่ใช้สั่งงานคือ:
1. Trig (Trigger): ลำโพงส่งสัญญาณเสียงออกไป (ส่งไฟ High 10 ไมโครวินาที)
2. Echo: ไมโครโฟนรับเสียงสะท้อนกลับมา และใช้คำสั่ง
* สูตรคำนวณ: ระยะทาง (cm) = (เวลาเดินทาง * 0.034) / 2
1. Trig (Trigger): ลำโพงส่งสัญญาณเสียงออกไป (ส่งไฟ High 10 ไมโครวินาที)
2. Echo: ไมโครโฟนรับเสียงสะท้อนกลับมา และใช้คำสั่ง
pulseIn() เพื่อวัดระยะเวลาเดินทาง* สูตรคำนวณ: ระยะทาง (cm) = (เวลาเดินทาง * 0.034) / 2
📌 การควบคุม Servo Motor ด้วย Library
การควบคุม Servo ให้แม่นยำต้องใช้ Library พิเศษช่วยจัดการสัญญาณ PWM:
1.
2.
3.
1.
#include <Servo.h> เรียกใช้งาน Library ไว้บรรทัดบนสุดของโปรแกรม2.
myServo.attach(pin); กำหนดพอร์ตดิจิทัลที่ต่อสายสัญญาณ (มักเป็นสายสีส้มหรือเหลือง)3.
myServo.write(องศา); สั่งหมุนแกนมอเตอร์ไปยังองศาที่ต้องการ (0 - 180 องศา)
📌 หลักการทำงานและการควบคุมลำโพงเตือนภัย (Buzzer)
ลำโพง Buzzer ทำหน้าที่แปลงสัญญาณไฟฟ้าให้เป็นคลื่นเสียง โดยเราสามารถควบคุมการเกิดเสียงผ่านคำสั่งพื้นฐานดังนี้:
1.
2.
3.
1.
pinMode(pin, OUTPUT); ต้องตั้งค่าขาที่ต่อกับลำโพง (ขั้วบวก) ให้เป็นโหมดส่งสัญญาณออกเสมอ2.
tone(pin, frequency); สั่งให้ลำโพงส่งเสียงตามความถี่ (Hz) ที่กำหนด เช่น tone(8, 1000); คือให้ขาสัญญาณ 8 ส่งเสียงความถี่ 1000 เฮิรตซ์3.
noTone(pin); สั่งให้ลำโพงหยุดส่งเสียงทันที
int trigPin = 9;
int echoPin = 10;
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(100);
}
#include <Servo.h>
Servo gateServo;
int trigPin = 9;
int echoPin = 10;
int buzzerPin = 8; // เพิ่มตัวแปรสำหรับลำโพงเตือนภัย
void setup() {
gateServo.attach(6);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT); // ตั้งค่าลำโพงเป็น OUTPUT
}
void loop() {
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
if (distance < 50) {
gateServo.write(90); // ปิดไม้กั้น
tone(buzzerPin, 1000); // ส่งเสียงเตือนภัย (ความถี่ 1000 Hz)
} else {
gateServo.write(0); // เปิดไม้กั้น
noTone(buzzerPin); // ปิดเสียงเตือนภัย
}
delay(100);
}
ศูนย์สนับสนุนและแบบทดสอบ
พบบั๊ก? แจ้งศูนย์แก้ปมปัญหาด่วน!
📝 ทดสอบความเข้าใจภารกิจที่ 5
ข้อ 1 / 3
กำลังโหลดคำถาม...
ผลการประเมิน
คุณทำแบบทดสอบภารกิจที่ 5 สำเร็จแล้ว
คะแนนของคุณ: 0 / 3