ชื่อโปรเจกต์: โปรเจกต์เครื่องคอนโทรลเลอร์ Heat Pump สุดล้ำ (แบบโปรแกรมได้นะน้อง)
งานระดับอุตสาหกรรม: คอนโทรลเลอร์ Heat Pump ถังคู่ แม่นยำจัดๆ
จะคุมระบบ Heat Pump ถังใหญ่ๆ แค่ใช้เทอร์โมสตัทเปิด-ปิดธรรมดามันกระจอกไปน้อง โปรเจกต์นี้เราใช้ Arduino Nano มาจัดระเบียบการทำความร้อนให้ถังน้ำขนาด 1,000 ลิตร (1 ลบ.ม.) ถึง 2 ถัง! แถมยังช่วยเซฟเงินในกระเป๋าด้วยการดึงไฟช่วงค่าไฟถูก (Night-Tariff) มาใช้ พร้อมระบบมอนิเตอร์อุณหภูมิแบบดิจิทัล บอกเลยว่านี่คือการเอา Home Automation มาผสมกับงาน HVAC ระดับโรงงานชัดๆ หล่อเท่เลยงานนี้
ทีเด็ดอยู่ที่ Logic การ "หลอก" เซนเซอร์อุณหภูมิ
หนึ่งในลูกเล่นที่กวนที่สุดของโปรเจกต์นี้คือการคุยกับเครื่อง Heat Pump เดิมๆ ของเรา:
- Resistor Relay Spoofing: แทนที่จะไปรื้อ Firmware ข้างในเครื่องให้ประกันขาด เราใช้ Arduino คุม Relay สลับค่า Resistor สองค่าส่งไปหลอกเครื่องแทน เพื่อบอกมันว่า "เฮ้ย ถังเย็นแล้วนะ (ปั๊มทำงานดิ)" หรือ "ถังร้อนแล้ว (หยุดได้แล้วพี่)" โดยไม่สนว่าอุณหภูมิจริงเป็นไง จัดการได้อยู่หมัด
- Three-Way Valve Control: พอถังแรกได้อุณหภูมิตามเป้า Arduino ก็จะสั่งยิงไฟ 230V AC ไปที่วาล์วสามทาง เพื่อเปลี่ยนทิศทางน้ำร้อนไปลงถังที่สองต่อทันที เรียงคิวกันร้อนไปเลยวัยรุ่น
มอนิเตอร์แบบเป๊ะๆ แถมจัดการ Noise ให้กริบ
ต้มน้ำถังเบ้อเริ่มขนาดนี้ ถ้าข้อมูลไม่แม่นก็เปลืองไฟฟรีนะน้อง พี่เลยจัดให้:
- DS18B20 Digital Thermometers: พี่ไม่ใช้เทอร์มิสเตอร์กากๆ หรอกนะ ตัวนี้ใช้ 1-Wire Protocol ส่งสัญญาณดิจิทัล ไม่กลัวสัญญาณรบกวน (Noise) จากมอเตอร์ Heat Pump หรือ Relay 230V ที่อยู่ข้างๆ แน่นอน
- Seven-Sample Averaging: เพื่อไม่ให้อุณหภูมิมันแกว่งไปมา (Value Jitter) เราสั่ง Arduino อ่านค่ารวดเดียว 7 ครั้งแล้วหาค่าเฉลี่ยซะ ค่าที่โชว์บนหน้าจอ 16x2 LCD เลยนิ่งสนิท ไม่เต้นยับให้รำคาญตา
- Adjustable Offsets: เพราะ Sensor แต่ละตัวมันมีความเพี้ยนมาจากโรงงานนิดหน่อย พี่เลยใส่ตัวแปร "Offset" ไว้ใน Code ให้เราจูนค่าถังทั้งสองให้ตรงกันเป๊ะๆ
ประหยัดไฟด้วย Night-Tariff Sync
เพื่อความคุ้มค่าระดับตัวแม่ เราต่อพ่วงกับ Time Programmer เพื่อเช็คช่วงเวลาค่าไฟถูก (เช่น 22:00-06:00) ถ้าช่วงเวลาทองกำลังจะหมดแต่ถังยังร้อนไม่ได้ที่ Arduino เราก็มี Logic "Grace Period" ให้ทำงานต่อจนจบ Cycle ก่อนจะปิดตัว เพื่อให้มั่นใจว่าเช้ามาน้องจะมีน้ำร้อนไว้ใช้งานแน่นอน สู้งานนะน้อง!
โปรเจกต์นี้ว่าด้วยเรื่องการสร้างคอนโทรลเลอร์คุม Heat Pump สำหรับถังน้ำ 1 ลบ.ม. สองถัง หัวใจหลักคือ [Arduino](https://s.shopee.co.th/7fUgFAWSki) Nano (ATmega328 @ 5V 16 MHz) พร้อมจอ 1602 2x16 [LCD](https://s.shopee.co.th/6AfsSPcAnb) และ HD44780
พี่ไม่อยากยุ่งกับเซนเซอร์เดิมของ Heat Pump เลยใช้ Resistor สองตัวที่เลือกค่ามาอย่างดีสลับผ่าน [Relay](https://s.shopee.co.th/3fyXTmWPbL) เพื่อ "หลอก" มันว่าถังเย็น (เพื่อให้ปั๊มสตาร์ท) หรือถังร้อน (เพื่อให้ปั๊มหยุด) พอน้ำถังสองต้องร้อนบ้าง คอนโทรลเลอร์ก็จะสั่ง Relay ปล่อยไฟ 230V AC ไปที่วาล์วสามทางเพื่อสับน้ำร้อนไปถังที่สองทันที
เราจะต้มน้ำเฉพาะช่วงค่าไฟถูก (Night Tariff) เท่านั้น (13.00-15.00, 22.00-06.00) โดยรับสัญญาณ 230V AC จาก Time Programmer ที่ตั้งเวลาไว้ตรงกับมิเตอร์ไฟ ถ้าช่วงค่าไฟถูกหมดแต่ยังมีถังที่กำลังต้มอยู่ คอนโทรลเลอร์จะปล่อยให้มันต้มจนเสร็จตามอุณหภูมิที่ตั้งไว้
ใช้เซนเซอร์ดิจิทัล DS18B20 ของ Dallas อ่านอุณหภูมิถังน้ำ เพื่อแก้ปัญหาค่าดริฟท์หรือค่าแกว่ง พี่เลยใช้ Logic หาค่าเฉลี่ยจากการอ่าน 7 รอบ แล้วปัดเศษทศนิยมให้เหลือตำแหน่งเดียวพอ
ตัวคอนโทรลเลอร์ตั้งอุณหภูมิเป้าหมาย (Tu) ได้ทีละ 1 องศา (ช่วง 20-60 C) ตั้งค่าความต่างอุณหภูมิ (delta) ได้ตั้งแต่ 0.3-3.0 C และมีค่า offset2 ไว้จูนถังที่สอง (ช่วง -3.0 ถึง 3.0 C) เพื่อแก้ปัญหาเซนเซอร์เพี้ยนให้ทั้งสองถังบาลานซ์กัน
เราเลือกได้ว่าจะต้มถังเดียวหรือต้มทั้งคู่ (1 และ 2) ตามสภาพอากาศข้างนอก หน้าตู้มีสวิตช์เลือกถัง มีปุ่ม SET สำหรับเข้าเมนู และปุ่ม "-" กับ "+" ไว้ปรับค่า มี LED บอกสถานะการทำงานด้วยนะ: สีเหลือง = ช่วงค่าไฟถูก, สีแดง 2 ดวง = ถัง 1 หรือ 2 กำลังต้ม, สีเขียว 2 ดวง = ถัง 1 หรือ 2 รอคิวต้ม (T <= Tu - delta) พี่ใช้ LED แบบมี Resistor ในตัว จิ้มเข้า Digital Pins ของ NANO ได้โดยตรง ไม่ต้องต่อ R เพิ่มให้รก ห้ามช็อตนะตัวนี้!

