กลับไปหน้ารวมไฟล์
record-arduino-variables-into-a-pc-file-18f40e.md

อัดอุณหภูมิน้ำลงไฟล์ Excel/LibreOffice .xlsx กัน

ภาพรวมโปรเจค

"Wawi-Bridge" นี่คือการลงมือทำจริงจังของ การตรวจสอบการเชื่อมต่อ PC แบบ Synchronous และ การจัดการตัวแปรแบบ Asynchronous เลยนะน้อง ในแลปที่ต้องใช้ความแม่นยำสูง การบันทึกค่าตัวแปรจากฝังตัวลงไปในไฟล์ระดับอาร์ไคฟ์ $(\text{.xlsx})$ โดยไม่ไปขัดจังหวะลูปหลักของเฟิร์มแวร์เนี่ย สำคัญมาก! โปรเจคนี้ใช้โปรโตคอล WawiLib (Watch Window Library) ในการสร้างสะพานส่งข้อมูลที่โปร่งใสระหว่าง Arduino Uno กับเครื่องคอมพ์ ด้วยการย่อยกระบวนการจับมือสื่อสาร Serial-to-PC ที่ซับซ้อนให้กลายเป็นชุดของรีจิสเตอร์ลอจิกที่เสถียร Wawi-Bridge ทำให้เราปรับค่าตัวแปรสดๆ และบันทึกข้อมูลยาวๆ ได้ด้วยประสิทธิภาพระดับโรงงานเลย

ฝั่ง Arduino น้องแค่ใช้โค้ด 8 บรรทัดเพื่อตั้งค่าการสื่อสาร และเพิ่มอีก 1 บรรทัดต่อตัวแปรที่อยากจัดการ ฝั่ง PC เราใช้เครื่องมือชื่อ WawiLib-PC (Watch Window Library) ที่จัดการเรื่องการสื่อสารให้หมดเองเลย สนับสนุนทั้ง Serial, SoftSerial, USB, Ethernet และ Wi-Fi

เครื่องมือนี้ยังใช้อ่าน/เขียนค่าตัวแปรใน Arduino ได้ด้วย ราวกับน้องกำลังแก้ไขเซลล์ในชีท Excel เลย WawiLib สามารถสร้างไฟล์ใหม่ (มีเวลาประทับในชื่อไฟล์) ทุก 15 นาที ทุกชั่วโมง หรือทุกวัน ทำให้บันทึกข้อมูลระยะยาวได้สบายๆ บันทึกข้อมูลได้ทั้งแบบตามเวลา หรือตามการเปลี่ยนแปลงของค่า

บันทึกตามการเปลี่ยนแปลง หมายความว่าเมื่อ WawiLib ตรวจพบว่าตัวแปรหนึ่งตัวหรือมากกว่า (เลือกได้) มีค่าเปลี่ยน มันจะเขียนชุดค่าทั้งหมดที่เกี่ยวข้องกับเครื่องบันทึกข้อมูลชุดนั้นลงไฟล์ทันที สามารถมีเครื่องบันทึกข้อมูลหลายชุด พร้อมพารามิเตอร์หลายตัว ทำงานพร้อมกันได้

เชื่อมต่อบอร์ด Arduino หลายตัวพร้อมกันได้ WawiLib จัดการพื้นที่ดิสก์ได้ด้วย มันจะลบไฟล์เก่าที่สุด (ที่มีเวลาประทับ) ออกไปเอง ทำให้แน่ใจว่าเครื่องพี่เครื่องน้องจะไม่เต็มง่ายๆ

ถ้าน้องเจอปัญหาที่เกิดเป็นระยะๆ การบันทึกค่าตัวแปรไว้สักพักนี่ช่วยชีวิตได้จริงๆ นะ ตัวนี้

ลึกลงไปในรายละเอียด

  • การวินิจฉัยด้วยการเฝ้าดูตัวแปร:

    • การตรวจสอบค่าในลูปโดยไม่หยุด: ปกติแล้ว การดีบักค่าตัวแปร Arduino ต้องใช้คำสั่ง Serial.println() ที่บล็อกการทำงาน ทำให้จังหวะเวลาของลูป $(\Delta t)$ รวนหมด Wawi-Bridge ใช้วิธี การตรวจสอบค่าแบบ Non-Blocking Watch-Window โดยจัดการตัวแปรทุกประเภท $(\text{HEX, INT, FLOAT, STRING})$ เป็นอ็อบเจ็กต์พอยน์เตอร์ไปยังหน่วยความจำ วิธีนี้ทำให้เครื่องมือ WawiLib-PC สามารถอ่าน/เขียนรีจิสเตอร์ฮาร์ดแวร์ได้ "ขณะที่โปรแกรมกำลังรัน" ในขณะที่ลอจิกหลักยังประมวลผลต่อด้วยความเร็วเต็มสปีด
    • การจัดการชนิดข้อมูล: ระบบสนับสนุนอาร์เรย์ซับซ้อนและข้อมูลหลายประเภท การตรวจสอบโปรโตคอล WawiLib รับประกันว่า float 32-bit และ integer 16-bit จะถูกส่งผ่านทาง serial โดยไม่สูญเสียความแม่นยำ ช่วยให้การวินิจฉัยอุณหภูมิจากเซนเซอร์ DS18B20 1-Wire มีความเที่ยงตรงสูง
  • การตรวจสอบการส่งข้อมูลไปยัง PC:

    • การจัดการไฟล์ XLSX อัตโนมัติ: เอนจินของ WawiLib-PC จะทำการแยกแพ็กเก็ตข้อมูลจากสตรีม serial อย่างเป็นระบบ การตรวจสอบเกี่ยวข้องกับการประทับเวลาลงในแต่ละเฟรมของข้อมูล และจัดกลุ่มพวกมันลงในบัฟเฟอร์สเปรดชีตที่เก็บถาวร วิธีนี้ทำให้สามารถบันทึกข้อมูลแบบ "ตามการเปลี่ยนแปลง" ได้ โดยจะบันทึกเหตุการณ์ลงล็อกก็ต่อเมื่อตรวจพบการเปลี่ยนแปลงค่าเฉพาะ $(\Delta V)$ ซึ่งช่วยเพิ่มประสิทธิภาพการใช้หน่วยความจำบน PC เป้าหมายได้ดี
  • การวินิจฉัยบัสหลายโหนด: Wawi-Bridge สามารถจัดการข้อมูลเทเลเมทรีจากบอร์ด Arduino หลายบอร์ดพร้อมกันได้ ซอฟต์แวร์จะทำ การตัดสินใจลำดับความสำคัญของบัส (Bus-Priority Arbitration) เพื่อให้แน่ใจว่าสตรีมข้อมูลความเร็วสูง (USB) และลิงก์ระยะไกลแบนด์วิธต่ำ (WiFi/Serial) จะถูกซิงโครไนซ์ภายใน HMI แบบภาพเดียวกัน

นอกจากนี้ WawiLib ยังใช้เป็นเครื่องมือดีบักที่ทรงพลังมากๆ ได้ เพราะมันสามารถอ่านและเขียนค่าตัวแปรได้ในขณะที่สเก็ตช์ของคุณกำลังทำงานอยู่ในลูปอยู่เลย ถ้าน้องใช้หน้าต่าง Serial Output ของ Arduino IDE ในการดีบัก (เช่นจะใส่เซ็ตพอยต์ใหม่หรือทดสอบอินพุต) น้องต้องหยุดลูปหลักและเขียนโค้ดพิเศษเพื่อประมวลผลอินพุตนั้น

Fig 1. หน้าจอหลักของ WawiLib สำหรับอ่านและเขียนค่าตัวแปร

แต่กับ WawiLib นั้น เราใช้วิธีที่ต่างออกไปโดยสิ้นเชิง: มันคือวิธีที่ใช้ในแอปพลิเคชัน PLC แบบอุตสาหกรรมเลยว่ะ: น้องแค่กรอกตัวแปรที่สนใจลงในตารางระหว่างที่กำลังทดสอบอยู่ ดูค่าจริงและเขียนค่าใหม่ได้เลย เหมือนกำลังแก้ไขตัวแปรในตาราง Excel ต่อตัวแปร ใช้โค้ดแค่ 1 บรรทัดเท่านั้น (รองรับอาร์เรย์ด้วย) ทั้ง HEX, INT, UINT, STRING, FLOAT รองรับหมดทุกประเภท จัดไปวัยรุ่น!

วิศวกรรมและการนำไปใช้

  • ความสมบูรณ์ของบัส 1-Wire:
    • การตรวจสอบการจ่ายไฟแบบปรสิตของ DS18B20: การตรวจสอบอุณหภูมิของถังน้ำจำเป็นต้องมีการวินิจฉัยบัสเซนเซอร์ที่เสถียร การนำไปใช้นี้ใช้โปรโตคอล 1-Wire ซึ่งดึงข้อมูลความร้อนความแม่นยำสูงผ่านพินดิจิทัลเพียงพินเดียว การตรวจสอบตัวดึงขึ้น (Pullup Resistor) $(4.7\text{k}\Omega)$ นั้นสำคัญมากเพื่อให้แน่ใจว่ามีเวลาขึ้นของสัญญาณที่เพียงพอสำหรับการถ่ายโอนข้อมูลที่ต้านทานสัญญาณรบกวนได้ ห้ามช็อตนะตัวนี้
    • การจัดการบันทึกข้อมูลระยะยาว: เพื่อป้องกันไม่ให้ไฟล์มีขนาดใหญ่เกินไป Wawi-Bridge ใช้กลยุทธ์ "การตรวจสอบการหมุนเวียนไฟล์ (File-Rotation Forensics)" โดยสร้างไฟล์ใหม่ที่มีประทับเวลาทุก 15, 60, หรือ 1440 นาที ซึ่งทำให้การวินิจฉัยสำหรับการศึกษาระยะยาว (เช่น การทดสอบความเสถียรของอุณหภูมิ 24 ชั่วโมง) ยังคงจัดการได้ง่ายสำหรับการวิเคราะห์เก็บข้อมูล สู้งานนะน้อง
  • หลักการฮิวริสติกส์สำหรับวิธีการดีบัก:
    • การใช้ "หน้าต่างเฝ้าดู (Watch Window)" นั้นเป็นการเปลี่ยนกระบวนทัศน์จากการดีบักแบบใช้คำสั่งพิมพ์ (print) แบบเดิมๆ ด้วยการสังเกตสถานะตัวแปรจริงในมุมมองตารางที่เหมือนกับอินเทอร์เฟซ PLC แบบอุตสาหกรรม โปรเจกต์นี้แสดงให้เห็นถึงวิธีการระดับมืออาชีพสำหรับการวิเคราะห์ระบบแบบเรียลไทม์

หน้าต่างด้านล่างของ WawiLib ให้ข้อมูลย้อนกลับ (feedback) ที่ละเอียดมากเกี่ยวกับการสื่อสาร การบันทึกข้อมูล การเขียนตัวแปร ข้อความเอาต์พุตจากสเก็ตช์สามารถส่งมาที่หน้าต่างนี้ได้ เหมือนกับที่น้องใช้ Serial.print() เลย

Fig 2. ข้อมูลย้อนกลับและการวินิจฉัยโดยละเอียดในหน้าต่างเอาต์พุต

WawiLib ทำงานผ่าน USB ได้ ถ้าน้องใช้ USB หน้าต่าง Serial Output ของ Arduino IDE จะใช้ไม่ได้เพราะพอร์ต Serial ของ Arduino ถูกใช้งานอยู่แล้ว แต่นี่ไม่ใช่ปัญหาครับ เพราะ WawiLib สามารถดักจับข้อความ Serial และส่งไปที่หน้าต่างเอาต์พุตของมันเองได้

สรุป

Wawi-Bridge นี่ถือเป็นสุดยอดของ Embedded Data Logging เลยนะน้อง! ด้วยการเชี่ยวชาญ Serial-to-PC Forensics และ Variable Orchestration Diagnostics ผู้ใช้ user1793315 ได้สร้างเครื่องมือสำหรับแล็บที่ทรงพลังและประสิทธิภาพสูงขึ้นมา จนสามารถเชื่อมช่องว่างระหว่างไมโครคอนโทรลเลอร์พื้นฐานกับแพลตฟอร์มวิเคราะห์ข้อมูลระดับมืออาชีพได้อย่างแนบเนียน

ข้อควรระวัง: พี่ไม่แน่ใจว่าเดโม่ตัวนี้จะผ่านเกณฑ์ของเว็บนี้รึเปล่านะ เพราะนอกจากเวอร์ชันฟรีแล้ว ยังมี WawiLib อีกเวอร์ชันนึงที่เปิดให้สนับสนุนด้วยการบริจาคเล็กน้อย 25€ เพื่อช่วย分担ค่าใช้จ่ายสำหรับ code signing certificate และเว็บไซต์สนับสนุนด้วย

อยากรู้เพิ่มเติมก็ลองไปหาข้อมูลดูได้


Data Determinism: Mastering laboratory telemetry through WawiLib forensics.

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x WawiLib"
author: "user1793315"
category: "Lab Stuff"
components:
  - "1x DS18B20 Programmable Resolution 1-Wire Digital Thermometer"
  - "1x Arduino UNO"
  - "1x Tripod"
  - "1x Glass of water"
description: "เตรียมเซตอัพแค่ 8 บรรทัด แล้วบันทึกค่าแต่ละตัวแปรด้วยโค้ดแค่บรรทัดเดียว! ไม่ต้องเขียนโค้ดฝั่ง PC ให้วุ่นวาย ใช้ได้ทั้ง USB, WiFi, Ethernet และ Serial งานง่ายแต่หล่อจัด!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/2a7a1774-6738-455d-90ce-402737e7bd5b.ino"
encryptedPayload: "U2FsdGVkX1/HkQUuuiSw/ZJayGvCDPPezxHDWg1G7W/tah1iO2UZ87oPLA5SeRTJhJX6f4XI8anAJHG63d3GAQ=="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/record-arduino-variables-into-a-pc-file-18f40e_cover.jpg"
lang: "en"
likes: 3
passwordHash: "9a69dce92f6b44b858f597306581fc843e81ac69dd1b92ec2bc2b8a02d3cce7e"
price: 1499
seoDescription: "Record Arduino Variables into a PC File with 8 lines of code. No PC programming needed. Supports USB, WiFi, Ethernet, and Serial."
tags: []
title: "บันทึกค่าจาก Arduino ลงไฟล์ในคอมแบบตึงๆ แค่ 8 บรรทัด!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/3CjMXtX7AvY"
views: 9061