ในโลกของวิศวกรรมฝังตัว (Embedded Systems) "เซนเซอร์" เปรียบเสมือนประสาทสัมผัสของเครื่องจักรที่ช่วยให้ระบบสามารถรับรู้และโต้ตอบกับสภาวะแวดล้อมจริงได้ ไม่ว่าจะเป็นการตรวจจับแสง อุณหภูมิ ความชื้น หรือแม้แต่ก๊าซในอากาศ การเข้าใจหลักการทำงานของเซนเซอร์จึงเป็นก้าวแรกที่สำคัญที่สุดสำหรับนักพัฒนา
บทความนี้เราจะมาเจาะลึกการใช้งานเซนเซอร์เบื้องต้น โดยใช้ LDR (Light Dependent Resistor) หรือเซนเซอร์วัดความเข้มแสงมาเป็นตัวอย่างในการเรียนรู้ร่วมกับบอร์ด Arduino Uno เพื่อให้คุณเห็นภาพการเปลี่ยนผ่านข้อมูลจากโลกกายภาพสู่โลกดิจิทัลอย่างชัดเจน
พื้นฐานการทำงานของเซนเซอร์: จากปรากฏการณ์สู่แรงดันไฟฟ้า
เซนเซอร์ทำหน้าที่เป็น "ทรานสดิวเซอร์" (Transducer) ซึ่งจะเปลี่ยนพลังงานรูปแบบหนึ่ง (เช่น แสง, ความร้อน) ให้กลายเป็นพลังงานไฟฟ้า โดยส่วนใหญ่มักจะแสดงผลออกมาในรูปของแรงดันไฟฟ้า (Voltage) ที่เปลี่ยนแปลงไปตามสภาวะทางกายภาพ
ตัวอย่างเช่น LDR (Light Dependent Resistor): LDR คือตัวต้านทานชนิดหนึ่งที่ค่าความต้านทานจะแปรผันตามความเข้มแสงที่ตกกระทบ:
- ในที่มืด: ค่าความต้านทานจะสูงมาก (หลาย Megaohms) ทำให้กระแสไหลผ่านได้น้อย
- ในที่สว่าง: ค่าความต้านทานจะลดลงอย่างรวดเร็ว (เหลือเพียงไม่กี่ร้อย Ohms)
เมื่อเรานำ LDR มาต่อร่วมกับวงจรแบ่งแรงดัน (Voltage Divider) แรงดันไฟฟ้าที่ส่งเข้าบอร์ด Arduino จะเปลี่ยนแปลงไปตามความสว่าง ซึ่งนี่คือ "สัญญาณอนาล็อก" ที่เราจะนำไปประมวลผลต่อ
ความแตกต่างของสัญญาณ: Digital vs. Analog
ก่อนจะเริ่มลงมือเชื่อมต่อ เราต้องเข้าใจประเภทของสัญญาณที่ Arduino รับเข้ามาเสียก่อน:
- Digital Signals (สัญญาณดิจิทัล): มีสถานะเพียง 2 ระดับ คือ "HIGH" (1) และ "LOW" (0) หรือเทียบเท่ากับ เปิด และ ปิด เหมาะสำหรับเซนเซอร์ที่มีเงื่อนไขชัดเจน เช่น สวิตช์ปุ่มกด หรือเซนเซอร์ตรวจจับวัตถุแบบอินฟราเรด
- Analog Signals (สัญญาณอนาล็อก): เป็นสัญญาณที่มีความต่อเนื่อง (Continuous) สำหรับ Arduino Uno นั้นมีวงจร ADC (Analog-to-Digital Converter) ขนาด 10 บิต ซึ่งจะทำการสุ่มวัดแรงดันไฟฟ้าในช่วง 0-5V แล้วแปลงเป็นตัวเลขในช่วง 0 ถึง 1023 (ไม่ใช่ 0-255 ซึ่งเป็นค่าของ PWM ขาออก)
การเชื่อมต่อวงจร (Hardware Interfacing)
เพื่อให้ระบบของเราสมบูรณ์ เราจะทำการต่อ LDR เข้ากับช่องทางรับสัญญาณอนาล็อก และใช้ LED เป็นตัวแสดงผลการทำงาน
- LDR กับ Arduino: ต่อ LDR เข้ากับพิน A0 (Analog Input) โดยใช้ร่วมกับตัวต้านทานเพื่อสร้างวงจรแบ่งแรงดัน
- LED กับ Arduino: ต่อเข้ากับพิน D13 (Digital Pin 13)
- เกร็ดความรู้ทางวิศวกรรม: บอร์ด Arduino Uno ส่วนใหญ่จะมี LED ที่เชื่อมต่อกับพิน 13 บนตัวบอร์ดอยู่แล้ว (Built-in LED) พร้อมตัวต้านทานจำกัดกระแสในตัว ทำให้เราสามารถทดสอบโค้ดได้ทันทีโดยไม่ต้องต่ออุปกรณ์ภายนอกเพิ่ม แต่หากต้องการต่อ LED ภายนอกเองที่พินอื่น อย่าลืมต่อตัวต้านทาน (220Ω - 330Ω) อนุกรมไว้เพื่อป้องกัน LED ขาดเนื่องจากกระแสเกิน
การวิเคราะห์ลอจิกของโปรแกรม (Code Analysis)
โค้ดด้านล่างนี้คือหัวใจหลักที่จะสั่งการให้ Arduino ทำหน้าที่เป็นสวิตช์เปิด-ปิดไฟอัตโนมัติ (Night Light) เมื่อความเข้มแสงลดลงถึงจุดที่กำหนด
// ประกาศตัวแปรสำหรับเก็บค่าที่อ่านได้จากเซนเซอร์ (0 - 1023)
int sensor1Value = 0;
void setup() {
// กำหนดให้พิน 13 ทำหน้าที่เป็น OUTPUT เพื่อส่งไฟไปเลี้ยง LED
pinMode(13, OUTPUT);
}
void loop() {
// อ่านค่าแรงดันจากพิน A0 แล้วแปลงเป็นค่าตัวเลขเก็บไว้ใน sensor1Value
sensor1Value = analogRead(A0);
// ตรวจสอบเงื่อนไข: หากค่าที่อ่านได้น้อยกว่า 200 (หมายถึงสภาวะแสงน้อยหรือมืด)
if(sensor1Value < 200) {
// สั่งให้ LED สว่าง (HIGH)
digitalWrite(13, HIGH);
delay(500); // หน่วงเวลาเล็กน้อยเพื่อให้ระบบเสถียร
}
else {
// หากค่ามากกว่าหรือเท่ากับ 200 (มีแสงสว่างเพียงพอ) ให้ปิด LED
digitalWrite(13, LOW);
delay(500);
}
}
อธิบายการทำงานอย่างละเอียด:
analogRead(A0): ฟังก์ชันนี้จะสั่งให้ ADC เริ่มทำงานเพื่อเปลี่ยนระดับแรงดันไฟฟ้าที่ขา A0 ให้เป็นตัวเลข 0-1023- Threshold (จุดตัด): ในที่นี้เรากำหนดไว้ที่
200หากสภาพแวดล้อมมืดลง ค่าความต้านทานของ LDR จะเปลี่ยนไปส่งผลให้แรงดันไฟฟ้าที่ขา A0 ต่ำลงจนน้อยกว่าค่าที่เราตั้งไว้ - Control Logic: เมื่อเงื่อนไข
sensor1Value < 200เป็นจริง (True) โปรแกรมจะเข้าไปทำงานในบล็อกifเพื่อสั่งdigitalWrite(13, HIGH)ทำให้ LED ติดสว่างขึ้นมาทันที เปรียบเสมือนระบบไฟถนนอัตโนมัตินั่นเอง
บทสรุป
การใช้งานเซนเซอร์กับ Arduino ไม่ใช่เรื่องยากอย่างที่คิด หลักการสำคัญคือการเข้าใจว่าเซนเซอร์ชนิดนั้นให้เอาต์พุตเป็นสัญญาณประเภทใด (Analog หรือ Digital) และการเลือกใช้ฟังก์ชันในโค้ดให้สอดคล้องกัน
เพียงแค่คุณเข้าใจพื้นฐานการอ่านค่าและการใช้เงื่อนไข (If-Else) คุณก็สามารถประยุกต์ใช้เซนเซอร์รูปแบบอื่นๆ เช่น เซนเซอร์วัดอุณหภูมิหรือเซนเซอร์วัดระยะทาง เพื่อสร้างสรรค์นวัตกรรมใหม่ๆ ได้อย่างไม่รู้จบครับ!