กลับไปหน้ารวมไฟล์
pid-position-control-of-a-levitating-balsa-disc-assembly-inside-a-graduated-cylinder-12f2ed.md

ระบบควบคุมตำแหน่งแบบ PID สำหรับแผ่นบัลซ่าลอยตัวในกระบอกตวงขนาด 500ml นี้ ออกแบบมาเพื่อใช้ในการเรียนการสอนโดยเฉพาะเลยน้อง มันจะมาคู่กับโปรเจค ระบบควบคุมอุณหภูมิแบบ PID สำหรับตู้ความร้อนขนาดเล็ก (ที่เคยมีคนทำไว้แล้ว) โดยระบบนี้เป็นระบบควบคุมกระบวนการที่ตอบสนองเร็วมาก เมื่อเทียบกับระบบควบคุมอุณหภูมิ ซึ่งไดนามิกส์ของกระบวนการที่ต่างกันสุดขั้วแบบนี้ ก็จะต้องใช้ค่าตัวแปรตั้งค่า (Tuning Constants) ของ PID ที่ต่างกันมากๆ ด้วยเช่นกัน

ระบบนี้สามารถใช้เป็นชุดทดลองควบคุมกระบวนการราคาประหยัดได้ มีประโยชน์ทางการศึกษาหลายด้าน เช่น ช่วยให้เข้าใจหลักการควบคุมกระบวนการ และผลของไดนามิกส์กระบวนการต่อการเลือกค่าตัวแปร PID (สัดส่วน, อินทิกรัล, อนุพันธ์) ที่เหมาะสมที่สุด ชุดทดลองนี้เหมาะสำหรับนักเรียน/นักศึกษาในสาขาวิศวกรรมไฟฟ้า/อิเล็กทรอนิกส์, วิศวกรรมเครื่องกล, หรือวิศวกรรมเคมี / เทคโนโลยีวิศวกรรม

ส่วนอิเล็กทรอนิกส์ของโปรเจค ระบบควบคุมตำแหน่งแบบ PID นี้ กับโปรเจค ระบบควบคุมอุณหภูมิแบบ PID สำหรับตู้ความร้อนขนาดเล็ก นั้นเหมือนกันเป๊ะเลย ใช้ Arduino IDE ตัวเดียวกัน ใช้ Serial Plotter ตัวเดียวกัน มีแค่โค้ด C เท่านั้นที่ต่างกัน

ฮาร์ดแวร์ของระบบประกอบด้วย: - กระบอกตวงพลาสติก 500 ml (เจาะก้นออก) - บอร์ดควบคุม และ บอร์ดอินเตอร์เฟซ - พัดลม DC 12V 2 ตัว - เซนเซอร์วัดระยะอัลตราโซนิก ส่วน แผ่นบัลซ่า ก็ทำง่ายๆ จากเข็มหมุด 4 อัน และ แผ่นบัลซ่าเส้นผ่านศูนย์กลาง 45mm 2 แผ่น ที่ตัดด้วยคัตเตอร์

บอร์ดควบคุม ประกอบด้วย: - Arduino Nano - โพเทนชิโอมิเตอร์ตั้งจุดตั้งค่า (Setpoint) สำหรับกำหนดตำแหน่งที่ต้องการ (หน่วย cm) - โพเทนชิโอมิเตอร์สร้างการรบกวน (Disturbance) สำหรับปรับความเร็วพัดลมตัวที่สร้างการรบกวน สัญญาณเอาต์พุตจาก Nano คือสัญญาณ PWM 2 ช่อง ซึ่งจะสร้างแรงดัน DC ที่ปรับค่าได้เพื่อขับพัดลม 2 ตัว

บอร์ดอินเตอร์เฟซ ใช้ MOSFET กำลังช่อง N จำนวน 2 ตัว รับสัญญาณ PWM จาก Nano เพื่อสร้างสัญญาณ PWM เอาต์พุตที่มีแรงดันสูงสุด 12VDC สำหรับจ่ายให้พัดลมทั้งสองตัว

นี่คือแผนภาพบล็อกของระบบ:

เราใช้ Arduino Serial Plotter เพื่อแสดงค่า ตำแหน่ง, จุดตั้งค่า และ การรบกวน โดยมีคำสั่งต่างๆ ที่สามารถตั้งค่าได้จาก Serial Plotter ดังนี้: 1. **PB+** : เพิ่ม Proportional Band เป็นสองเท่าจากค่าปัจจุบัน (ลดเกน) 2. **PB-** : ลด Proportional Band ลงครึ่งหนึ่งจากค่าปัจจุบัน (เพิ่มเกน) 3. **Ti+** : เพิ่ม Integral Time เป็นสองเท่าจากค่าปัจจุบัน 4. **Ti-** : ลด Integral Time ลงครึ่งหนึ่งจากค่าปัจจุบัน 5. **Td+** : เพิ่ม Derivative Time ขึ้น 0.1 วินาที 6. **Td-** : ลด Derivative Time ลง 0.1 วินาที 7. **enDist** : เปิดใช้งานพัดลมสร้างการรบกวนให้ทำงานในรูปแบบคลื่นสี่เหลี่ยม (เปิด-ปิด สลับกัน) 8. **disDist** : ปิดการทำงานแบบคลื่นสี่เหลี่ยมของพัดลมสร้างการรบกวน (ปิดสนิท)

วิดีโอด้านล่างอธิบายคุณสมบัติและการทำงานของระบบ จัดไปดูเลยวัยรุ่น!

คุณสมบัติของระบบควบคุมตำแหน่งแบบ PID มีดังนี้:

1. กระบอกตวงและชุดแผ่นบัลซ่า - กระบอกตวงพลาสติกมาตรฐานขนาด 500 ml - เซนเซอร์วัดตำแหน่งอัลตราโซนิค HCSR04 - ชุดแผ่นบัลซ่าเส้นผ่านศูนย์กลาง 45mm 2 แผ่น

2. ตัวควบคุม PID - ใช้อัลกอริทึมแบบมาตรฐาน (หรือบางครั้งเรียกว่า Mixed) - เป็นแบบที่ใช้กันบ่อยที่สุดในอุตสาหกรรม - แบบ Reverse Acting

การแสดงผล สามารถทำงานแสดงผลผ่านจอ LCD ได้เอง หรือจะทำงานคู่กับ Arduino Serial Plotter ก็ได้

ข้อมูลบน LCD 1. ตำแหน่ง (Cm) 2. จุดตั้งค่า (cm) 3. Proportional Band 4. Integral Time 5. Derivative Time 6. ส่วนประกอบแบบสัดส่วน (Proportional Component) ในหน่วย % 7. ส่วนประกอบแบบอินทิกรัล (Integral Component) ในหน่วย % 8. ส่วนประกอบแบบอนุพันธ์ (Derivative Component) ในหน่วย % 9. สัญญาณเอาต์พุตของตัวควบคุม - ผลรวมของส่วนประกอบ PID ทั้งสามในหน่วย %

ส่วนอิเล็กทรอนิกส์

Arduino Nano microcontroller 1. เชื่อมต่อกับจอ LCD ผ่านบัส I2C 2. สร้างสัญญาณ PWM เอาต์พุต 2 ช่องไปยังบอร์ดอินเตอร์เฟซ MOSFET กำลัง 3. โค้ด C สร้างจาก Arduino IDE 4. จุดตั้งค่าและสัญญาณรบกวนสร้างจากโพเทนชิโอมิเตอร์ 2 ตัวที่ต่อกับขาอินพุตแอนะล็อกของ Nano 5. เซนเซอร์อัลตราโซนิคปรับเทียบค่าตั้งแต่ 0 ถึง 27 cm

บอร์ดอินเตอร์เฟซ 1. MOSFET กำลัง IRF540N ถูกสวิตช์ที่ความถี่ 490 Hz และทำงานผ่านการปรับความกว้างพัลส์ (PWM) เพื่อปรับแรงดันที่จ่ายให้พัดลม 2. ความสว่างของ LED สีแดงแปรผันตามแรงดันที่จ่ายให้พัดลมตัวล่าง (ยก) 3. ความสว่างของ LED สีเหลืองแปรผันตามแรงดันที่จ่ายให้พัดลมตัวบน (กด)

Fluid Dynamics & Calculus: กับดักฟิสิกส์ของทรงกระบอกลอยได้ด้วย PID

การควบคุมความเร็วรถบนพื้นดินน่ะ ฟิสิกส์เบสิกเลย แต่การทำให้วัตถุลอยนิ่งๆ กลางอากาศแบบเอาชนะแรงโน้มถ่วงและลมปั่นป่วนได้นี่สิ โคตรจะเป็นปัญหาของระบบควบคุมเลย! โปรเจค PID Levitating Balsa Disc นี้จะบังคับให้ Arduino อ่านข้อมูลระยะห่างจากเซนเซอร์อัลตราโซนิค 200 ครั้งต่อวินาที เพื่อปรับความเร็วมอเตอร์ Brushless Drone Motor (พัดลม EDF) ให้เป่าลมเป็นเสาใต้แผ่นไม้ ให้มันลอยนิ่งๆ ได้โดยไม่ต้องช่วยจับ!

กับดักฟิสิกส์ของการลอย

ถ้าน้องจ่าย PWM ความเร็วคงที่ 50% ให้พัดลมที่เป่าขึ้นในทรงกระบอก แผ่นไม้จะไม่ลอยนิ่งที่ 50% แน่นอน! มันจะเด้งจากพื้น กระแทกเพดาน แตกกระจก แล้วร่วงลงมาใหม่!

  1. นั่นเพราะ แรงต้านอากาศ (Drag) มันไม่เป็นเชิงเส้น ไงล่ะ
  2. เซนเซอร์วัดระยะ: เราใช้ HC-SR04 Sonar หรือ ToF Sensor ติดไว้ที่ปลายบนของทรงกระบอกอะคริลิกยักษ์ หันลงมาวัดระยะห่างของแผ่นไม้บัลซ่าที่ลอยอยู่ตลอดเวลา (เช่น 45.4cm)

เอาชนะแรงโน้มถ่วงด้วยตรรกะ PID

Arduino ใช้ไลบรารีหนักๆ อย่าง <PID_v1.h> เพื่อจัดการกับความปั่นป่วนวุ่นวายพวกนี้

  • เมื่อผู้ใช้หมุนโพเทนชิออมิเตอร์ตั้งค่า Target Height: 20cm โค้ดจะสร้างค่าผลต่าง (error) อันมหาศาลขึ้นมา!
Setpoint = 20.0; // ความสูงที่เราอยากให้แผ่นไม้ลอยอยู่
Input = getSonarDistance(); // ความสูงจริงของแผ่นไม้ในตอนนี้ (เช่น 45!)
myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
analogWrite(fanMosfetPin, Output); // ปรับความเร็วพัดลมอย่างรุนแรงตามผลลัพธ์จาก PID!
  • เบรกจากอนุพันธ์ (Derivative): ขณะที่พัดลมยักษ์เป่าแผ่นไม้จากพื้นขึ้นไปหา 20cm ตัวแปร (D) ในอัลกอริทึมแคลคูลัสจะรู้ว่าแผ่นไม้กำลังขึ้น เร็วเกินไป มันจะลดกำลังพัดลมลงฮวบๆ ไปที่ 10% ก่อน ที่แผ่นไม้จะถึงจุดเป้าหมายเล็กน้อย เพื่อจับแผ่นไม้นั้นให้ลอยนิ่งสนิทกลางอากาศ!

ฮาร์ดแวร์สำหรับควบคุมอากาศพลศาสตร์

  • Arduino Uno/Mega (แนะนำ Mega ถ้าจะรันกราฟฟิคบน LCD พร้อมกันด้วย!)
  • ทรงกระบอกอะคริลิกหรือโพลีคาร์บอเนตขนาดใหญ่ (มักสูง 3 ฟุต)
  • มอเตอร์ Brushless แบบ EDF (Electric Ducted Fan) + ตัวควบคุมความเร็ว ESC ที่ตรงกัน หมายเหตุ: ต้องควบคุม ESC ด้วยโพรโทคอล <Servo.h> writeMicroseconds() ห้ามใช้ analogWrite()!
  • แหล่งจ่ายไฟ 12V กระแสสูง หรือแบตเตอรี่ LiPo 3S ขนาดใหญ่
  • HC-SR04 Sonar หรือ VL53L0X Laser Tracker

PID ทำงานยังไง?

ก่อนจะมีไมโครคอนโทรลเลอร์กับคอมพิวเตอร์ วงจร PID ถูกสร้างด้วยอุปกรณ์อิเล็กทรอนิกส์อนาล็อก โดยหลักๆ คือออปแอมป์ (operational amplifier)

การทำให้ PID ทำงานแบบดิจิทัลต้องใช้อัลกอริทึม มี PID หลายเวอร์ชัน โปรเจคนี้ใช้แบบที่เรียกว่า Mixed หรือ Standard implementation

คณิตศาสตร์ของ PID แบบ Mixed สามารถแสดงได้ดังนี้

Mixed PID

โดยที่:

Kc คืออัตราขยายของคอนโทรลเลอร์, Ti คือเวลาอินทิกรัล, Td คือเวลาอนุพันธ์, และ e คือค่าผิดพลาด (error) บางครั้งอัตราขยาย Kc อาจเขียนเป็น Kc = 100%/PB โดยที่ PB คือ Proportional Band ถ้า PB เล็กลง อัตราขยายก็จะมากขึ้น

นี่คือซูโดโค้ดสำหรับอัลกอริทึม PID มันไม่ใช่ภาษาคอมฯ จริง แต่เป็นรูปแบบไดอะแกรมการไหลของข้อมูลมากกว่า

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

apps:
  - "1x Arduino IDE 2.2.1"
author: "lenfromtoronto"
category: "Lab Stuff"
components:
  - "1x 5 mm LED: Red"
  - "2x Resistor 220 ohm"
  - "2x Diode 1N4001"
  - "1x 5 mm LED: Yellow"
  - "1x Yungui 12 PCs Universal PCB Board Single Sided"
  - "1x 5K Potentiometer"
  - "1x Ultrasonic Sensor - HC-SR04"
  - "1x Arduino Nano"
  - "1x Rotary Potentiometer, 10 kohm"
  - "1x Gikfun 2 pin and 3 pin Screw Terminal Blocks"
  - "1x 500 Ml Graduated Cylinder"
  - "1x Jumper wires (generic)"
  - "1x Soldering Station"
  - "1x Resistor 10k ohm"
  - "2x irf540n n-channel mosfet"
  - "1x Alphanumeric LCD, 20 x 4"
  - "2x Fan 12 V 50x50x10 mm"
description: "มาเล่นกับระบบควบคุมตำแหน่งแบบ PID ที่ตอบสนองเร็วสุดๆ กัน! โปรเจคนี้จะสอนให้รุ่นน้องเข้าใจพื้นฐานการควบคุม โดยใช้แผ่นบอลซ่าลอยอยู่ในหลอดแก้ว 500ml ผ่านเซนเซอร์และมอเตอร์ รับรองว่าตึงๆ เข้าใจง่าย เหมาะกับวัยรุ่นสายช่างที่อยากลองของเทพๆ จัดไป!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/b456be0b-4695-4000-9913-3c75d6f72fa7.ino"
encryptedPayload: "U2FsdGVkX18cCygUfXwuPs2mTbgWdlU4pA8A92LnQD5CnN2N5Y8XKdFwQBGFR+WmG9rBWn4oNMA1dleknanvWETx/wiuNNEXgarUJiMI4d0="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/pid-position-control-of-a-levitating-balsa-disc-assembly-inside-a-graduated-cylinder-12f2ed_cover.jpg"
lang: "en"
likes: 0
passwordHash: "1c479000130641c1fa3effb508272c57a8ddffe9f77657da2dd5e42a63cd4245"
price: 699
seoDescription: "PID Position Control of a levitating balsa disc inside a Graduated Cylinder. A project to teach control of a fast responding positional system."
tags:
  - "Embedded"
title: "PID Position Control of a Levitating Balsa Disc Assembly Inside a  Graduated Cylinder"
tools: []
videoLinks:
  - "https://www.youtube.com/watch?v=CjTJ0bQsVH4"
views: 1741