ปรึกษา IoT
Internet of Things 4123412 • Chapter 04

บทที่ 4 Arduino เซ็นเซอร์

เรียนรู้การใช้งาน Arduino ร่วมกับเซ็นเซอร์ตรวจจับแสง LDR และเซ็นเซอร์วัดอุณหภูมิ/ความชื้น DHT11 และ DHT22 พร้อมวิธีต่อวงจร ตัวอย่างโปรแกรม และภาพประกอบที่ช่วยให้เข้าใจการทำงานได้ง่ายขึ้น

LDR DHT11 / DHT22 LED Breadboard analogRead Wokwi

สาระสำคัญจากสไลด์

  • รู้จักอุปกรณ์พื้นฐานสำหรับงานเซ็นเซอร์
  • โปรแกรมเปิด-ปิด LED ด้วยเซ็นเซอร์แสง LDR
  • โปรแกรมวัดอุณหภูมิและความชื้นด้วย DHT22
  • วิธีต่อวงจร ติดตั้ง Library และทดลองด้วย Wokwi
อ้างอิงสไลด์บทที่ 4
เซ็นเซอร์แสง LDR
DHT11 / DHT22
มีภาพประกอบการอธิบาย

ภาพรวมบทเรียน

บทที่ 4 Arduino เซ็นเซอร์ เน้นการประยุกต์ใช้ Arduino ร่วมกับเซ็นเซอร์ที่ใช้บ่อยในงาน IoT ได้แก่ เซ็นเซอร์ตรวจจับแสง LDR และเซ็นเซอร์วัดอุณหภูมิ/ความชื้น DHT11 และ DHT22 ซึ่งเป็นพื้นฐานสำคัญสำหรับโครงงาน Smart Farm, Smart Home และระบบเก็บข้อมูลสภาพแวดล้อม

จากสไลด์ เนื้อหาหลักแบ่งออกเป็น 3 ช่วงสำคัญ คือ (1) การแนะนำอุปกรณ์พื้นฐานสำหรับงานเซ็นเซอร์ (2) โปรแกรมเปิด-ปิดหลอด LED ด้วยเซ็นเซอร์ตรวจจับแสง และ (3) โปรแกรมเซ็นเซอร์วัดอุณหภูมิและความชื้นด้วย DHT22

Learning Objectives

หลังเรียนบทนี้ ผู้เรียนควรสามารถต่อวงจร อ่านค่าจากเซ็นเซอร์ และเขียนโปรแกรม Arduino เพื่อประยุกต์ใช้กับงาน IoT ได้

อธิบายหน้าที่ของ Arduino UNO R3, LED, Resistor, Breadboard, LDR และ DHT22 ได้
อ่านค่าแสงจาก LDR ด้วยคำสั่ง analogRead() และใช้ควบคุม LED ได้
เปรียบเทียบคุณสมบัติของ DHT11 และ DHT22 ได้
เขียนโปรแกรมวัดอุณหภูมิและความชื้นด้วย DHT22 พร้อมแสดงผลทาง Serial Monitor ได้

ภาพรวมระบบเซ็นเซอร์ในบทนี้

LDR / DHT22 วัดแสง / วัดอุณหภูมิ Arduino UNO ประมวลผล / ตัดสินใจ LED / Output เปิด-ปิดตามเงื่อนไข Serial แสดงผลค่า Sensor → อ่านค่า → ประมวลผล → สั่งงานและแสดงผล

4.1 อุปกรณ์พื้นฐานเซ็นเซอร์ ตรวจจับแสง อุณหภูมิ และความชื้น

สไลด์เริ่มจากการทบทวนอุปกรณ์พื้นฐานที่ใช้ต่อวงจร Arduino เพื่ออ่านค่าเซ็นเซอร์และแสดงผล ได้แก่ Arduino UNO R3, หลอด LED, ตัวต้านทาน, บอร์ดทดลอง, เซ็นเซอร์แสง LDR และเซ็นเซอร์อุณหภูมิ/ความชื้น DHT22

4.1.1 Arduino UNO R3

บอร์ดไมโครคอนโทรลเลอร์หลักที่ใช้รับข้อมูลจากเซ็นเซอร์และส่งสัญญาณควบคุมอุปกรณ์ต่าง ๆ

4.1.2 LED

ใช้อธิบายการแสดงผลแบบพื้นฐาน เช่น ให้ไฟติดเมื่อแสงน้อยหรือใช้เป็นสถานะแจ้งเตือน

4.1.3 ตัวต้านทาน

ใช้จำกัดกระแสไฟฟ้าและสร้างวงจรแบ่งแรงดันร่วมกับเซ็นเซอร์ เช่น LDR หรือ DHT22

4.1.4 Breadboard

ช่วยทดลองวงจรโดยไม่ต้องบัดกรี สะดวกสำหรับงานฝึกปฏิบัติและสร้างต้นแบบ

4.1.5 LDR

ตัวต้านทานไวแสงที่ค่าความต้านทานเปลี่ยนไปตามระดับความสว่างของแสง

4.1.6 DHT22

เซ็นเซอร์วัดอุณหภูมิและความชื้นที่มีความแม่นยำดีกว่า DHT11 และใช้งานแพร่หลาย

4.1.5 เซ็นเซอร์ตรวจจับแสง LDR

LDR หรือ Light Dependent Resistor เป็นตัวต้านทานที่ค่าความต้านทานเปลี่ยนไปตามระดับความเข้มแสง เมื่อมีแสงมากค่าความต้านทานจะลดลง และเมื่อแสงน้อยค่าความต้านทานจะเพิ่มขึ้น จึงนิยมใช้ในโครงงานตรวจจับสภาพสว่าง เช่น โคมไฟอัตโนมัติ ระบบเปิดไฟเมื่อมืด หรือระบบวัดสภาพแสงในโรงเรือน

ใช้อ่านค่าแสง ทำงานร่วมกับวงจรแบ่งแรงดัน อ่านค่าผ่าน Analog Pin

ภาพประกอบ: หลักการทำงานของ LDR

แสง LDR แสงมาก → ค่าความต้านทานลดลง แสงน้อย → ค่าความต้านทานสูงขึ้น ตัวอย่างการใช้งาน • ระบบเปิดไฟอัตโนมัติเมื่อมืด • วัดความสว่างในโรงเรือน • ตรวจจับกลางวัน / กลางคืน

4.1.6 เซ็นเซอร์วัดอุณหภูมิ และความชื้น DHT22

DHT22 เป็นเซ็นเซอร์ที่ใช้วัดทั้งอุณหภูมิและความชื้นสัมพัทธ์ มีช่วงการวัดกว้างกว่าและแม่นยำกว่า DHT11 ตามสไลด์ระบุว่า DHT22 วัดอุณหภูมิได้ประมาณ -40°C ถึง 80°C และวัดความชื้นได้ประมาณ 0% ถึง 100% RH จึงเหมาะสำหรับงานที่ต้องการความละเอียดมากขึ้น เช่น ระบบติดตามสภาพแวดล้อมในห้อง ปลูกพืช หรือระบบบันทึกข้อมูลวิจัย

ภาพประกอบ: โครงสร้างการใช้งาน DHT22

DHT22 NC DATA VCC GND คุณสมบัติเด่นของ DHT22 • วัดอุณหภูมิได้กว้าง: -40°C ถึง 80°C • วัดความชื้นได้: 0% ถึง 100% RH • ความละเอียดดี เหมาะกับงานเก็บข้อมูลจริง • ใช้แรงดันไฟประมาณ 3.3V–6V

เปรียบเทียบความแตกต่างของ DHT11 และ DHT22

สไลด์ได้เปรียบเทียบ DHT11 และ DHT22 เพื่อให้ผู้เรียนเลือกใช้งานได้เหมาะสม โดย DHT11 เหมาะกับงานเบื้องต้นที่ไม่ต้องการความละเอียดมาก ส่วน DHT22 เหมาะกับงาน IoT และงานวิจัยที่ต้องการช่วงการวัดกว้างและแม่นยำกว่า

คุณสมบัติ DHT11 DHT22
ช่วงวัดอุณหภูมิ0°C ถึง 50°C-40°C ถึง 80°C
ช่วงวัดความชื้น20% ถึง 80% RH0% ถึง 100% RH
ความละเอียดอุณหภูมิ1°C0.1°C
ความละเอียดความชื้น1% RH0.1% RH
ความแม่นยำโดยประมาณ±2°C, ±5% RH±0.5°C, ±2% RH
แรงดันไฟ3.5V ถึง 5.5V3.3V ถึง 6V
ลักษณะการส่งข้อมูลดิจิทัลแบบ Single-busดิจิทัลแบบ Single-bus

4.2 โปรแกรม เปิด-ปิด หลอด LED ด้วยเซ็นเซอร์ตรวจจับแสง

หัวข้อนี้ใช้ LDR ในการตรวจจับความสว่าง แล้วนำค่าที่อ่านได้มาใช้ตัดสินใจเปิดหรือปิดหลอด LED โดยใช้คำสั่ง analogRead() อ่านค่าจากขา Analog ซึ่ง Arduino จะอ่านค่าได้อยู่ในช่วง 0 ถึง 1023

หลักการ: ถ้าแสงน้อย (ค่า LDR ต่ำกว่าค่าที่กำหนด) ให้เปิด LED แต่ถ้าแสงมากให้ปิด LED

4.2.1 อุปกรณ์ที่ต้องใช้

  • Arduino UNO R3 พร้อมสาย USB
  • เซ็นเซอร์ตรวจจับแสง LDR
  • LED ขนาด 5mm จำนวน 1 ดวง
  • บอร์ดทดลอง Breadboard
  • Resistor 330Ω สำหรับ LED และ Resistor 10kΩ สำหรับวงจร LDR
  • สายไฟ Jumper ผู้-ผู้

4.2.2 วิธีการต่อวงจร

จากสไลด์ แนะนำให้ต่อ LED ที่ขา Digital และต่อ LDR เข้ากับขา Analog ผ่านวงจรแบ่งแรงดัน เพื่อให้ Arduino อ่านระดับแสงได้เป็นค่า Analog

ภาพประกอบการต่อวงจร LDR ควบคุม LED

Arduino UNO 5V GND A5 D3 LDR 10kΩ LED + 330Ω

4.2.3 ตัวอย่างโปรแกรม LDR

ตัวอย่างโค้ดด้านล่างสอดคล้องกับแนวคิดในสไลด์ คืออ่านค่าแสงจากขา Analog แล้วนำมาใช้ตัดสินใจเปิด-ปิดหลอด LED

int ledPin = 3;
int analogPin = A5;   // ขาที่อ่านค่าสัญญาณจาก LDR
int val = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  val = analogRead(analogPin);   // อ่านค่าจาก LDR
  Serial.print("val = ");
  Serial.println(val);

  if (val < 100) {               // ถ้าแสงน้อย
    digitalWrite(ledPin, HIGH);  // เปิด LED
  } else {
    digitalWrite(ledPin, LOW);   // ปิด LED
  }

  delay(100);
}

อธิบายโค้ด LDR แบบสั้น ๆ

  • analogRead(A5) ใช้อ่านค่าจากวงจร LDR ในช่วง 0–1023
  • ถ้าค่าน้อยกว่าค่าที่กำหนด แสดงว่าแสงน้อย จึงสั่งให้ LED ติด
  • ค่าที่กำหนด เช่น 100 สามารถปรับเพิ่มหรือลดได้ตามสภาพแสงจริง

ภาพประกอบ: การทดลองด้วย Wokwi สำหรับ LDR

Code Editor int ledPin = 3; int analogPin = A5; val = analogRead(analogPin); if (val < 100) digitalWrite(ledPin, HIGH); Simulation Arduino UNO LED 3467 lux

4.3 โปรแกรม เซ็นเซอร์วัดอุณหภูมิ และความชื้น

ช่วงท้ายของสไลด์เป็นการนำ Arduino มาใช้งานร่วมกับ DHT22 เพื่ออ่านค่าอุณหภูมิและความชื้น แล้วแสดงผลทาง Serial Monitor เหมาะสำหรับงานเก็บข้อมูลสภาพแวดล้อมเบื้องต้น

4.3.1 อุปกรณ์ที่ต้องใช้

  • Arduino UNO R3 พร้อมสาย USB
  • เซ็นเซอร์วัดอุณหภูมิและความชื้น DHT22
  • Breadboard
  • Resistor 4.7kΩ หรือ 10kΩ สำหรับ Pull-up
  • สายไฟ Jumper ผู้-ผู้

4.3.2 การติดตั้ง Libraries

ในสไลด์มีการกล่าวถึงการติดตั้งไลบรารีสำหรับ DHT ก่อนใช้งานโค้ดจริง ปัจจุบันแนะนำให้ติดตั้งผ่าน Arduino IDE → Library Manager เพื่อให้ง่ายและสะดวกกว่า โดยค้นหาและติดตั้งอย่างน้อย 2 ตัว ได้แก่

  • DHT sensor library (ของ Adafruit)
  • Adafruit Unified Sensor
หากขึ้น Error: DHT.h: No such file or directory แสดงว่ายังไม่ได้ติดตั้งไลบรารี หรือยังเลือกไลบรารีไม่ถูกต้อง ให้กลับไปติดตั้งจาก Library Manager ก่อน

4.3.3 วิธีการต่อวงจร DHT22

ตามแนวทางในสไลด์ สามารถต่อ DHT22 เข้ากับ Arduino โดยใช้ ขา 2 เป็นขาสัญญาณข้อมูล (DATA), ต่อ VCC เข้ากับ 5V และต่อ GND เข้ากับ GND พร้อมเพิ่มตัวต้านทาน Pull-up ระหว่าง VCC และ DATA

ภาพประกอบการต่อวงจร DHT22 กับ Arduino

Arduino UNO 5V GND D2 DHT22 NC DATA VCC GND 4.7kΩ Pull-up

4.3.4 โปรแกรม (Code)

ตัวอย่างโค้ดด้านล่างสรุปแนวคิดจากสไลด์สำหรับการอ่านค่าอุณหภูมิและความชื้นด้วย DHT22 ผ่านไลบรารี DHT

#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("Status\tHumidity (%)\tTemperature (C)");
  dht.begin();
}

void loop() {
  delay(2000);

  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  Serial.print("OK\t");
  Serial.print(humidity);
  Serial.print("\t\t");
  Serial.println(temperature);
}

อธิบายโค้ด DHT22 แบบสั้น ๆ

  • #include "DHT.h" ใช้เรียกไลบรารีสำหรับเซ็นเซอร์ DHT
  • DHTPIN 2 ระบุว่า DATA ของเซ็นเซอร์ต่อเข้าที่ขา 2
  • dht.readHumidity() ใช้อ่านค่าความชื้น
  • dht.readTemperature() ใช้อ่านค่าอุณหภูมิหน่วยองศาเซลเซียส
  • ใช้ Serial.print() เพื่อส่งค่าที่อ่านได้ไปแสดงใน Serial Monitor

ภาพประกอบ: การจำลอง DHT22 ด้วย Wokwi

Code Editor #include "DHT.h" #define DHTPIN 2 float h = dht.readHumidity(); float t = dht.readTemperature(); Simulation Arduino UNO DHT22 Humidity: 40% • Temp: 24°C

ต้องการพัฒนาระบบ Sensor IoT ใช้งานจริง?

Siam2Dev ช่วยออกแบบระบบอ่านค่าจากเซ็นเซอร์ LDR, DHT22, Soil Moisture, pH, Water Level พร้อม Data Logger, Dashboard และระบบแจ้งเตือนสำหรับ Smart Farm และงานวิจัย

สรุปบทเรียน

บทที่ 4 ทำให้ผู้เรียนเข้าใจการประยุกต์ใช้ Arduino กับเซ็นเซอร์สองกลุ่มสำคัญ คือ LDR สำหรับวัดแสง และ DHT22 สำหรับวัดอุณหภูมิ/ความชื้น ผู้เรียนจะได้ฝึกต่อวงจร อ่านค่าเซ็นเซอร์ แปลผล และสั่งงานอุปกรณ์เบื้องต้น ซึ่งเป็นรากฐานสำคัญของการสร้างระบบ IoT จริง

แบบฝึกหัดท้ายบท

  1. อธิบายหลักการทำงานของ LDR และยกตัวอย่างการใช้งาน 2 กรณี
  2. ทำไมการต่อวงจร LDR จึงต้องใช้ตัวต้านทานร่วมกันในลักษณะวงจรแบ่งแรงดัน
  3. เขียนโปรแกรมให้ LED ติดเมื่อค่าที่อ่านจาก LDR ต่ำกว่า 200
  4. เปรียบเทียบ DHT11 และ DHT22 ในด้านช่วงการวัดและความแม่นยำ
  5. อธิบายหน้าที่ของ Library DHT sensor library และ Adafruit Unified Sensor
  6. วาดแผนภาพการต่อวงจร DHT22 กับ Arduino และระบุขาสำคัญให้ถูกต้อง
  7. เขียนโปรแกรมอ่านค่าอุณหภูมิและความชื้นจาก DHT22 และแสดงผลผ่าน Serial Monitor
  8. อธิบายสาเหตุที่อาจทำให้เกิด Error DHT.h: No such file or directory

คำถามที่พบบ่อยเกี่ยวกับบทที่ 4

โดยหลักการ LDR ให้ค่าความต้านทานที่เปลี่ยนแปลงต่อเนื่อง จึงเหมาะกับการอ่านแบบ Analog ผ่านวงจรแบ่งแรงดัน แต่ถ้าใช้โมดูล LDR บางรุ่นที่มี Comparator ในตัว ก็อาจใช้เป็นสัญญาณ Digital ได้เช่นกัน

ถ้าเป็นงานทดลองเบื้องต้น DHT11 ก็เพียงพอ แต่ถ้าต้องการช่วงวัดกว้างขึ้นและแม่นยำกว่า โดยเฉพาะงาน IoT จริงหรือการเก็บข้อมูลวิจัย ควรเลือก DHT22

ให้ตรวจสอบการต่อสาย VCC, GND และ DATA, ตรวจสอบขาในโปรแกรมว่าใช้ตรงกับวงจรจริงหรือไม่, เช็กการติดตั้ง Library และตรวจสอบว่าตัวต้านทาน Pull-up ถูกติดตั้งถูกต้องในกรณี DHT22

Wokwi ช่วยจำลองการต่อวงจรและทดลองโค้ดได้โดยไม่ต้องใช้อุปกรณ์จริงทันที ทำให้ผู้เรียนฝึกแนวคิด ทดสอบเงื่อนไข และแก้ปัญหาโค้ดได้สะดวกก่อนลงมือกับอุปกรณ์จริง
อ่านต่อ

ต่อยอดจากบทที่ 4

หลังอ่านค่าเซ็นเซอร์ได้แล้ว สามารถต่อยอดสู่ Data Logger, Dashboard และระบบแจ้งเตือนแบบ Real-time ได้