การใช้งานเซนเซอร์วัดอุณหภูมิ DS18B20 ร่วมกับ Arduino
บทความนี้จะสอนวิธีการใช้งานเซนเซอร์วัดอุณหภูมิ DS18B20 ร่วมกับบอร์ด Arduino โดยคุณจะได้เรียนรู้ตั้งแต่การต่อวงจร การติดตั้งไลบรารีที่จำเป็น ไปจนถึงการเขียนโค้ดเพื่ออ่านค่าอุณหภูมิจากเซนเซอร์ตัวเดียวหรือหลายตัวพร้อมกัน
รู้จักกับเซนเซอร์ DS18B20
DS18B20 เป็นเซนเซอร์วัดอุณหภูมิแบบดิจิทัลที่สื่อสารผ่านระบบ One-Wire ซึ่งหมายความว่าใช้สายสัญญาณเพียงเส้นเดียว (และสายกราวด์) ในการสื่อสารกับ Arduino เซนเซอร์นี้สามารถรับไฟเลี้ยงได้จากสายสัญญาณโดยตรง (เรียกว่า “Parasite Mode”) ทำให้ไม่จำเป็นต้องใช้สายไฟแยกต่างหากในบางกรณี
คุณสมบัติเด่น:
- การสื่อสาร: ระบบ One-wire bus
- ช่วงแรงดันไฟเลี้ยง: 3.0V ถึง 5.5V
- ช่วงการวัดอุณหภูมิ: -55 ºC ถึง +125 ºC
- ความแม่นยำ: +/-0.5 ºC (ในช่วง -10 ºC ถึง 85 ºC)
- มีเวอร์ชัน กันน้ำ (Waterproof) สำหรับวัดอุณหภูมิของเหลว
🛠 อุปกรณ์ที่ต้องใช้
- บอร์ด Arduino UNO
- เซนเซอร์ DS18B20 (แบบธรรมดาหรือแบบกันน้ำ)
- ตัวต้านทาน (Resistor) ขนาด 4.7k Ohm
- Breadboard
- สายจัมเปอร์
🔌 แผนผังการต่อวงจร (Schematic)
เซนเซอร์ DS18B20 สามารถต่อใช้งานได้ 2 โหมดหลัก ดังนี้:
- Normal Mode (แนะนำ): ต่อสาย 3 เส้น (VCC, GND, Data) โดยต่อ VCC เข้ากับ 5V
- Parasite Mode: ต่อสายเพียง 2 เส้น (GND, Data) โดยเซนเซอร์จะดึงไฟจากสาย Data

สำคัญ: ต้องต่อตัวต้านทาน Pull-up ขนาด 4.7k Ohm ระหว่างสายสัญญาณ (Data) และไฟเลี้ยง (VCC) เสมอเพื่อให้สัญญาณดิจิทัลทำงานได้ถูกต้อง
📚 การติดตั้งไลบรารี
ก่อนเริ่มเขียนโค้ด ให้ติดตั้งไลบรารี 2 ตัวผ่าน Arduino IDE (Manage Libraries):
- ค้นหาและติดตั้ง OneWire (โดย Paul Stoffregen)
- ค้นหาและติดตั้ง DallasTemperature (โดย Miles Burton)
💻 โค้ดสำหรับเซนเซอร์ตัวเดียว (Single DS18B20)
โค้ดนี้จะอ่านค่าอุณหภูมิและแสดงผลผ่าน Serial Monitor ทุกๆ 1 วินาที:
#include <OneWire.h>
#include <DallasTemperature.h>
// สายสัญญาณต่อกับขา Digital Pin 4
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void) {
Serial.begin(9600);
sensors.begin(); // เริ่มต้นการทำงานของเซนเซอร์
}
void loop(void) {
sensors.requestTemperatures(); // ส่งคำสั่งขออ่านค่าอุณหภูมิ
Serial.print("อุณหภูมิเซลเซียส: ");
Serial.print(sensors.getTempCByIndex(0));
Serial.print(" - อุณหภูมิฟาเรนไฮต์: ");
Serial.println(sensors.getTempFByIndex(0));
delay(1000);
}
🔗 การใช้เซนเซอร์หลายตัวพร้อมกัน
เนื่องจากแต่ละเซนเซอร์มีรหัส 64-bit ประจำตัวที่ไม่ซ้ำกัน เราจึงสามารถต่อเซนเซอร์หลายตัวเข้ากับ ขาเดียวของ Arduino ได้โดยการต่อสาย Data ขนานกันทั้งหมด

// ตัวอย่างส่วนหนึ่งของโค้ดสำหรับหลายเซนเซอร์
numberOfDevices = sensors.getDeviceCount(); // ตรวจสอบจำนวนเซนเซอร์ที่ต่ออยู่
for(int i=0; i < numberOfDevices; i++) {
float tempC = sensors.getTempCByIndex(i);
Serial.print("Device index ");
Serial.print(i);
Serial.print(": ");
Serial.println(tempC);
}
✨ บทสรุป
เซนเซอร์ DS18B20 เป็นทางเลือกที่ยอดเยี่ยมสำหรับโปรเจกต์ที่ต้องการความแม่นยำสูงและการเดินสายที่ง่าย โดยเฉพาะงานที่ต้องวัดอุณหภูมิหลายจุดพร้อมกันหรืองานวัดอุณหภูมิของเหลว คุณสามารถนำข้อมูลนี้ไปประยุกต์ต่อยอดร่วมกับหน้าจอ OLED หรือส่งข้อมูลผ่าน Wi-Fi ในโปรเจกต์ Smart Home ได้อย่างง่ายดาย!