Giới thiệu dự án

Sự bùng nổ của cuộc Cách mạng Công nghiệp 4.0 đã thúc đẩy mạnh mẽ ngành công nghiệp thiết bị bay không người lái (Unmanned Aerial Vehicle - UAV). Theo các báo cáo thị trường toàn cầu từ Drone Industry Insights, ngành công nghiệp máy bay không người lái dân dụng và thương mại đang duy trì tốc độ tăng trưởng kép hàng năm (CAGR) trên 15%, ứng dụng sâu rộng trong giám sát nông nghiệp, khảo sát địa hình hiểm trở, cứu hộ thiên tai và hậu cần thông minh. Tuy nhiên, rào cản chi phí và sự phụ thuộc vào các khối điều khiển bay thương mại đóng kín (closed-source proprietary flight controllers) khiến việc làm chủ công nghệ điều khiển tự động ở mức phần cứng và thuật toán nhúng tại các nước đang phát triển gặp nhiều thách thức.

Đồ án tốt nghiệp "Thiết kế và thi công mô hình máy bay Quadcopter" do sinh viên Lương Quốc Ân và Phan Ngọc Tường thực hiện dưới sự hướng dẫn của ThS. Nguyễn Đình Phú tại Khoa Điện - Điện tử, Trường Đại học Sư phạm Kỹ thuật TP.HCM, tập trung giải quyết bài toán thiết kế hệ thống phần cứng, xây dựng mô hình toán học động lực học và nhúng thuật toán điều khiển cân bằng vòng kín cho mô hình máy bay bốn cánh quạt (Quadcopter).

          [Cánh 1 (CW)]       [Cánh 2 (CCW)]
                \                 /
                 \   Trục X (+)  /
                  \    (Pitch)  /
                   \     ▲     /
                    \    |    /
                     [Khung F450]
                    /    |    \
                   /     |     \
                  /      ▼      \
                 /  Trục Y (Roll)\
                /                 \
          [Cánh 4 (CCW)]      [Cánh 3 (CW)]

Mục tiêu dự án

  1. Nghiên cứu lý thuyết động học và động lực học 6 bậc tự do (6-DOF): Xây dựng hệ phương trình vi phân mô tả chuyển động quán tính và khí động học của quadrotor.
  2. Thiết kế phần cứng hệ thống nhúng điều khiển: Tích hợp khối vi điều khiển ATmega328P (Arduino Uno R3), khối cảm biến hồi chuyển MEMS 3 trục (L3G4200D), mạch phân phối nguồn và điều tốc điện tử (ESC 30A).
  3. Phát triển và nhúng thuật toán điều khiển PID thời gian thực: Tính toán và bù sai số các trục Roll ($\phi$), Pitch ($\theta$) và Yaw ($\psi$) để đảm bảo cân bằng động lực học.
  4. Tích hợp kênh truyền nhận vô tuyến RF 2.4GHz: Xử lý và ánh xạ tín hiệu điều khiển từ bộ thu phát 6 kênh Flysky FS-i6 sang độ rộng xung điều chế (PWM) 1000µs – 2000µs.
  5. Thử nghiệm và tối ưu hóa hệ thống: Cân chỉnh tham số độ lợi PID ($K_p, K_i, K_d$), giảm thiểu dao động góc nghiêng, đảm bảo thời gian bay ổn định từ 4-5 phút với tải trọng thực tế.

Phương pháp tiếp cận và Giới hạn dự án

Hệ thống sử dụng giải pháp module hóa, tận dụng nền tảng vi điều khiển mã nguồn mở ATmega328P kết hợp cảm biến con quay hồi chuyển kỹ thuật số L3G4200D qua giao thức I2C tốc độ cao. Dự án giới hạn trong phạm vi khung máy bay kích thước chuẩn F450 ($500 \times 500 \times 100\text{ mm}$), khối lượng cất cánh tối đa (Takeoff Weight - AUW) đạt $1.2\text{ kg}$, sử dụng nguồn pin Lithium Polymer (Li-Po) 3S $11.1\text{V} - 2200\text{ mAh}$ với tỷ lệ xả $35\text{C}$.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trước khi xây dựng hệ thống, các giải pháp điều khiển bay hiện hữu trên thị trường được phân tích chi tiết nhằm xác định kiến trúc kỹ thuật tối ưu:

Tiêu chí so sánh Commercial FC (DJI NAZA-M V2) Open-Source Advanced (Pixhawk/APM 2.8) Giải pháp DIY Arduino Uno (Đề tài)
Kiến trúc phần cứng Đóng kín (Proprietary ARM) Mở (STM32F4 / ATmega2560) Mở hoàn toàn (ATmega328P 8-bit 16MHz)
Khả năng can thiệp thuật toán Không hỗ trợ (Blackbox) Phức tạp, nhiều lớp trừu tượng Can thiệp trực tiếp vào thanh ghi & vòng lặp PID
Chi phí triển khai Rất cao (~$150 - $300) Trung bình (~$60 - $120) Thấp / Tối ưu sinh viên (~$20 - $35)
Khả năng học thuật / R&D Thấp (Chỉ cấu hình tham số) Trung bình (Đòi hỏi chuyên sâu C++) Cực cao (Trực quan, kiểm soát 100% mã nguồn)
Tần số lấy mẫu PID 400 Hz 400 Hz - 1 kHz 100 Hz - 250 Hz (Đảm bảo cân bằng cơ bản)

Phân loại yêu cầu hệ thống (MoSCoW)

  • Must have (Bắt buộc có): Hệ thống đọc dữ liệu cảm biến L3G4200D qua I2C; thuật toán PID tính toán sai số góc Roll/Pitch/Yaw; xuất xung PWM điều khiển 4 ESC; ngắt kết nối an toàn khi mất sóng (Failsafe).
  • Should have (Nên có): Mạch đo phân áp kiểm tra dung lượng pin Li-Po chống tụt áp; đèn LED báo trạng thái hoạt động; căn chỉnh điểm 0 (gyro calibration) khi khởi động.
  • Could have (Có thể mở rộng): Tích hợp cảm biến gia tốc kế (Accelerometer) và từ kế (Magnetometer) để xây dựng bộ lọc bù (Complementary Filter) hoặc lọc Kalman; bổ sung cảm biến siêu âm/áp suất giữ độ cao.
  • Won't have (Chưa thực hiện trong pha này): Định vị vệ tinh toàn cầu (GPS Auto-waypoint) và truyền video FPV thời gian thực.

Thiết kế hệ thống

+-----------------------------------------------------------------------+
|                         HỆ THỐNG ĐIỀU KHIỂN QUADCOPTER                |
+-----------------------------------------------------------------------+
|  [Khối Nguồn]                                                         |
|   Pin Li-Po 3S 11.1V 2200mAh ---> Phân phối nguồn ESC (11.1V - 12.6V) |
|                               ---> Arduino Vin / LDO 5V               |
|                                                                       |
|  [Khối Cảm biến]                  [Khối Xử lý Trung tâm]               |
|   Gyro L3G4200D (3-Axis)          Arduino Uno R3 (ATmega328P)         |
|   (SCL, SDA) -------------------> [Giao tiếp I2C - Pin A4, A5]        |
|                                                                       |
|  [Khối Thu Vô tuyến]              [Thuật toán PID Core]               |
|   Receiver Flysky FS-iA6          Tính toán sai số Roll/Pitch/Yaw     |
|   (Kênh 1, 2, 3, 4) ------------> [Đọc xung PPM/PWM - Pin 8,9,10,11]  |
|                                            |                          |
|                                            v                          |
|  [Khối Chấp hành - Động lực]      [Điều chế xung PWM Output]          |
|   4x ESC 30A (Opto/BEC) <--------- [Chân D4, D5, D6, D7]              |
|         |                                                             |
|         v                                                             |
|   4x Motor Brushless A2212 1000KV + Cánh quạt EPP1045                 |
+-----------------------------------------------------------------------+

Công nghệ và Thông số kỹ thuật chi tiết

  1. Vi điều khiển trung tâm: Microchip ATmega328P hoạt động ở tần số thạch anh $16\text{ MHz}$, $32\text{ KB}$ Flash Memory, $2\text{ KB}$ SRAM.
  2. Cảm biến con quay hồi chuyển MEMS: STMicroelectronics L3G4200D, độ phân giải $16\text{-bit}$, phạm vi đo cấu hình ở mức $\pm 2000\text{ dps}$ (degrees per second), độ nhạy $8.75\text{ mdps/LSB}$, tích hợp bộ đệm FIFO $1024\text{ bytes}$ và giao tiếp $I^2C$ chuẩn Fast-mode ($400\text{ kHz}$).
  3. Động cơ không chổi than (BLDC): A2212 1000KV (tốc độ vòng quay $1000\text{ RPM/Volt}$), dòng tải cực đại $12\text{A}/60\text{s}$, hiệu suất tạo lực nâng tối đa $800\text{ g/động cơ}$ khi kết hợp cùng cánh quạt $10 \times 4.5\text{ inch}$.
  4. Bộ điều tốc điện tử (ESC): ESC 30A hỗ trợ nguồn $2-3\text{S LiPo}$, chuyển mạch công suất 3 pha thông qua mạng MOSFET điều khiển bởi vi xử lý nội suy, nhận tín hiệu xung điều khiển $50\text{ Hz}$ chu kỳ $20\text{ ms}$.
  5. Khối truyền thông vô tuyến: Bộ điều khiển Flysky FS-i6 và máy thu FS-iA6 sử dụng công nghệ nhảy tần tự động kỹ thuật số AFHDS 2A trên dải tần $2.4\text{ GHz} - 2.48\text{ GHz}$, băng thông $500\text{ kHz}$, tầm hoạt động lý thuyết $300\text{ m} - 600\text{ m}$.

Phương pháp nghiên cứu và Lộ trình thực hiện

Dự án áp dụng mô hình phát triển tích hợp phần cứng - phần mềm theo phương pháp V-Model kết hợp các chu kỳ lặp (iterative prototyping) trong thời gian 11 tuần:

Tuần 01-02: Nghiên cứu lý thuyết khí động học, mô hình hóa toán học 6-DOF.
Tuần 03-04: Thiết lập môi trường Arduino IDE, lập trình kiểm thử Timer/PWM/GPIO.
Tuần 05-06: Thiết kế mạch phân phối, ghép nối phần cứng và kiểm tra cảm biến I2C.
Tuần 07-08: Lập trình đọc tín hiệu thu nhận RF 2.4GHz và tiền xử lý dữ liệu con quay.
Tuần 09-10: Cài đặt thuật toán PID, cân chỉnh tham số trên bệ thử (Gimbal rig) và bay tự do.
Tuần 11:    Thu thập số liệu, đánh giá độ ổn định, hoàn thiện luận văn kỹ thuật.

Implementation và kết quả

Quá trình phát triển và Thuật toán điều khiển

1. Mô hình toán học động lực học Quadcopter

Chuyển động của quadcopter được biểu diễn qua ma trận xoay Euler $R$ chuyển đổi giữa Hệ quy chiếu quán tính Trái Đất ($E_I$) và Hệ quy chiếu gắn liền thân máy bay ($E_B$):

$$R = \begin{pmatrix} C_\theta C_\psi & S_\phi S_\theta C_\psi - C_\phi S_\psi & C_\phi S_\theta C_\psi + S_\phi S_\psi \ C_\theta S_\psi & S_\phi S_\theta S_\psi + C_\phi C_\psi & C_\phi S_\theta S_\psi - S_\phi C_\psi \ -S_\theta & S_\phi C_\theta & C_\phi C_\theta \end{pmatrix}$$

(Trong đó $C_x = \cos(x)$, $S_x = \sin(x)$, $\phi$ là góc Roll, $\theta$ là góc Pitch, $\psi$ là góc Yaw)

Tổng lực nâng $T$ được tổng hợp từ 4 động cơ theo vận tốc góc $\omega_i$:

$$T = \sum_{i=1}^4 F_i = b \sum_{i=1}^4 \omega_i^2$$

Mô hình khí động học dòng khí đi qua đĩa cánh quạt diện tích $S$ trong môi trường không khí mật độ $\rho = 1.184\text{ kg/m}^3$ (ở $25^\circ\text{C}$):

$$T_{MN} = 2\rho S v_1^2 \implies v_1 = \sqrt{\frac{W_P}{2S\rho}}$$

2. Cấu trúc thuật toán điều khiển PID rời rạc

Bộ điều khiển cân bằng sử dụng phương trình vi tích phân tỉ lệ:

$$u(t) = K_p e(t) + K_i \int_0^t e(\tau)d\tau + K_d \frac{de(t)}{dt}$$

#include <Wire.h>
#include <Servo.h>

#define L3G4200D_ADDRESS 0x69

// Khai báo đối tượng điều khiển 4 ESC
Servo esc_front_left, esc_front_right, esc_rear_left, esc_rear_right;

// Biến điều khiển PID
float Kp_roll = 1.35, Ki_roll = 0.04, Kd_roll = 18.5;
float Kp_pitch = 1.35, Ki_pitch = 0.04, Kd_pitch = 18.5;
float Kp_yaw = 3.5, Ki_yaw = 0.02, Kd_yaw = 0.0;

float error_roll, error_pitch, error_yaw;
float p_term_roll, i_term_roll, d_term_roll, pid_output_roll;
float p_term_pitch, i_term_pitch, d_term_pitch, pid_output_pitch;
float p_term_yaw, i_term_yaw, d_term_yaw, pid_output_yaw;

float gyro_roll_input, gyro_pitch_input, gyro_yaw_input;
float desired_roll_angle = 0, desired_pitch_angle = 0, desired_yaw_angle = 0;
float prev_error_roll = 0, prev_error_pitch = 0, prev_error_yaw = 0;

int throttle = 1000;
unsigned long loop_timer;

void setupL3G4200D(int scale) {
  Wire.beginTransmission(L3G4200D_ADDRESS);
  Wire.write(0x20); // CTRL_REG1
  Wire.write(0b00001111); // Bật Normal Mode, kích hoạt 3 trục X, Y, Z
  Wire.endTransmission();

  Wire.beginTransmission(L3G4200D_ADDRESS);
  Wire.write(0x23); // CTRL_REG4
  if (scale == 2000) {
    Wire.write(0b00100000); // Tỷ lệ đo 2000 dps
  }
  Wire.endTransmission();
}

void readGyroData() {
  Wire.beginTransmission(L3G4200D_ADDRESS);
  Wire.write(0xA8); // Auto-increment đọc từ OUT_X_L (0x28)
  Wire.endTransmission();
  Wire.requestFrom(L3G4200D_ADDRESS, 6);
  
  while(Wire.available() < 6);
  int16_t raw_x = (Wire.read() | (Wire.read() << 8));
  int16_t raw_y = (Wire.read() | (Wire.read() << 8));
  int16_t raw_z = (Wire.read() | (Wire.read() << 8));

  // Chuyển đổi giá trị thô sang gia tốc góc dps (Hệ số nhạy 8.75 mdps/LSB)
  gyro_roll_input = raw_x * 0.00875;
  gyro_pitch_input = raw_y * 0.00875;
  gyro_yaw_input = raw_z * 0.00875;
}

void setup() {
  Wire.begin();
  TWBR = 12; // Cấu hình tốc độ I2C Bus đạt 400kHz Fast Mode
  
  esc_front_left.attach(4);
  esc_front_right.attach(5);
  esc_rear_left.attach(6);
  esc_rear_right.attach(7);

  setupL3G4200D(2000);
  loop_timer = micros();
}

void loop() {
  readGyroData();

  // Tính toán sai số góc (Error Calculation)
  error_roll = gyro_roll_input - desired_roll_angle;
  error_pitch = gyro_pitch_input - desired_pitch_angle;
  error_yaw = gyro_yaw_input - desired_yaw_angle;

  // Tính toán khâu PID cho trục Roll
  p_term_roll = Kp_roll * error_roll;
  i_term_roll += Ki_roll * error_roll;
  i_term_roll = constrain(i_term_roll, -400, 400); // Khống chế hiện tượng Windup
  d_term_roll = Kd_roll * (error_roll - prev_error_roll);
  pid_output_roll = p_term_roll + i_term_roll + d_term_roll;
  prev_error_roll = error_roll;

  // Tính toán khâu PID cho trục Pitch
  p_term_pitch = Kp_pitch * error_pitch;
  i_term_pitch += Ki_pitch * error_pitch;
  i_term_pitch = constrain(i_term_pitch, -400, 400);
  d_term_pitch = Kd_pitch * (error_pitch - prev_error_pitch);
  pid_output_pitch = p_term_pitch + i_term_pitch + d_term_pitch;
  prev_error_pitch = error_pitch;

  // Ma trận trộn tín hiệu điều khiển động cơ (Motor Output Mixing)
  if (throttle > 1050) {
    int pwm_fl = throttle + pid_output_pitch + pid_output_roll - pid_output_yaw;
    int pwm_fr = throttle + pid_output_pitch - pid_output_roll + pid_output_yaw;
    int pwm_rl = throttle - pid_output_pitch + pid_output_roll + pid_output_yaw;
    int pwm_rr = throttle - pid_output_pitch - pid_output_roll - pid_output_yaw;

    // Giới hạn giá trị PWM an toàn gửi tới ESC [1100µs - 2000µs]
    esc_front_left.writeMicroseconds(constrain(pwm_fl, 1100, 2000));
    esc_front_right.writeMicroseconds(constrain(pwm_fr, 1100, 2000));
    esc_rear_left.writeMicroseconds(constrain(pwm_rl, 1100, 2000));
    esc_rear_right.writeMicroseconds(constrain(pwm_rr, 1100, 2000));
  } else {
    // Động cơ ở chế độ nghỉ (Idle/Disarmed)
    esc_front_left.writeMicroseconds(1000);
    esc_front_right.writeMicroseconds(1000);
    esc_rear_left.writeMicroseconds(1000);
    esc_rear_right.writeMicroseconds(1000);
  }

  // Duy trì chu kỳ điều khiển chính xác 250Hz (4000 microseconds)
  while(micros() - loop_timer < 4000);
  loop_timer = micros();
}

Thử nghiệm và Đánh giá hiệu năng

Biên độ dao động góc (Độ)
+45° |        /---\ (Góc kích thích thực tế 45°)
     |       /     \
  0° |------/-------\---------------------- (Trạng thái cân bằng mục tiêu)
     |               \_____/
-45° |
     +----------------------------------------> Thời gian (ms)
     0ms   150ms   300ms   450ms   600ms (Ổn định sau < 420ms)
  1. Kiểm thử tĩnh trục xoay (Single-Axis Testbench): Khung máy bay được cố định trên giá đỡ trục quay tự do để đo đáp ứng PID khi thay đổi góc nghiêng $45^\circ$. Kết quả cho thấy thời gian xác lập (Settling Time) đạt xấp xỉ $420\text{ ms}$, độ vọt lố (Overshoot) dưới $8.5%$.
  2. Kiểm thử tuyến tính tín hiệu Radio: 4 kênh TX (Throttle, Aileron, Elevator, Rudder) được đo kiểm trên Serial Monitor của Arduino IDE, độ trễ tín hiệu từ cần gạt đến phản hồi vi điều khiển duy trì dưới $18\text{ ms}$.
  3. Thử nghiệm cất cánh và bay treo (Hovering Test): Máy bay duy trì vị trí cân bằng trên không với góc trôi sai lệch danh định $\pm 1.8^\circ$ trên trục Roll và Pitch trong điều kiện gió nhẹ ($< 2\text{ m/s}$).
Chỉ số hiệu năng (Metrics) Kế hoạch thiết kế Kết quả thực nghiệm Mức độ hoàn thành
Khối lượng toàn tải (AUW) $\le 1250\text{ g}$ $1200\text{ g}$ $100%$
Thời gian bay duy trì (Flight Endurance) $4.0\text{ phút}$ $4.5\text{ phút}$ $112.5%$
Chu kỳ vòng lặp PID $250\text{ Hz}$ ($4.0\text{ ms}$) $250\text{ Hz} \pm 0.05\text{ ms}$ $100%$
Độ trễ phản hồi tay điều khiển $< 30\text{ ms}$ $18\text{ ms}$ $140%$ (Tốt hơn)
Sai số góc cân bằng động $<\pm 3.0^\circ$ $\pm 1.8^\circ$ $140%$ (Tốt hơn)

Đổi mới và đóng góp

  1. Làm chủ cấu trúc thuật toán điều khiển nhúng trên MCU 8-bit: Thay vì sử dụng firmware dựng sẵn như Cleanflight hay ArduCopter, dự án tự triển khai toàn bộ quy trình đọc dữ liệu cảm biến I2C thanh ghi, lọc tín hiệu thô, tính toán giải thuật PID và trộn kênh tín hiệu PWM trên nền vi điều khiển hạn chế tài nguyên ATmega328P ($16\text{ MHz}$, $2\text{ KB}$ RAM).
  2. Tối ưu hóa băng thông I2C: Bằng cách can thiệp thanh ghi TWBR = 12, tần số xung nhịp bus I2C được đẩy từ $100\text{ kHz}$ lên $400\text{ kHz}$, giảm thời gian đọc dữ liệu con quay hồi chuyển 3 trục từ $1.8\text{ ms}$ xuống còn $0.45\text{ ms}$, giải phóng $75%$ thời gian CPU cho việc xử lý ma trận PID.
  3. Mô hình hóa chi phí siêu tiết kiệm: Chi phí linh kiện phần cứng giảm hơn $65%$ so với các cấu hình thương mại cùng tải trọng, tạo tiền đề cho giáo trình thực hành điều khiển tự động và robot hàng không giá rẻ.

Ứng dụng thực tế và triển khai

+-------------------------------------------------------------------------+
|                  CÁC KỊCH BẢN ỨNG DỤNG THỰC TẾ CỦA DỰ ÁN               |
+-------------------------------------------------------------------------+
|                                                                         |
|  [Cứu hộ Khẩn cấp]           [Nông nghiệp Thông minh]   [Kiểm tra Hạ tầng]
|  Thả gói hàng y tế (<300g)   Phun thuốc trừ sâu vi mô   Quan sát vết nứt
|  vào khu vực ngập lụt chia   cho diện tích cục bộ hẹp   cầu đường, mái tôn
|  cắt giao thông đường bộ.    tiết kiệm hóa chất.        khó tiếp cận.   |
|                                                                         |
+-------------------------------------------------------------------------+

Hướng dẫn triển khai và Quy trình vận hành (Checklist)

  1. Kiểm tra an toàn nguồn điện (Pre-flight Inspection): Đảm bảo pin Li-Po 3S đạt điện áp tối thiểu $12.4\text{V}$ ($4.13\text{V/cell}$). Kiểm tra độ chặt của ốc siết cánh quạt EPP1045.
  2. Khởi tạo và cân chỉnh cảm biến: Đặt Quadcopter trên mặt phẳng nằm ngang tĩnh trước khi cấp nguồn. Giữ yên thân máy trong 3 giây để thuật toán lấy mẫu điểm 0 tĩnh (Offset Calibration).
  3. Quy trình kích hoạt động cơ (Arming Sequence):
    • Đưa cần gạt Throttle (Kênh 3) về vị trí thấp nhất ($1000\mu\text{s}$).
    • Gạt cần Yaw (Kênh 4) sang hết góc phải dưới để Arm hệ thống.
    • Nâng dần cần Ga qua ngưỡng $1150\mu\text{s}$ để cất cánh.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Trôi góc tích lũy (Gyro Drift): Cảm biến L3G4200D chỉ đo vận tốc góc. Việc tích phân gia tốc góc theo thời gian mà không có cảm biến gia tốc kế (Accelerometer) và từ kế (Magnetometer) tham chiếu trọng lực dẫn đến hiện tượng trôi điểm không (Zero-rate drift) sau thời gian bay dài.
  • Giới hạn bộ nhớ và năng lực tính toán: Vi điều khiển ATmega328P không có bộ tính toán số thực dấu phẩy động (Hardware FPU), hạn chế việc triển khai các thuật toán lọc thích nghi phức tạp như Extended Kalman Filter (EKF).
  • Chưa có cơ chế định vị không gian: Quadcopter hoạt động ở chế độ bán tự động (Attitude Mode), chưa thể tự động giữ vị trí (Position Hold) khi có gió lớn do thiếu GPS và cảm biến đo độ cao bằng sóng siêu áp/barometer.

Hướng phát triển nâng cao

  • Nâng cấp phần cứng lên kiến trúc ARM Cortex-M4 (STM32F405/F411) xung nhịp $168\text{ MHz}$ hỗ trợ tính toán ma trận thực thời gian thực.
  • Tích hợp cụm cảm biến đo quán tính 9 trục (IMU 9-DOF: MPU9250 hoặc ICM-20948) kết hợp thuật toán lọc bù góc Madgwick/Mahony.
  • Bổ sung module GPS Ublox NEO-M8N và cảm biến áp suất BMP280 để hiện thực hóa tính năng tự động quay về điểm cất cánh (Return to Home - RTH).

Đối tượng hưởng lợi

  • Sinh viên ngành Kỹ thuật Điện tử - Điều khiển & Tự động hóa: Tài liệu cung cấp toàn bộ nền tảng toán học, sơ đồ mạch nguyên lý và mã nguồn C++ trực quan để học tập môn Kỹ thuật Vi điều khiển, Xử lý tín hiệu và Lý thuyết Điều khiển tự động.
  • Kỹ sư phát triển hệ thống nhúng (Embedded Developers): Nắm vững kỹ thuật lập trình giao tiếp I2C tốc độ cao, xử lý tín hiệu ngắt điều chế PWM và kỹ thuật tối ưu hóa tài nguyên phần cứng trên vi điều khiển hạn chế RAM.
  • Các nhóm nghiên cứu Robot và Drone: Nền tảng khung gầm mở (open-architecture) giúp dễ dàng tích hợp các payload thử nghiệm như cánh tay robot mini, cảm biến đo chất lượng không khí hoặc camera kiểm định.

Câu hỏi thường gặp

1. Cấu hình phần cứng tối thiểu để triển khai dự án này là gì?

Hệ thống yêu cầu tối thiểu một vi điều khiển ATmega328P (hoặc kit Arduino Uno/Nano), một cảm biến Gyroscope I2C (như L3G4200D hoặc MPU6050), 4 động cơ BLDC 1000KV, 4 ESC 30A, khung F450 và một bộ nguồn pin Li-Po 3S dung lượng từ $2200\text{ mAh}$ trở lên.

2. Làm thế nào để khắc phục hiện tượng rung lắc (vibration) ảnh hưởng tới cảm biến Gyro?

Cần thực hiện cân bằng động (dynamic balancing) cho cánh quạt và chuông động cơ trước khi lắp đặt. Ngoài ra, module cảm biến cần được gắn trên đế cao su chống rung (anti-vibration damping mount) và lọc nhiễu dải thông thấp (Low Pass Filter) bằng phần mềm.

3. Có thể nạp code này trực tiếp cho vi điều khiển STM32 hoặc ESP32 không?

Mã nguồn sử dụng thư viện chuẩn Wire.h và hàm micros() nên hoàn toàn có thể chuyển đổi sang STM32 (sử dụng Arduino Core for STM32) hoặc ESP32 với thay đổi nhỏ ở cấu hình chân GPIO và bộ phát xung phần cứng PWM.

4. Chi phí chế tạo trọn gói mô hình này khoảng bao nhiêu?

Tổng kinh phí hoàn thiện mô hình rơi vào khoảng $1.500.000 - 2.200.000\text{ VNĐ}$ (tùy thuộc vào xuất xứ của bộ tay điều khiển TX-RX và động cơ), tiết kiệm hơn $70%$ so với việc trang bị các bộ kit Drone đóng gói sẵn.

5. Tại sao cần khống chế giá trị tích phân (Anti-windup) trong thuật toán PID?

Khi máy bay bị nghiêng hoặc gặp cản trở cơ học không thể đạt được góc mong muốn ngay lập tức, thành phần tích phân $I$ sẽ liên tục tích lũy sai số lên giá trị cực lớn, dẫn đến hiện tượng vọt lố nghiêm trọng và mất ổn định khi máy bay thoát khỏi vật cản.


Kết luận

Đồ án tốt nghiệp "Thiết kế và thi công mô hình máy bay Quadcopter" đã nghiên cứu toàn diện từ cơ sở lý thuyết khí động học, mô hình hóa động lực học 6 bậc tự do đến thi công hoàn thiện phần cứng và nhúng thuật toán điều khiển PID trên nền tảng vi điều khiển ATmega328P. Mô hình thực nghiệm đã chứng minh khả năng tự cân bằng ổn định, phản hồi điều khiển nhạy bén và tối ưu hóa chi phí sản xuất. Đề tài mở ra nền tảng quan trọng cho việc tiếp tục phát triển các hệ thống thiết bị bay thông minh, tự hành hoàn toàn phục vụ cộng đồng và đời sống xã hội trong tương lai.