ดูเพิ่มเติม
ดูเพิ่มเติม
ดูเพิ่มเติม
ดูเพิ่มเติม
ดูเพิ่มเติม
ดูเพิ่มเติม
ดูเพิ่มเติม
ในระบบควบคุมอัตโนมัติ/สวิตช์ความใกล้เคียงเป็นเซ็นเซอร์ทั่วไป/สำหรับตรวจจับระยะห่างระหว่างวัตถุและเซ็นเซอร์。บทความนี้จะแนะนำรายละเอียดเกี่ยวกับสองโหมดการทำงานปกติเปิดและปิดปกติของสวิทช์ความใกล้ชิด/并提供相应ของ代码示例。
## หนึ่ง、หลักการทำงานของสวิตช์ความใกล้เคียง
สวิตช์ความใกล้ชิดมักประกอบด้วยหน้าสัมผัสโลหะและวงจร。เมื่อวัตถุอยู่ใกล้เซ็นเซอร์/金属触点会被触发/使电路闭合;เมื่อวัตถุอยู่ห่างจากเซนเซอร์/金属触点断开/使电路断开。根据金属触点ของ开关状态/เราสามารถแบ่งสวิตช์ความใกล้ชิดออกเป็นประเภทเปิดตามปกติและประเภทปิดตามปกติ。
### 1. 常开型接近开关
สวิตช์ความใกล้ชิดแบบเปิดตามปกติเมื่อไม่พบวัตถุ/电路始终处于闭合状态。ซึ่งหมายความว่าเมื่อเซ็นเซอร์ตรวจพบวัตถุ/สัญญาณเอาต์พุตเป็นระดับต่ำ;เมื่อเซ็นเซอร์未检测到物体时/สัญญาณเอาต์พุตเป็นระดับสูง。
以下是หนึ่ง个使用Arduinoตัวอย่างง่ายๆของการควบคุมสวิตช์ความใกล้ชิดแบบเปิดปกติ.
```cpp
const int proximityPin = A0; // กำหนดพินอินพุทอะนาล็อกสำหรับการเชื่อมต่อสวิตช์ความใกล้ชิด
const int buttonPin = 2; // กำหนดหมุดอินพุทดิจิตอลสำหรับการเชื่อมต่อปุ่ม
void setup() {
pinMode(proximityPin, INPUT); // ตั้งค่าพินสวิตช์ความใกล้เคียงเป็นโหมดอินพุต
pinMode(buttonPin, INPUT); // ตั้งค่าหมุดปุ่มเป็นโหมดอินพุต
}
void loop() {
int proximityValue = analogRead(proximityPin); // 读取接近开关ของ模拟值
int buttonValue = digitalRead(buttonPin); // 读取按钮สถานะ
if (!buttonValue) { // 如果按钮未按下
Serial.println("Button not pressed"); // 通过串口ส่ง信息
} else if (proximityValue > 500) { // หากสวิตช์ความใกล้เคียงถูกกระตุ้นและระยะห่างน้อยกว่า500mm
Serial.println("Proximity sensor triggered"); // 通过串口ส่ง信息
} else { // 其他情况
Serial.println("Unknown event"); // 通过串口ส่ง信息
}
}
```
### 2. 常闭型接近开关
สวิตช์ความใกล้ชิดแบบปกติเมื่อไม่พบวัตถุ/电路始终处于断开状态。ซึ่งหมายความว่าเมื่อเซ็นเซอร์ตรวจพบวัตถุ/สัญญาณเอาต์พุตเป็นระดับสูง;เมื่อเซ็นเซอร์未检测到物体时/สัญญาณเอาต์พุตเป็นระดับต่ำ。
以下是หนึ่ง个使用Arduinoตัวอย่างง่ายๆ ของการควบคุมสวิตช์ความใกล้ชิดแบบปิดปกติ.
```cpp
const int proximityPin = A0; // กำหนดพินอินพุทอะนาล็อกสำหรับการเชื่อมต่อสวิตช์ความใกล้ชิด
const int buttonPin = 2; // กำหนดหมุดอินพุทดิจิตอลสำหรับการเชื่อมต่อปุ่ม
const int ledPin = 13; // คำนิยามLED连接ของ数字输出引脚
bool isTriggered = false; // เพื่อจัดเก็บตัวแปรสถานะว่าสวิตช์ความใกล้เคียงถูกเรียกใช้หรือไม่
void setup() {
pinMode(proximityPin, INPUT); // ตั้งค่าพินสวิตช์ความใกล้เคียงเป็นโหมดอินพุต
pinMode(buttonPin, INPUT); // ตั้งค่าหมุดปุ่มเป็นโหมดอินพุต
pinMode(ledPin, OUTPUT); // การตั้งค่าLED引脚为输出模式
}
void loop() {
int proximityValue = analogRead(proximityPin); // 读取接近开关ของ模拟值
int buttonValue = digitalRead(buttonPin); // 读取按钮สถานะ
if (!buttonValue) { // หากไม่ได้กดปุ่มและไม่เคยถูกเรียกใช้งาน
isTriggered = false; // ใส่状态变量重置为false
int timeDelay = delay(1000); // ดีเลย์1วินาที以消除抖动
int ledState = digitalRead(ledPin); // 在循环开始前读取LEDสถานะ/避免不必要ของ闪烁
while (digitalRead(ledPin) == ledState) {} // เมื่อLED状态仍为原来状态时/继续等待
arduino_fast_led_on(); // ใส่LEDการตั้งค่า为亮状态(สามารถทดแทนการดำเนินงานอื่นๆ ได้ตามความต้องการที่แท้จริง)
analogWrite(148, HIGH); // ตั้งค่ารีเลย์ให้อยู่ในระดับสูงเพื่อเปิดอุปกรณ์บางอย่าง(如门禁)
analogWrite(147, HIGH); // ตั้งค่ารีเลย์ให้อยู่ในระดับสูงเพื่อปิดอุปกรณ์บางอย่าง(如门禁)
analogWrite(146, HIGH); // ตั้งค่ารีเลย์ให้อยู่ในระดับสูงเพื่อเปิดอุปกรณ์อื่น(如照明)
analogWrite(145, HIGH); // ตั้งค่ารีเลย์ให้อยู่ในระดับสูงเพื่อปิดอุปกรณ์อื่น(如照明)
uint32_t startTime = micros(); // บันทึกเวลาปัจจุบันหลังจากปิดรีเลย์(用于计算延迟เวลา)
uint32_t delayDuration = THREE_SECONDS * US_IN_SEC; // ใส่ดีเลย์เวลาการตั้งค่า为3วินาที(สามารถปรับเปลี่ยนได้ตามความต้องการที่แท้จริง)
uint32_t endTime = startTime + delayDuration; // คำนวณเวลาสิ้นสุดตามเวลาเริ่มต้นและเวลาหน่วงเวลา(可用于防止过度ดีเลย์)