Posted in

การใช้งานเซนเซอร์วัดอุณหภูมิ DS18B20 ร่วมกับ Arduino

การใช้งานเซนเซอร์วัดอุณหภูมิ 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 โหมดหลัก ดังนี้:

  1. Normal Mode (แนะนำ): ต่อสาย 3 เส้น (VCC, GND, Data) โดยต่อ VCC เข้ากับ 5V
  2. Parasite Mode: ต่อสายเพียง 2 เส้น (GND, Data) โดยเซนเซอร์จะดึงไฟจากสาย Data

สำคัญ: ต้องต่อตัวต้านทาน Pull-up ขนาด 4.7k Ohm ระหว่างสายสัญญาณ (Data) และไฟเลี้ยง (VCC) เสมอเพื่อให้สัญญาณดิจิทัลทำงานได้ถูกต้อง


📚 การติดตั้งไลบรารี

ก่อนเริ่มเขียนโค้ด ให้ติดตั้งไลบรารี 2 ตัวผ่าน Arduino IDE (Manage Libraries):

  1. ค้นหาและติดตั้ง OneWire (โดย Paul Stoffregen)
  2. ค้นหาและติดตั้ง 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 ได้อย่างง่ายดาย!