ภารกิจที่ 5: Sensor & Actuator

🚧 ไม้กั้นทางรถไฟอัตโนมัติ (Auto Gate)

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

คลังความรู้ (Knowledge Base)

📌 หลักการทำงานของเซนเซอร์ Ultrasonic (HC-SR04)
เซนเซอร์จะใช้หลักการสะท้อนของคลื่นเสียง มี 2 ขาหลักที่ใช้สั่งงานคือ:

1. Trig (Trigger): ลำโพงส่งสัญญาณเสียงออกไป (ส่งไฟ High 10 ไมโครวินาที)
2. Echo: ไมโครโฟนรับเสียงสะท้อนกลับมา และใช้คำสั่ง pulseIn() เพื่อวัดระยะเวลาเดินทาง

* สูตรคำนวณ: ระยะทาง (cm) = (เวลาเดินทาง * 0.034) / 2
📌 การควบคุม Servo Motor ด้วย Library
การควบคุม Servo ให้แม่นยำต้องใช้ Library พิเศษช่วยจัดการสัญญาณ PWM:

1. #include <Servo.h> เรียกใช้งาน Library ไว้บรรทัดบนสุดของโปรแกรม
2. myServo.attach(pin); กำหนดพอร์ตดิจิทัลที่ต่อสายสัญญาณ (มักเป็นสายสีส้มหรือเหลือง)
3. myServo.write(องศา); สั่งหมุนแกนมอเตอร์ไปยังองศาที่ต้องการ (0 - 180 องศา)
📌 หลักการทำงานและการควบคุมลำโพงเตือนภัย (Buzzer)
ลำโพง Buzzer ทำหน้าที่แปลงสัญญาณไฟฟ้าให้เป็นคลื่นเสียง โดยเราสามารถควบคุมการเกิดเสียงผ่านคำสั่งพื้นฐานดังนี้:

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);
}

พื้นที่ปฏิบัติการ (Virtual Lab)

ความคืบหน้าภารกิจ0%

ศูนย์สนับสนุนและแบบทดสอบ

พบบั๊ก? แจ้งศูนย์แก้ปมปัญหาด่วน!
📝 ทดสอบความเข้าใจภารกิจที่ 5 ข้อ 1 / 3

กำลังโหลดคำถาม...

ผลการประเมิน

คุณทำแบบทดสอบภารกิจที่ 5 สำเร็จแล้ว

คะแนนของคุณ: 0 / 3

ลานสะท้อนคิด (Reflection)