เกริ่นนำ
Arduino Nano กำลังอ่านข้อมูลผ่าน SPI จาก MCP3008 (ADC 10-bit) อยู่นะ
Nano ก็จะเพิ่ม timestamp จาก Timer1 เข้าไปด้วย แล้ว
ก็ส่งข้อมูลทั้งหมดไปยัง PC ด้วยความเร็ว 1000000 baud (14350 ตัวอย่าง/วินาที) ตัวนี้จัดไปวัยรุ่น!
รายละเอียดและซอร์สโค้ดมีให้ดูที่นี่:

หมายเหตุ: โค้ดตัวนี้ใช้กับ Arduino Uno ไม่ได้นะน้อง เราเทสผ่านแล้วใช้ได้แค่บน Arduino Nano เท่านั้น
ถึงแม้บอร์ด UNO กับ Nano จะใช้โปรเซสเซอร์ตัวเดียวกัน แต่ใช้ชิปคนละตัวสำหรับการสื่อสาร USB อย่าลืมอ่านรายละเอียดด้านล่างด้วยล่ะ
มุมมองของโปรเจค
Arduino Nano fast PC loggger เป็นโปรเจคพื้นฐานและสร้างสรรค์เกี่ยวกับการส่งข้อมูลระยะไกล ด้วยการโฟกัสที่ส่วนประกอบหลักๆ—อย่าง Arduino Nano และการสื่อสารแบบอนุกรมความเร็วสูง—น้องจะได้เรียนรู้วิธีตั้งทิศทางตัวเองและเฝ้าดูข้อมูลเซ็นเซอร์โดยใช้ลอจิกซอฟต์แวร์เฉพาะทางและการตั้งค่าฮาร์ดแวร์ที่แข็งแกร่ง
การลงมือทำทางเทคนิค: สตรีมอนุกรมความเร็วสูง
โปรเจคนี้เผยให้เห็นเลเยอร์ที่ซ่อนอยู่เบื้องหลังการเก็บข้อมูลง่ายๆ:
- เลเยอร์การสื่อสาร: Arduino Nano สามารถส่งข้อมูลไปยัง PC ของน้องด้วยอัตราบอดที่สูงมาก (สูงสุด 2,000,000 baud) เพื่อเฝ้าดูสัญญาณที่เปลี่ยนแปลงเร็วแบบเรียลไทม์
- เลเยอร์การตรวจจับ: โพเทนชิโอมิเตอร์ (Potentiometer) ทำหน้าที่เป็นเซ็นเซอร์อนาล็อกจำลอง เอาต์พุตของมัน (0-1023) จะถูกตัวอย่างโดย Nano และส่งไปยัง PC เพื่อแสดงผล
- เลเยอร์ลอจิกจับเวลา: โค้ด Arduino ใช้กลยุทธ์ "ความถี่สูง" เฉพาะทาง: มันจะร้องขอและอ่านค่าจากเซ็นเซอร์หลายร้อยครั้งต่อวินาที (เช่น ทุกๆ 5-10ms)
- เลเยอร์การรับข้อมูล: ฝั่ง PC, Serial Plotter หรือโปรแกรมเทอร์มินอล (เช่น Putty หรือสคริปต์ Python ที่เขียนเอง) จะทำหน้าที่เป็นตัวรับและพล็อตกราฟประสิทธิภาพสูง
โครงสร้างพื้นฐานฮาร์ดแวร์
- Arduino Nano: "สมอง" ขนาดจิ๋วของโปรเจค จัดการการแปลงอนาล็อกเป็นดิจิทัล (ADC) ความเร็วสูงและประสานงานงานส่งข้อมูลแบบอนุกรม
- โพเทนชิโอมิเตอร์: ให้ฟีดแบ็คแบบอนาล็อก/ภาพที่ชัดเจนและสนุกสนานสำหรับการวัดแต่ละครั้งที่น้องจำลองขึ้นมา
- เบรดบอร์ด: วิธีที่สะดวกสำหรับการทำต้นแบบวงจรและเชื่อมต่อชิ้นส่วนทั้งหมดโดยไม่ต้องบัดกรี
- สาย Micro-USB: ใช้สำหรับโปรแกรม Nano และจ่ายไฟพร้อมส่งข้อมูลแบบอนุกรมความเร็วสูงไปยังคอมพิวเตอร์
- สายจัมเปอร์: เชื่อมต่อชิ้นส่วนทั้งหมดเข้าด้วยกันบนเบรดบอร์ด
วิธีเชื่อมต่อบอร์ด Arduino Nano กับ MCP3008
MCP3008 Atmega328P
V_DD 5v
V_REF 5v
AGND GND
CLK D13
D_OUT D12
D_IN D11
CS D10
DGND GND
โครงสร้างของข้อมูล:
สอง nibble แรกคือ timestamp จาก byte ล่างของ Timer1 ซึ่ง Timer1 จะ overflow เป็นระยะๆ
prescaler ของ Timer1 ถูกตั้งไว้ที่ 64 และ Timer1 จะเพิ่มขึ้นทุกๆ 4us
สาม nibble ถัดไปคือค่าข้อมูลจาก ADC
และท้ายข้อความจะใส่ตัวอักษร carriage return กับ new line ไว้

Telemetry และการโต้ตอบ แบบทีละสเต็ป
กระบวนการบันทึกข้อมูลออกแบบมาให้มีประสิทธิภาพสุดๆ:
- ตั้งค่าฮาร์ดแวร์: จัดวาง Arduino Nano และตัวต้านทานปรับค่าได้ (Potentiometer) บนเบรดบอร์ดให้ถูกต้อง พร้อมลุยงาน
- ตั้งค่า Serial Sync: ในฟังก์ชัน
setup()ให้เริ่มต้นการสื่อสารแบบอนุกรม (Serial Communication) ด้วยความเร็วสูง (เช่น 115,200 หรือ 250,000 baud) - ลูปการทำงาน: Arduino Nano จะทำการอ่านค่าจากเซนเซอร์หลายตัวแบบประสิทธิภาพสูง และอัพเดทข้อมูลไปยังพอร์ตอนุกรมแบบเรียลไทม์
- แสดงผลแบบเห็นภาพ: ดูข้อมูลจากเซนเซอร์อัพเดทบนหน้าจอ PC (Serial Plotter) แบบสดๆ พร้อมเสียงบัซเซอร์รัวๆ ทุกครั้งที่ตรวจสอบสำเร็จ
โค้ดนี้พัฒนาตามแหล่งข้อมูลหลักสองแหล่ง:
I. วิดีโอสอนจาก Anas Kuzechie บน Youtube
II. ไลบรารี fast-MCP3008 ที่เขียนโดย Dmitriy L.
เกี่ยวกับบั๊ก: ทำไมโค้ดรันได้เฉพาะบน Arduino Nano แต่ไม่รันบน Arduino Uno
สาเหตุมาจากชิป FTDI ครับ รูปด้านล่างน่าจะอธิบายได้ชัดเจน หลังจากอัพโหลดโค้ดลง Arduino UNO คุณจะเห็นข้อมูลขาดหายไปดังรูปด้านล่าง แต่พออัพโหลดลง Arduino Nano คุณจะเห็นบันทึกคลื่นไซน์ที่สมบูรณ์
ผมยังไม่ได้ลองกับบอร์ดอื่น นอกเหนือจาก UNO กับ NANO นะ
ตอนแรกเจอปัญหานี้ ผมนึกว่าเกิดจากอินเตอร์รัปต์ที่รันอยู่เบื้องหลัง เช่น จากฟังก์ชัน `micros()` เลยลองเขียนด้วยภาษา C ล้วนๆ ปัญหาก็ยังอยู่ จนมาเจอเธรดนี้ในฟอรั่ม ผมคิดว่านี่แหละคือสาเหตุ:
ผมคิดว่ามันน่าจะเกิดจากบัฟเฟอร์โอเวอร์โฟลว์ในชิป Atmega ที่ใช้แทน FTDI บางทีในเวอร์ชันใหม่ๆ เขาอาจแก้แล้ว แต่ผมยังไม่ได้ลองตรวจสอบดู


แผนพัฒนาต่อในอนาคต
- เพิ่ม OLED Status Dashboard: ต่อจอ OLED ขนาดเล็กเพื่อแสดง "อัตราการสุ่มตัวอย่าง (Sample Rate)" (Hz) และค่าสูงสุดของข้อมูล
- เชื่อมต่อเซนเซอร์หลายตัวพร้อมกัน: ต่อเซนเซอร์อนาล็อกเพิ่มได้อีกหลายตัว (สูงสุด 8 ตัว) และบันทึกข้อมูลทั้งหมดลงในไฟล์ CSV หรือ Excel แบบหลายคอลัมน์ในไฟล์เดียว
- เพิ่ม Cloud Interface: สร้างแดชบอร์ดบนคลาวด์เพื่อควบคุมและติดตามประวัติข้อมูลจากสมาร์ทโฟนผ่าน WiFi ได้อย่างแม่นยำ
- ปรับแต่งความเร็วการบันทึก: เพิ่มสไลด์หรือโพเทนชิออมิเตอร์สำหรับปรับ "ความถี่ในการบันทึก (Logging Frequency)" เองได้ ตั้งแต่ช้า (1Hz) ไปจนถึงเร็วสุดๆ (500Hz)
สำหรับการเก็บข้อมูลลง PC ผมใช้โปรแกรม CoolTerm ครับ
สนุกกับการทำโปรเจคนะน้อง! สู้งาน
TG