กลับไปหน้ารวมไฟล์
multitasking-and-real-time-arduino-system-9da221.md

title: Multitasking Real-Time Arduino System with ARTe description: เรียนรู้วิธีการเปลี่ยน Arduino ให้เป็นระบบ Real-Time OS (RTOS) ด้วย ARTe เพื่อจัดการงานแบบ Multitasking อย่างมีประสิทธิภาพ

บทนำ (Introduction)

โปรเจกต์นี้เป็นการสาธิตการนำ Arduino มาประยุกต์ใช้งานร่วมกับระบบปฏิบัติการแบบเรียลไทม์ (Real-Time Operating System หรือ RTOS) ที่ชื่อว่า ERIKA Enterprise ผ่านเครื่องมือขยายขีดความสามารถที่ชื่อว่า ARTe (Arduino Real-Time extension)

โดยปกติแล้ว Arduino จะทำงานแบบ Single-tasking หรือทำงานทีละคำสั่งใน loop() เดียว ซึ่งหากมีงานหลายอย่างที่ต้องทำพร้อมกันและต้องการความแม่นยำด้านเวลา (Deterministic Timing) การเขียนโค้ดแบบเดิมจะทำได้ยาก โปรเจกต์นี้จึงถูกออกแบบมาเพื่อโชว์ศักยภาพในการจัดการงานหลายอย่าง (Multitasking) พร้อมกัน เช่น การวัดระยะทาง การวัดอุณหภูมิ และการควบคุมไฟกระพริบ โดยแต่ละงานมีรอบการทำงาน (Period) และลำดับความสำคัญ (Priority) ที่ชัดเจน

คุณสามารถศึกษารายละเอียดเพิ่มเติมเกี่ยวกับ ARTe ได้ที่เว็บไซต์ทางการของผู้พัฒนา: http://arte.retis.santannapisa.it/ หรือ http://retis.sssup.it/?q=arte

สำหรับการติดตั้งและซอร์สโค้ดฉบับเต็ม สามารถดูได้ที่ GitHub: https://github.com/melvin-mancini/Multitasking-RealTime-Arduino-System


ทำความรู้จักกับ ARTe (Arduino Real-Time extension)

ARTe คือส่วนขยายของ Arduino Framework ที่ช่วยให้รองรับการทำงานแบบ Multitasking และการจัดลำดับงานแบบแทรกกลาง (Preemptive Scheduling) โดยใช้ Kernel ของ ERIKA Enterprise ซึ่งเป็น Open-source RTOS ระดับมาตรฐานอุตสาหกรรม

ฟีเจอร์เด่นของ ARTe:

  • Concurrent Loops: ผู้ใช้สามารถสร้าง loop() หลายตัวให้ทำงานขนานกันได้ โดยกำหนดความถี่ (Rate) ในการทำงานที่แตกต่างกัน
  • Real-Time Scheduling: ระบบจะรับประกันว่างานที่มีความสำคัญสูงกว่าจะได้รับการประมวลผลตามเวลาที่กำหนด
  • Compatibility: รองรับบอร์ดประมวลผลยอดนิยมอย่าง Arduino UNO และ Arduino DUE
  • Low Overhead: จากการทดสอบพบว่า ARTe มีผลกระทบต่อหน่วยความจำ (Footprint) และการประมวลผล (Runtime Overhead) น้อยมากจนแทบไม่มีผลต่อประสิทธิภาพโดยรวม

หมายเหตุ: ปัจจุบัน ARTe รองรับการพัฒนาบนระบบปฏิบัติการ Windows เท่านั้น โดยโปรเจกต์นี้พัฒนาบน Windows 8.1


รายละเอียดโปรเจกต์และการทำงานของระบบ

ในระบบนี้ เราได้แบ่งการทำงานออกเป็น 3 Task (กระบวนการ) หลักที่ทำงานแบบ Periodic (ทำงานซ้ำตามรอบเวลา) โดยมีรายละเอียดลอจิกดังนี้:

1. Task วัดระยะทางด้วย Ultrasonic (Loop 1 - ทุก 3 วินาที)

ใช้เซนเซอร์ HC-SR04 ทำงานโดยส่งคลื่นอัลตราโซนิกออกไปและวัดระยะเวลาที่สะท้อนกลับมา

  • Engineering Logic: ระบบจะส่งสัญญาณ Pulse ขนาด 10 ไมโครวินาทีไปยังขา Trigger เพื่อกระตุ้นเซนเซอร์ จากนั้นใช้ฟังก์ชัน pulseIn() เพื่ออ่านค่าเวลาที่คลื่นเดินทาง (Duration)
  • การคำนวณ: ใช้สูตร $Distance = \frac{Duration}{29} / 2$ (เนื่องจากความเร็วเสียงคือ 340 m/s หรือประมาณ 29 ไมโครวินาทีต่อเซนติเมตร และต้องหาร 2 เพราะเป็นระยะไป-กลับ)
  • Alarm: หากตรวจพบสิ่งกีดขวางในระยะน้อยกว่า 10 ซม. ระบบจะสั่งให้ LED แจ้งเตือนสว่างขึ้นทันที

2. Task ควบคุมไฟสถานะ (Loop 2 - ทุก 7 วินาที)

เป็นการทำงานเพื่อแสดงสถานะว่าระบบยังคงทำงานอยู่ (Heartbeat)

  • Code Logic: เมื่อถึงรอบการทำงาน ระบบจะวนลูป 5 ครั้งเพื่อสั่งให้ LED กระพริบ (ติด 500ms / ดับ 500ms) ซึ่งใช้เวลารวมประมาณ 5 วินาทีในแต่ละรอบการทำงาน

3. Task ตรวจวัดอุณหภูมิ (Loop 3 - ทุก 11 วินาที)

ใช้เซนเซอร์ LM35 ซึ่งให้เอาต์พุตเป็นแรงดันไฟฟ้าแบบ Analog ที่แปรผันตามอุณหภูมิ (10mV ต่อ 1 องศาเซลเซียส)

  • Precision Engineering: ในโค้ดมีการใช้ analogReference(INTERNAL) เพื่อเปลี่ยนแรงดันอ้างอิงเป็น 1.1V ช่วยให้การอ่านค่าจาก LM35 มีความละเอียด (Resolution) สูงขึ้น
  • Data Processing: เพื่อความแม่นยำ ระบบจะทำการอ่านค่า 3 ครั้ง (Sampling) ทุกๆ 500ms แล้วนำมาหาค่าเฉลี่ย หากอุณหภูมิเฉลี่ยสูงกว่า 23 องศาเซลเซียส LED เตือนความร้อนจะสว่างขึ้น

อุปกรณ์ที่ต้องใช้ (Hardware Components)

  1. Arduino Uno - บอร์ดประมวลผลหลัก
  2. HC-SR04 - เซนเซอร์วัดระยะทาง (Ultrasonic Sensor)
  3. LM35 - เซนเซอร์วัดอุณหภูมิความแม่นยำสูง
  4. LEDs - สำหรับแสดงสถานะ Alarm และสถานะการทำงาน
  5. Resistors - ตัวต้านทานสำหรับ LED (แนะนำ 220-330 โอห์ม)
  6. Jumper Wires & Breadboard - สำหรับเชื่อมต่อวงจร

ผังการต่อวงจร (Circuit Diagram)

เพื่อให้การประกอบวงจรเป็นไปอย่างถูกต้อง คุณสามารถดูแผนผังการต่อสายได้จากรูปภาพด้านล่างนี้ (สร้างด้วย Fritzing):

แผนผังการเชื่อมต่อ Arduino กับเซนเซอร์ HC-SR04, LM35 และ LED

ขั้นตอนการติดตั้งและเริ่มใช้งาน

การติดตั้ง ARTe

  1. ดาวน์โหลดเครื่องมือพัฒนา ARTe จากเว็บไซต์ http://retis.sssup.it/?q=arte
  2. ติดตั้งโปรแกรม ซึ่งจะมีหน้าตาคล้ายกับ Arduino IDE เดิมแต่มีเมนูเสริมสำหรับ RTOS
  3. เปิดการใช้งานโดยไปที่เมนู Tools -> ARTℇ แล้วเลือก Enable

การคอมไพล์และอัปโหลด

  1. เชื่อมต่อ Arduino Uno เข้ากับคอมพิวเตอร์
  2. เปิดไฟล์ src.ino ผ่านตัวแก้ไขของ ARTe
  3. ตรวจสอบพอร์ตและบอร์ดให้ถูกต้อง จากนั้นกด Upload ระบบจะทำการคอมไพล์ Kernel ของ ERIKA และโค้ดส่วนของผู้ใช้เข้าด้วยกันโดยอัตโนมัติ

การแก้ไขปัญหา (Troubleshooting)

ปัญหาเกี่ยวกับไลบรารี DigitalToggle

เนื่องจาก ARTe มีการปรับโครงสร้างภายในเพื่อรองรับ Multitasking ไลบรารีบางตัวอย่าง DigitalToggle อาจเกิด Error ตอนคอมไพล์ ให้แก้ไขดังนี้:

  1. ดาวน์โหลดไลบรารีจาก Arduino Playground
  2. แตกไฟล์ ZIP แล้วเปิดไฟล์ DigitalToggle.h
  3. เปลี่ยนบรรทัด #include <pins_arduino.h> ให้เป็น #include "Arduino.h"
  4. บันทึกไฟล์และบีบอัดเป็น ZIP อีกครั้งเพื่อทำการ Import เข้า ARTe IDE

วิเคราะห์ซอร์สโค้ด (Code Analysis)

จาก Source Code ที่ให้มา เราจะเห็นโครงสร้างที่เป็นระเบียบและการใช้คำสั่งเฉพาะของ ARTe:

void loop1(3000) { // ทำงานทุก 3,000 ms
  // Logic วัดระยะทาง
  ...
}

void loop2(7000) { // ทำงานทุก 7,000 ms
  // Logic ไฟกระพริบ
  ...
}

void loop3(11000) { // ทำงานทุก 11,000 ms
  // Logic วัดอุณหภูมิและหาค่าเฉลี่ย
  ...
}

จุดเด่นเชิงวิศวกรรม:

  • Determinism: การกำหนดค่าตัวเลขในวงเล็บหลัง loop เช่น loop1(3000) คือการบอก RTOS ให้จองรอบเวลาที่แน่นอนให้กับงานนั้นๆ ทำให้เรามั่นใจได้ว่าเซนเซอร์จะถูกอ่านค่าตามเวลาที่วางแผนไว้
  • Resource Sharing: แม้จะมีการใช้ Serial.print ในทุก Loop แต่ระบบจัดการของ ERIKA/ARTe จะช่วยดูแลไม่ให้เกิดการขัดแย้งของข้อมูล (Mutual Exclusion) ในการเข้าถึง Serial Buffer
  • Power Efficiency: การใช้ RTOS ช่วยให้ CPU สามารถจัดการลำดับความสำคัญได้ดีกว่าการเขียน if(millis()) ซ้อนกันหลายชั้น ทำให้ระบบมีความเสถียรและตอบสนองได้ทันท่วงที (Responsive)

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

title: "Multitasking And Real-Time Arduino System"
description: "This simple project shows how Arduino can be used with a RTOS. A special version of Arduino called ARTe was used for software development."
author: "Menphis"
category: "Lab Stuff"
tags:
  - "real-time"
  - "multiprocessing"
views: 49017
likes: 11
price: 299
difficulty: "Intermediate"
components:
  - "1x Ultrasonic Sensor - HC-SR04 (Generic)"
  - "1x Temperature Sensor"
  - "1x Arduino UNO"
  - "3x LED (generic)"
tools: []
apps:
  - "1x ARTe (Arduino Real-Time extension)"
downloadableFiles:
  - "https://github.com/melvin-mancini/Multitasking-RealTime-Arduino-System"
  - "https://projects.arduinocontent.cc/1943865b-ca9b-47be-8f9f-22c37d5b34a0.ino"
  - "https://github.com/melvin-mancini/Multitasking-RealTime-Arduino-System"
  - "https://projects.arduinocontent.cc/1943865b-ca9b-47be-8f9f-22c37d5b34a0.ino"
documentationLinks: []
passwordHash: "cea7a27e9b9dd61949dabe9392a72a8f6b5018cc6f24d7dcbcbb3a82dc06ed06"
encryptedPayload: "U2FsdGVkX19g9JuqOWvDUbAg61LQIew4PIQs9FaEG+4vYbUv8znYP4Sd58QP+VzlVoGU3ltQJrAFZ4H2jqeenBjyfpIhelxFLpF8NIqQWc1GB8eCq4kEgeGbd3gz6lbH"
seoDescription: "Learn how to build a Multitasking and Real-Time Arduino System using RTOS and ARTe for software development."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/multitasking-and-real-time-arduino-system-9da221_cover.jpg"
lang: "en"