ภาพรวมบทเรียน
บทที่ 4 Arduino เซ็นเซอร์ เน้นการประยุกต์ใช้ Arduino ร่วมกับเซ็นเซอร์ที่ใช้บ่อยในงาน IoT ได้แก่ เซ็นเซอร์ตรวจจับแสง LDR และเซ็นเซอร์วัดอุณหภูมิ/ความชื้น DHT11 และ DHT22 ซึ่งเป็นพื้นฐานสำคัญสำหรับโครงงาน Smart Farm, Smart Home และระบบเก็บข้อมูลสภาพแวดล้อม
จากสไลด์ เนื้อหาหลักแบ่งออกเป็น 3 ช่วงสำคัญ คือ (1) การแนะนำอุปกรณ์พื้นฐานสำหรับงานเซ็นเซอร์ (2) โปรแกรมเปิด-ปิดหลอด LED ด้วยเซ็นเซอร์ตรวจจับแสง และ (3) โปรแกรมเซ็นเซอร์วัดอุณหภูมิและความชื้นด้วย DHT22
Learning Objectives
หลังเรียนบทนี้ ผู้เรียนควรสามารถต่อวงจร อ่านค่าจากเซ็นเซอร์ และเขียนโปรแกรม Arduino เพื่อประยุกต์ใช้กับงาน IoT ได้
analogRead() และใช้ควบคุม LED ได้ภาพรวมระบบเซ็นเซอร์ในบทนี้
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 เป็นตัวต้านทานที่ค่าความต้านทานเปลี่ยนไปตามระดับความเข้มแสง เมื่อมีแสงมากค่าความต้านทานจะลดลง และเมื่อแสงน้อยค่าความต้านทานจะเพิ่มขึ้น จึงนิยมใช้ในโครงงานตรวจจับสภาพสว่าง เช่น โคมไฟอัตโนมัติ ระบบเปิดไฟเมื่อมืด หรือระบบวัดสภาพแสงในโรงเรือน
ภาพประกอบ: หลักการทำงานของ LDR
4.1.6 เซ็นเซอร์วัดอุณหภูมิ และความชื้น DHT22
DHT22 เป็นเซ็นเซอร์ที่ใช้วัดทั้งอุณหภูมิและความชื้นสัมพัทธ์ มีช่วงการวัดกว้างกว่าและแม่นยำกว่า DHT11 ตามสไลด์ระบุว่า DHT22 วัดอุณหภูมิได้ประมาณ -40°C ถึง 80°C และวัดความชื้นได้ประมาณ 0% ถึง 100% RH จึงเหมาะสำหรับงานที่ต้องการความละเอียดมากขึ้น เช่น ระบบติดตามสภาพแวดล้อมในห้อง ปลูกพืช หรือระบบบันทึกข้อมูลวิจัย
ภาพประกอบ: โครงสร้างการใช้งาน DHT22
เปรียบเทียบความแตกต่างของ DHT11 และ DHT22
สไลด์ได้เปรียบเทียบ DHT11 และ DHT22 เพื่อให้ผู้เรียนเลือกใช้งานได้เหมาะสม โดย DHT11 เหมาะกับงานเบื้องต้นที่ไม่ต้องการความละเอียดมาก ส่วน DHT22 เหมาะกับงาน IoT และงานวิจัยที่ต้องการช่วงการวัดกว้างและแม่นยำกว่า
| คุณสมบัติ | DHT11 | DHT22 |
|---|---|---|
| ช่วงวัดอุณหภูมิ | 0°C ถึง 50°C | -40°C ถึง 80°C |
| ช่วงวัดความชื้น | 20% ถึง 80% RH | 0% ถึง 100% RH |
| ความละเอียดอุณหภูมิ | 1°C | 0.1°C |
| ความละเอียดความชื้น | 1% RH | 0.1% RH |
| ความแม่นยำโดยประมาณ | ±2°C, ±5% RH | ±0.5°C, ±2% RH |
| แรงดันไฟ | 3.5V ถึง 5.5V | 3.3V ถึง 6V |
| ลักษณะการส่งข้อมูล | ดิจิทัลแบบ Single-bus | ดิจิทัลแบบ Single-bus |
4.2 โปรแกรม เปิด-ปิด หลอด LED ด้วยเซ็นเซอร์ตรวจจับแสง
หัวข้อนี้ใช้ LDR ในการตรวจจับความสว่าง แล้วนำค่าที่อ่านได้มาใช้ตัดสินใจเปิดหรือปิดหลอด LED โดยใช้คำสั่ง analogRead() อ่านค่าจากขา Analog ซึ่ง Arduino จะอ่านค่าได้อยู่ในช่วง 0 ถึง 1023
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
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
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
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
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"ใช้เรียกไลบรารีสำหรับเซ็นเซอร์ DHTDHTPIN 2ระบุว่า DATA ของเซ็นเซอร์ต่อเข้าที่ขา 2dht.readHumidity()ใช้อ่านค่าความชื้นdht.readTemperature()ใช้อ่านค่าอุณหภูมิหน่วยองศาเซลเซียส- ใช้
Serial.print()เพื่อส่งค่าที่อ่านได้ไปแสดงใน Serial Monitor
ภาพประกอบ: การจำลอง DHT22 ด้วย Wokwi
ต้องการพัฒนาระบบ Sensor IoT ใช้งานจริง?
Siam2Dev ช่วยออกแบบระบบอ่านค่าจากเซ็นเซอร์ LDR, DHT22, Soil Moisture, pH, Water Level พร้อม Data Logger, Dashboard และระบบแจ้งเตือนสำหรับ Smart Farm และงานวิจัย
สรุปบทเรียน
บทที่ 4 ทำให้ผู้เรียนเข้าใจการประยุกต์ใช้ Arduino กับเซ็นเซอร์สองกลุ่มสำคัญ คือ LDR สำหรับวัดแสง และ DHT22 สำหรับวัดอุณหภูมิ/ความชื้น ผู้เรียนจะได้ฝึกต่อวงจร อ่านค่าเซ็นเซอร์ แปลผล และสั่งงานอุปกรณ์เบื้องต้น ซึ่งเป็นรากฐานสำคัญของการสร้างระบบ IoT จริง
แบบฝึกหัดท้ายบท
- อธิบายหลักการทำงานของ LDR และยกตัวอย่างการใช้งาน 2 กรณี
- ทำไมการต่อวงจร LDR จึงต้องใช้ตัวต้านทานร่วมกันในลักษณะวงจรแบ่งแรงดัน
- เขียนโปรแกรมให้ LED ติดเมื่อค่าที่อ่านจาก LDR ต่ำกว่า 200
- เปรียบเทียบ DHT11 และ DHT22 ในด้านช่วงการวัดและความแม่นยำ
- อธิบายหน้าที่ของ Library
DHT sensor libraryและAdafruit Unified Sensor - วาดแผนภาพการต่อวงจร DHT22 กับ Arduino และระบุขาสำคัญให้ถูกต้อง
- เขียนโปรแกรมอ่านค่าอุณหภูมิและความชื้นจาก DHT22 และแสดงผลผ่าน Serial Monitor
- อธิบายสาเหตุที่อาจทำให้เกิด Error
DHT.h: No such file or directory