กลับไปหน้ารวมไฟล์
using-sensors-with-arduino-0ddc29.md

ในโลกของวิศวกรรมฝังตัว (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 รับเข้ามาเสียก่อน:

  1. Digital Signals (สัญญาณดิจิทัล): มีสถานะเพียง 2 ระดับ คือ "HIGH" (1) และ "LOW" (0) หรือเทียบเท่ากับ เปิด และ ปิด เหมาะสำหรับเซนเซอร์ที่มีเงื่อนไขชัดเจน เช่น สวิตช์ปุ่มกด หรือเซนเซอร์ตรวจจับวัตถุแบบอินฟราเรด
  2. Analog Signals (สัญญาณอนาล็อก): เป็นสัญญาณที่มีความต่อเนื่อง (Continuous) สำหรับ Arduino Uno นั้นมีวงจร ADC (Analog-to-Digital Converter) ขนาด 10 บิต ซึ่งจะทำการสุ่มวัดแรงดันไฟฟ้าในช่วง 0-5V แล้วแปลงเป็นตัวเลขในช่วง 0 ถึง 1023 (ไม่ใช่ 0-255 ซึ่งเป็นค่าของ PWM ขาออก)

การเชื่อมต่อวงจร (Hardware Interfacing)

เพื่อให้ระบบของเราสมบูรณ์ เราจะทำการต่อ LDR เข้ากับช่องทางรับสัญญาณอนาล็อก และใช้ LED เป็นตัวแสดงผลการทำงาน

  1. LDR กับ Arduino: ต่อ LDR เข้ากับพิน A0 (Analog Input) โดยใช้ร่วมกับตัวต้านทานเพื่อสร้างวงจรแบ่งแรงดัน
  2. 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);
  }
}

อธิบายการทำงานอย่างละเอียด:

  1. analogRead(A0): ฟังก์ชันนี้จะสั่งให้ ADC เริ่มทำงานเพื่อเปลี่ยนระดับแรงดันไฟฟ้าที่ขา A0 ให้เป็นตัวเลข 0-1023
  2. Threshold (จุดตัด): ในที่นี้เรากำหนดไว้ที่ 200 หากสภาพแวดล้อมมืดลง ค่าความต้านทานของ LDR จะเปลี่ยนไปส่งผลให้แรงดันไฟฟ้าที่ขา A0 ต่ำลงจนน้อยกว่าค่าที่เราตั้งไว้
  3. Control Logic: เมื่อเงื่อนไข sensor1Value < 200 เป็นจริง (True) โปรแกรมจะเข้าไปทำงานในบล็อก if เพื่อสั่ง digitalWrite(13, HIGH) ทำให้ LED ติดสว่างขึ้นมาทันที เปรียบเสมือนระบบไฟถนนอัตโนมัตินั่นเอง

บทสรุป

การใช้งานเซนเซอร์กับ Arduino ไม่ใช่เรื่องยากอย่างที่คิด หลักการสำคัญคือการเข้าใจว่าเซนเซอร์ชนิดนั้นให้เอาต์พุตเป็นสัญญาณประเภทใด (Analog หรือ Digital) และการเลือกใช้ฟังก์ชันในโค้ดให้สอดคล้องกัน

เพียงแค่คุณเข้าใจพื้นฐานการอ่านค่าและการใช้เงื่อนไข (If-Else) คุณก็สามารถประยุกต์ใช้เซนเซอร์รูปแบบอื่นๆ เช่น เซนเซอร์วัดอุณหภูมิหรือเซนเซอร์วัดระยะทาง เพื่อสร้างสรรค์นวัตกรรมใหม่ๆ ได้อย่างไม่รู้จบครับ!

ข้อมูล Frontmatter ดั้งเดิม

title: "Using Sensors with Arduino"
description: "This is a tutorial on how to use sensors with Arduino."
author: "JANAK13"
category: ""
tags:
  - "simple projects"
  - "ldr"
  - "iot"
  - "sensor"
  - "arduino sensor"
  - "smart"
  - "sensors"
  - "arduino uno"
views: 29387
likes: 4
price: 1499
difficulty: "Easy"
components:
  - "1x Light Detecting Resistor"
  - "1x Breadboard (generic)"
  - "1x Arduino UNO"
  - "1x LED (generic)"
  - "1x Jumper wires (generic)"
  - "1x Resistor 10k ohm"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/219b9b62-2dc8-4247-8e2e-88aaf51e6de0.ino"
documentationLinks: []
passwordHash: "e6b97475e08c9de0047ac2b1c5c5face4e0d421e0e5501dcf7cdc9a055247379"
encryptedPayload: "U2FsdGVkX19cv/UeIvl8gMpEoo6ct3rBQ4bOGApA/U4kr75hd3yXttO+2oL5zwEjqsKMtgIVHFlM1R/qXUyp6ldN31DDqNbYkZelWLImQek="
seoDescription: "Step-by-step tutorial on interfacing various Sensors with Arduino. Learn wiring and coding for your projects."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/using-sensors-with-arduino-0ddc29_cover.jpg"
lang: "en"