Bối cảnh và vấn đề nghiên cứu

Trong lĩnh vực kỹ thuật điện tử và tự động hóa, việc ứng dụng các board mạch phát triển mã nguồn mở như kit Arduino để xây dựng các mô hình thử nghiệm và dự án thực tế đã trở nên phổ biến. Thông thường, các ứng dụng trên kit Arduino được lập trình chủ yếu thông qua môi trường phát triển tích hợp Arduino IDE bằng ngôn ngữ C/C++. Mặc dù Arduino IDE gọn nhẹ và dễ tiếp cận, môi trường này còn hạn chế trong việc thực hiện các phép toán ma trận phức tạp, phân tích dữ liệu chuyên sâu và vẽ đồ thị trực quan thời gian thực. Nhằm mở rộng khả năng ứng dụng của kit vi điều khiển thông qua một công cụ tính toán và lập trình mạnh mẽ hơn, đề tài "Lập trình các ứng dụng trên kit Arduino bằng ngôn ngữ Matlab" được nhóm tác giả lựa chọn thực hiện.

Mục tiêu tổng quát của đề tài là nghiên cứu kit vi điều khiển Arduino Uno R3, làm chủ phương pháp lập trình điều khiển các khối chức năng của kit bằng ngôn ngữ MATLAB, đồng thời khai thác khả năng mô phỏng kit Arduino trên phần mềm Proteus như một bộ thí nghiệm ảo phục vụ học tập và nghiên cứu.

Theo phiếu giao nhiệm vụ và đề cương nghiên cứu, các nhiệm vụ cụ thể của đề tài bao gồm:

  1. Tìm hiểu cấu trúc phần cứng và nguyên lý hoạt động của Kit Arduino Uno R3.
  2. Tìm hiểu môi trường MATLAB và cài đặt gói hỗ trợ phần cứng (Hardware Support Package) cho Arduino trên nền MATLAB.
  3. Lập trình giao tiếp với các chân xuất/nhập số (Digital I/O).
  4. Lập trình giao tiếp với các chân điều chế độ rộng xung (PWM) và ngõ vào tương tự (Analog Input).
  5. Lập trình giao tiếp truyền thông nối tiếp theo chuẩn I2C.
  6. Lập trình giao tiếp truyền thông nối tiếp theo chuẩn SPI.
  7. Lập trình điều khiển góc quay động cơ Servo.
  8. Đo lường, thu thập dữ liệu và vẽ đồ thị thời gian thực (real-time) từ các cảm biến.
  9. Xây dựng môi trường mô phỏng kit Arduino Uno trên phần mềm Proteus.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Kit vi điều khiển Arduino Uno R3 (vi điều khiển ATmega328P), môi trường tính toán và lập trình MATLAB, phần mềm mô phỏng mạch điện tử Proteus (ISIS/ARES), module chuyển đổi AD/DA PCF8591, động cơ servo, cảm biến nhiệt độ (thermistor), cảm biến quang (photo-voltaic cell), biến trở, nút nhấn và hệ thống đèn LED (LED đơn, LED RGB).
  • Phạm vi không gian: Đồ án được triển khai tại Bộ môn Điện tử Công nghiệp, Khoa Điện - Điện tử, Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh.
  • Phạm vi thời gian: Đề tài được thực hiện trong thời gian từ ngày 10/03/2016 đến ngày 02/07/2016 (nghiệm thu và bảo vệ vào tháng 07/2016).

Cơ sở lý thuyết và phương pháp

Khung lý thuyết và công nghệ phần cứng, phần mềm

Nghiên cứu được xây dựng trên nền tảng tích hợp giữa phần cứng vi điều khiển và các công cụ phần mềm kỹ thuật chuyên dụng:

  • Kit vi điều khiển Arduino Uno R3: Là board mạch vi xử lý dựa trên vi điều khiển 8-bit ATmega328P của họ AVR. Mạch tích hợp bộ điều chỉnh điện áp tuyến tính 5V, thạch anh dao động tần số 16 MHz, cổng kết nối và nạp chương trình qua chuẩn USB. Phần cứng cung cấp 14 chân Digital I/O (trong đó có 6 chân hỗ trợ phát xung PWM) và 6 chân Analog Input với độ phân giải ADC 10-bit.
  • Môi trường tính toán MATLAB (Matrix Laboratory): Phần mềm do MathWorks phát triển, cung cấp môi trường tính toán số học, xử lý ma trận, thuật toán và trực quan hóa dữ liệu. Thông qua việc cài đặt MATLAB Support Package for Arduino Hardware, MATLAB có thể nhận diện đối tượng phần cứng Arduino được kết nối qua cổng COM ảo, cho phép thực thi trực tiếp các hàm điều khiển xuất/nhập tín hiệu từ cửa sổ lệnh (Command Window) hoặc tệp lệnh M-file.
  • Module chuyển đổi AD/DA PCF8591: Vi mạch tích hợp công suất thấp, dải điện áp hoạt động từ 2,5V đến 6V, độ phân giải 8-bit, giao tiếp với vi điều khiển thông qua bus nối tiếp I2C hai dây. Module tích hợp sẵn ba phần tử cảm biến: cảm biến nhiệt độ môi trường (thermistor), cảm biến cường độ ánh sáng (photo-voltaic cell) và chiết áp (potentiometer), cùng một kênh đọc tín hiệu analog mở rộng dải 0–5V.
  • Động cơ Servo: Cơ cấu chấp hành điều khiển vị trí góc quay trong dải từ 0° đến 180° thông qua tín hiệu điều chế độ rộng xung (PPM).
  • Phần mềm mô phỏng mạch Proteus: Công cụ của hãng Labcenter Electronics gồm hai phân hệ chính: ISIS (mô phỏng hoạt động mạch nguyên lý và mã thực thi vi điều khiển) và ARES (thiết kế mạch in PCB). Phần mềm cho phép nhúng tệp nhị phân .HEX được biên dịch từ Arduino IDE vào mô hình linh kiện Arduino để mô phỏng kiểm chứng logic điều khiển mà không cần lắp ráp phần cứng vật lý.

Phương pháp nghiên cứu

  • Phương pháp thực nghiệm kỹ thuật: Thiết kế sơ đồ kết nối phần cứng trên breadboard/board mạch mẫu; sử dụng máy tính làm bộ điều khiển trung tâm gửi dữ liệu điều khiển và nhận dữ liệu phản hồi từ kit Arduino Uno qua cáp USB; kiểm thử thực tế hoạt động của từng khối chức năng ngoại vi.
  • Phương pháp phân tích và lập trình kịch bản (Scripting): Viết các hàm (functions) và kịch bản lệnh trên MATLAB, sử dụng các cấu trúc xử lý sự kiện ngắt và dọn dẹp bộ nhớ đối tượng (onCleanup) để kiểm soát việc đóng/mở giao tiếp với phần cứng một cách an toàn.
  • Phương pháp mô phỏng số: Khai thác thư viện mô phỏng Arduino trên Proteus (nguồn từ github.com/blogembarbarcadobr), thiết lập các mạch điện tử ảo và nạp mã máy .HEX để đối chứng kết quả hoạt động giữa mô phỏng và mạch thực tế.
  • Nguồn dữ liệu: Tín hiệu logic nhị phân từ nút nhấn; điện áp tương tự biến thiên từ biến trở và các cảm biến trên module PCF8591; chuỗi dữ liệu nhị phân truyền nhận qua bus SPI và I2C.

Thiết kế và triển khai hệ thống

Kiến trúc sơ đồ khối hệ thống

Hệ thống được thiết kế theo mô hình điều khiển tập trung phân cấp, trong đó máy tính đóng vai trò là khối xử lý và hiển thị cấp cao, giao tiếp với kit Arduino Uno R3 làm khối điều phối phần cứng trung gian:

[ Khối Máy tính ] (Cài đặt MATLAB, soạn thảo mã M-file, giám sát thời gian thực, cấp nguồn USB)
        | (Giao tiếp nối tiếp USB / Virtual COM Port)
        v
[ Kit Arduino Uno R3 ] (Khối xử lý trung tâm - Vi điều khiển ATmega328P)
        |
        +---> [ Khối Digital I/O ] (Nút nhấn điều khiển, LED đơn)
        +---> [ Khối PWM / Analog Out ] (LED RGB, mạch điều khiển độ sáng LED)
        +---> [ Khối Analog In ] (Chiết áp / Biến trở đọc điện áp 0-5V)
        +---> [ Khối Bus I2C ] (Module PCF8591: Thermistor, Cảm biến quang, Potentiometer)
        +---> [ Khối Bus SPI ] (Mạch kiểm tra SPI Loopback: MOSI nối MISO)
        +---> [ Khối Chấp hành ] (Động cơ Servo quay góc 0° - 180°)
        +---> [ Khối Đồ thị ] (Vẽ đường cong dữ liệu cảm biến thời gian thực trên MATLAB Figure)

Thiết kế ghép nối phần cứng và phân bổ chân tín hiệu

Các khối ngoại vi được tính toán ghép nối trực tiếp với các chân chức năng trên kit Arduino Uno R3:

  1. Khối Digital I/O:
    • Đèn LED đơn kết nối với chân Digital D13 (hoặc chân D9 qua điện trở hạn dòng).
    • Nút nhấn điều khiển kết nối ngõ vào chân Digital D8.
  2. Khối PWM và Analog:
    • Đèn LED RGB loại Anode chung: Cực dương chung nối nguồn +5V; cực Red kết nối chân PWM D3; cực Green kết nối chân PWM D5; cực Blue kết nối chân PWM D6.
    • Mạch điều khiển độ sáng LED đơn kết nối chân PWM D3.
    • Biến trở đo điện áp: Hai đầu cấp nguồn +5V và GND, chân gạt trung tâm đưa tín hiệu điện áp về chân Analog A0.
  3. Khối truyền thông I2C:
    • Module PCF8591 kết nối nguồn VCC (+5V) và GND từ Arduino. Chân dữ liệu SDA nối chân Analog A4; chân xung nhịp SCL nối chân Analog A5. Địa chỉ I2C của module trên bus là 0x48.
  4. Khối truyền thông SPI:
    • Sử dụng cấu hình mạch Loopback: Chân phát dữ liệu MOSI (Digital D11) được nối trực tiếp vào chân nhận dữ liệu MISO (Digital D12). Chân chọn chip SS kết nối chân Digital D10 và chân xung nhịp SCK tại chân Digital D13.
  5. Khối động cơ Servo:
    • Dây cấp nguồn động cơ nối 5V và GND; dây điều khiển tín hiệu nối với chân Digital chỉ định trên Arduino.

Triển khai lập trình trên môi trường MATLAB

Các chương trình được xây dựng dưới dạng tệp hàm MATLAB (.m) với việc tận dụng các tập lệnh do gói MATLAB Support Package for Arduino Hardware cung cấp:

  • Khởi tạo và giải phóng kết nối: Khởi tạo đối tượng giao tiếp qua câu lệnh board = arduino(). Để đảm bảo an toàn phần cứng khi kết thúc chương trình hoặc khi người dùng ngắt đột ngột (nhấn Ctrl+C), đối tượng finishup = onCleanup(@() exitprogram(board)) được sử dụng để tự động giải phóng đối tượng (clear board).
  • Xử lý Digital I/O: Sử dụng configurePin(board, pin, 'DigitalInput') để cấu hình chân ngõ vào; hàm readDigitalPin(board, pin) để đọc trạng thái nút nhấn; hàm writeDigitalPin(board, pin, state) để xuất tín hiệu điều khiển bật/tắt LED.
  • Xử lý xung PWM và điện áp Analog: Sử dụng hàm configurePin(board, pin, 'PWM'); hàm writePWMDutyCycle(board, pin, dutyCycle) để thay đổi chu kỳ xung điều khiển màu sắc LED RGB; hàm writePWMVoltage(board, pin, voltage) để điều chỉnh mức điện áp từ 0V đến 5V thay đổi độ sáng LED; hàm readVoltage(board, pin) để đo trực tiếp giá trị điện áp từ chân Analog.
  • Truyền thông I2C: Hàm scanI2CBus(board, 0) quét tìm thiết bị trên bus; hàm i2cdev(board, '0x48') thiết lập đối tượng thiết bị. Việc đọc các kênh cảm biến của PCF8591 được thực hiện bằng cách ghi byte cấu hình kênh (kênh 40 cho thermistor, kênh 41 cho cảm biến quang, kênh 43 cho biến trở) thông qua hàm write() và đọc dữ liệu trả về qua hàm read().
  • Truyền thông SPI: Thiết lập đối tượng SPI thông qua hàm spidev(board, 10) (chân SS là 10). Gửi và nhận mảng dữ liệu đồng thời trên đường Loopback thông qua hàm dataOut = writeRead(spi, dataIn).
  • Điều khiển Servo: Tạo đối tượng servo bằng hàm s = servo(board, pin); đọc góc quay trục bằng readPosition(s); xuất lệnh điều khiển vị trí góc quay bằng hàm writePosition(s, position).
  • Thu thập dữ liệu và hiển thị đồ thị thời gian thực: Chương trình khởi tạo cửa sổ đồ họa figure(1), định nghĩa 3 đối tượng đường vẽ line() với ba màu sắc phân biệt (đỏ cho nhiệt độ, xanh lá cho ánh sáng, xanh dương cho biến trở). Vòng lặp while 1 liên tục cập nhật tọa độ trục X (thời gian i) và trục Y (giá trị ADC) bằng các hàm set() và get() sau mỗi chu kỳ lấy mẫu 0,5 giây.

Nội dung chính theo từng chương

Chương 1. Tổng quan

Chương 1 trình bày lý do chọn đề tài, nêu bật sự cần thiết của việc tiếp cận một phương pháp lập trình mới cho kit Arduino thông qua ngôn ngữ MATLAB thay vì chỉ phụ thuộc vào Arduino IDE truyền thống. Tác giả xác định mục tiêu trọng tâm là nghiên cứu kit Arduino Uno R3, cài đặt các gói hỗ trợ trên MATLAB, lập trình các bài toán ứng dụng phần cứng và mô phỏng trên Proteus. Giới hạn nghiên cứu được xác định rõ gồm máy tính, kit Arduino Uno R3, động cơ servo và module chuyển đổi AD/DA PCF8591. Bố cục toàn văn đồ án được phân chia thành 5 chương cụ thể.

Chương 2. Cơ sở lý thuyết

Chương này cung cấp toàn bộ nền tảng lý thuyết về phần cứng và các công cụ phần mềm:

  • Phần cứng: Trình bày chi tiết thông số kỹ thuật của kit Arduino Uno R3 dựa trên vi điều khiển ATmega328P, cấu tạo sơ đồ chân (chân nguồn, chân Digital I/O, chân PWM, các chân truyền thông UART, I2C, SPI). Giới thiệu cấu tạo, nguyên lý hoạt động của module PCF8591 và nguyên lý điều khiển góc quay động cơ servo bằng xung PPM.
  • Phần mềm MATLAB: Giới thiệu cấu trúc 5 phần chính của hệ thống MATLAB (ngôn ngữ lập trình, môi trường làm việc, xử lý đồ họa, thư viện toán học, giao diện lập trình ứng dụng API). Hướng dẫn từng bước tải và cài đặt gói Hardware Support Package for Arduino từ Internet thông qua trình quản lý Add-Ons và đăng nhập tài khoản MathWorks. Trình bày lệnh arduino để kết nối và kiểm tra cổng phần cứng.
  • Phần mềm Proteus và Arduino IDE: Giới thiệu hai phân hệ ISIS và ARES của Proteus; định nghĩa tệp định dạng nhị phân .HEX được tạo ra sau quá trình biên dịch trên Arduino IDE; hướng dẫn tải và tích hợp thư viện linh kiện Arduino từ nguồn GitHub vào Proteus.

Chương 3. Tính toán và thiết kế

Chương 3 xây dựng mô hình hệ thống hoàn chỉnh:

  • Thiết lập sơ đồ khối tổng quát thể hiện mối quan hệ liên kết giữa khối máy tính xử lý, kit trung tâm Arduino Uno và các khối ngoại vi chấp hành/cảm biến.
  • Thuyết minh chi tiết nhiệm vụ của từng khối chức năng và tính toán các yêu cầu phối ghép tín hiệu.
  • Xây dựng sơ đồ nguyên lý toàn mạch, xác định rõ ràng vị trí kết nối chân của từng linh kiện (LED đơn, LED RGB, nút nhấn, biến trở, động cơ servo, IC PCF8591) với các chân I/O tương ứng trên board Arduino Uno R3.

Chương 4. Thi công hệ thống

Chương 4 tập trung vào quy trình lắp ráp phần cứng thực tế và viết mã chương trình trên MATLAB:

  • Trình bày sơ đồ đấu nối và kịch bản lập trình M-file cho từng ứng dụng cụ thể: điều khiển LED nhấp nháy (Lednhapnhay.m), đọc nút nhấn điều khiển LED (led_pushbutton.m), điều khiển pha màu LED RGB bằng PWM (led_rgb.m), điều chỉnh độ sáng đèn LED bằng dải điện áp (led_brightness.m), đọc điện áp Analog từ biến trở (potentiometer.m).
  • Triển khai truyền thông I2C: quét tìm địa chỉ thiết bị (i2c_scan.m phát hiện địa chỉ 0x48) và đọc dữ liệu 3 cảm biến trên module PCF8591 (i2c_sensor.m).
  • Triển khai truyền thông SPI Loopback (spi_loopback.m), ghi nhận dữ liệu mảng phát đi từ MOSI trùng khớp với dữ liệu nhận về tại MISO.
  • Lập trình điều khiển vị trí trục quay động cơ servo (writePosition).
  • Lập trình thu thập tín hiệu đo lường và hiển thị đồ thị 3 đường tín hiệu cảm biến thời gian thực (sensing.m).
  • Triển khai mô phỏng trên Proteus: thiết lập các bài thí nghiệm ảo điều khiển LED đơn, LED nút nhấn, điều khiển nhiều LED, điều khiển động cơ bằng xung PWM, đo nhiệt độ hiển thị màn hình LCD 16x2.

Chương 5. Kết quả, nhận xét, đánh giá - Kết luận và hướng phát triển

Chương cuối tổng kết các kết quả đạt được sau quá trình thực nghiệm phần cứng và mô phỏng; đưa ra các nhận xét kỹ thuật về độ trễ, độ ổn định của giao tiếp giữa MATLAB và Arduino; xác định các hạn chế còn tồn tại và đề xuất các hướng nghiên cứu mở rộng trong tương lai.


Kết quả và đóng góp

Kết quả kỹ thuật thực nghiệm

Đồ án đã triển khai và kiểm thử thành công toàn bộ các module chức năng trên phần cứng thực tế và môi trường mô phỏng:

Khối chức năng / Ứng dụng Phương thức giao tiếp / Tập lệnh MATLAB chính Kết quả kỹ thuật ghi nhận trong đồ án
Bật/tắt LED đơn writeDigitalPin(board, 'D13', 1/0) Đèn LED chớp tắt theo chu kỳ trễ 1 giây; xuất thông báo trạng thái lên Command Window.
Đọc nút nhấn điều khiển LED readDigitalPin(), writeDigitalPin() Đọc chính xác trạng thái logic nút nhấn tại chân D8 và điều khiển tức thời LED tại chân D9.
Phối màu LED RGB writePWMDutyCycle() trên D3, D5, D6 Xuất chu kỳ xung điều khiển chính xác các trạng thái màu sắc: Đỏ (Red), Xanh lá (Green), Xanh dương (Blue).
Điều chỉnh độ sáng LED writePWMVoltage() trên chân D3 (dải áp 0–5V) Điều chỉnh mức điện áp tăng dần từ 0V đến 5V và giảm dần, độ sáng LED thay đổi tuyến tính từ sáng mờ đến sáng mạnh.
Đọc ngõ vào Analog readVoltage(board, 'A0') Đọc và hiển thị giá trị điện áp biến trở liên tục trên cửa sổ dòng lệnh MATLAB.
Quét và đọc cảm biến I2C scanI2CBus(), i2cdev(), hàm write(), read() Quét ra đúng địa chỉ bus 0x48; đọc đồng thời giá trị ADC 8-bit từ 3 cảm biến: Thermistor (kênh 40), Quang trở (kênh 41), Biến trở (kênh 43).
Truyền thông SPI Loopback spidev(board, 10), writeRead(spi, dataIn) Mảng dữ liệu gửi đi dataIn = [k m n] được nhận về chính xác tại dataOut sau mỗi chu kỳ tăng giá trị.
Điều khiển góc quay Servo servo(), writePosition(), readPosition() Động cơ servo thay đổi góc quay theo vị trí đặt và phản hồi giá trị góc về MATLAB.
Đồ thị cảm biến thời gian thực Đối tượng figure, hàm line(), set(), get() Vẽ và cập nhật liên tục đồ thị 3 đường cong biểu diễn sự biến thiên tín hiệu của 3 cảm biến trên PCF8591.
Mô phỏng Proteus Nhúng tệp .HEX biên dịch từ Arduino IDE Mô phỏng thành công mạch điều khiển LED, nút nhấn, điều khiển PWM, hiển thị nhiệt độ trên LCD 16x2 và điều khiển động cơ.

Đóng góp của đề tài

  • Xây dựng hoàn chỉnh quy trình kỹ thuật kết nối, cấu hình và lập trình kit vi điều khiển Arduino Uno R3 trên nền tảng phần mềm MATLAB thông qua gói MATLAB Support Package for Arduino Hardware.
  • Cung cấp tập hợp các đoạn mã nguồn mẫu M-file chuẩn hóa, có cấu trúc xử lý đóng ngắt kết nối an toàn (onCleanup), bao quát đầy đủ các ngoại vi cơ bản: I/O số, PWM, ADC, I2C, SPI, Servo và thu thập dữ liệu thời gian thực.
  • Thiết lập giải pháp mô phỏng mạch điện tử ảo cho kit Arduino trên phần mềm Proteus thông qua việc tích hợp thư viện linh kiện và nhúng tệp .HEX, đóng vai trò như một bộ công cụ thí nghiệm ảo phục vụ công tác giảng dạy và thực hành các môn học Điện tử cơ bản, Kỹ thuật số.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế của đề tài

  • Các ứng dụng thực nghiệm mới dừng lại ở việc kiểm thử từng khối ngoại vi riêng lẻ, chưa tích hợp thành một hệ thống điều khiển tự động hóa hoàn chỉnh quy mô công nghiệp.
  • Hệ thống lấy nguồn trực tiếp từ cổng USB máy tính nên bị giới hạn về công suất cấp cho các cơ cấu chấp hành công suất lớn.
  • Tốc độ lấy mẫu và cập nhật đồ thị thời gian thực còn phụ thuộc vào tốc độ truyền thông nối tiếp qua cổng COM ảo và thời gian thực thi của vòng lặp lệnh trong MATLAB.

Hướng nghiên cứu tiếp

  • Mở rộng xây dựng giao diện điều khiển và giám sát đồ họa chuyên nghiệp (GUI) trên MATLAB (sử dụng GUIDE hoặc App Designer) để người dùng thao tác trực quan hơn.
  • Nghiên cứu ứng dụng MATLAB để điều khiển các đối tượng công nghiệp phức tạp hơn như điều khiển vòng kín (thuật toán PID), điều khiển động cơ bước, động cơ không đồng bộ thông qua biến tần.
  • Tích hợp thêm các chuẩn truyền thông không dây (Bluetooth, Wi-Fi, ZigBee) giữa kit Arduino và máy tính chạy MATLAB.
  • Mở rộng giải pháp lập trình trên MATLAB cho các dòng vi điều khiển hoặc kit phát triển có cấu hình mạnh hơn (như Arduino Mega 2560, STM32, ESP32).

Giá trị tham khảo

Tài liệu đồ án là nguồn tư liệu kỹ thuật hữu ích đối với:

  • Sinh viên và giảng viên ngành Điện - Điện tử, Kỹ thuật Điện tử - Truyền thông, Tự động hóa và Cơ điện tử: Sử dụng làm tài liệu tham khảo cho các môn học Vi điều khiển, Cảm biến và Đo lường, Hệ thống nhúng và Thực tập Điện tử.
  • Người nghiên cứu và phát triển hệ thống: Tham khảo phương pháp xây dựng giao tiếp truyền thông nối tiếp giữa máy tính và vi điều khiển, kỹ thuật lập trình giao tiếp I2C với IC PCF8591, kỹ thuật kiểm tra bus SPI bằng cấu hình Loopback và giải pháp thu thập dữ liệu vẽ đồ thị thời gian thực trên MATLAB.
  • Người học cần công cụ thí nghiệm ảo: Tham khảo phương pháp tích hợp thư viện Arduino vào phần mềm Proteus và quy trình trích xuất tệp .HEX từ Arduino IDE để phục vụ mô phỏng mạch trước khi thi công phần cứng.

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

1. Khóa luận sử dụng phiên bản phần cứng Arduino nào và thông số bộ nhớ của vi điều khiển được ghi nhận ra sao?
Khóa luận sử dụng kit Arduino Uno R3 tích hợp vi điều khiển ATmega328P họ 8-bit, hoạt động ở điện áp 5V, tần số thạch anh 16 MHz. Thông số bộ nhớ bao gồm 32 KB Flash Memory (với 0,5 KB sử dụng cho bootloader), 2 KB SRAM và 1 KB EEPROM.

2. Module PCF8591 kết nối với Arduino qua các chân tín hiệu nào và có địa chỉ bus là bao nhiêu?
Module PCF8591 giao tiếp với Arduino qua bus I2C. Chân SDA của module kết nối với chân Analog A4, chân SCL kết nối với chân Analog A5 của Arduino Uno R3. Khi chạy chương trình quét scanI2CBus(board, 0), địa chỉ I2C của module được phát hiện là 0x48.

3. Cơ chế giải phóng kết nối phần cứng an toàn trong các chương trình MATLAB được thực hiện như thế nào?
Trong các tệp mã nguồn M-file, tác giả sử dụng câu lệnh finishup = onCleanup(@() exitprogram(board)). Khi chương trình kết thúc hoặc người dùng bấm tổ hợp phím Ctrl+C để ngắt ngang, hàm exitprogram() sẽ tự động được gọi để thực thi lệnh clear board, giúp giải phóng cổng giao tiếp và xóa đối tượng Arduino khỏi bộ nhớ Workspace.

4. Thử nghiệm giao tiếp SPI trong đồ án được thiết lập theo cơ chế nào?
Giao tiếp SPI được thiết lập theo cơ chế SPI Loopback để kiểm tra đường truyền dữ liệu. Phần cứng được đấu nối bằng cách nối trực tiếp chân phát dữ liệu MOSI (Digital Pin 11) sang chân nhận dữ liệu MISO (Digital Pin 12), chân chọn chip SS đặt tại Pin 10 và xung SCK tại Pin 13. Hàm writeRead(spi, dataIn) được dùng để gửi mảng dữ liệu và đọc ngược lại dữ liệu nhận về.

5. Quy trình đưa mô hình kit Arduino vào mô phỏng trên phần mềm Proteus được thực hiện như thế nào?
Tác giả tải gói thư viện mô phỏng Arduino từ nguồn github.com/blogembarbarcadobr, giải nén và thêm vào thư viện Proteus qua mục System Settings. Khi lập trình trên Arduino IDE, chương trình được biên dịch để tạo ra tệp mã máy nhị phân hệ thập lục phân .HEX. Tệp .HEX này sau đó được nạp trực tiếp vào linh kiện Arduino ảo trong sơ đồ nguyên lý trên Proteus ISIS để chạy mô phỏng.


Kết luận

Đồ án tốt nghiệp "Lập trình các ứng dụng trên kit Arduino bằng ngôn ngữ Matlab" của sinh viên Lương Đức Hậu và Lê Hiển Đạt đã giải quyết hoàn chỉnh mục tiêu làm chủ phương pháp điều khiển phần cứng kit Arduino Uno R3 thông qua môi trường tính toán MATLAB. Nhóm nghiên cứu đã thiết kế, lập trình và thực nghiệm thành công toàn bộ các chức năng Digital I/O, PWM, ngõ vào Analog, các chuẩn giao tiếp nối tiếp I2C, SPI, điều khiển động cơ servo cũng như thu thập dữ liệu cảm biến hiển thị đồ thị thời gian thực. Bên cạnh đó, giải pháp xây dựng mô hình mô phỏng kit Arduino trên Proteus đã mang lại một phương án thí nghiệm ảo trực quan, đóng góp thiết thực cho công tác học tập và nghiên cứu trong lĩnh vực kỹ thuật điện tử.