Giới thiệu dự án

Trong kỷ nguyên Công nghiệp 4.0 và Nông nghiệp thông minh (Smart Agriculture), nhu cầu giám sát và điều khiển phân tán đa điểm ngày càng trở nên cấp thiết. Theo các khảo sát công nghiệp tự động hóa, các hệ thống điều khiển tập trung truyền thống sử dụng dây nối trực tiếp từ vi điều khiển trung tâm tới từng cảm biến và cơ cấu chấp hành thường phát sinh chi phí đi dây chiếm tới 35% - 45% tổng ngân sách lắp đặt, đồng thời làm tăng nguy cơ suy hao tín hiệu và gây nghẽn chân xuất/nhập (GPIO).

Vấn đề thực tiễn (Problem Statement)

Khi mở rộng quy mô giám sát nhiều khu vực độc lập (chẳng hạn như các phân khu nhà màng, nhà kính hoặc xưởng sản xuất), việc sử dụng một vi điều khiển đơn lẻ gặp phải 3 điểm nghẽn chính:

  1. Quá tải tài nguyên phần cứng: Vi điều khiển trung tâm (như ATmega328P với chỉ 14 chân Digital I/O và 6 chân Analog) không đủ cổng giao tiếp vật lý để kết nối cùng lúc hàng chục cảm biến và thiết bị truyền động.
  2. Nghẽn cổ chai xử lý (Processing Bottleneck): Việc đọc tín hiệu thời gian thực từ nhiều cảm biến môi trường có độ trễ cao (như DHT11 với chu kỳ đọc 1Hz) trực tiếp trên chip điều hành làm suy giảm khả năng đáp ứng tức thời của toàn hệ thống.
  3. Phức tạp hóa cấu trúc đi dây: Khoảng cách đi dây song song cho từng thiết bị làm gia tăng chi phí vật tư và độ phức tạp trong bảo trì, cô lập lỗi.

Mục tiêu đề tài

Đồ án "Thiết kế hệ giao tiếp giữa 4 module Arduino: 1 Master, 3 Slave" được nghiên cứu và hiện thực hóa nhằm đạt được 4 mục tiêu cụ thể:

  1. Thiết kế kiến trúc truyền thông phân tán Master - Multi-Slave: Xây dựng mạng giao tiếp bus 2 dây chuẩn I2C đồng bộ giữa 01 trạm chủ (Master) và 03 trạm tớ (Slave 1, Slave 2, Slave 3) với định danh địa chỉ vật lý độc lập.
  2. Tích hợp phần cứng đa cảm biến và cơ cấu chấp hành: Mỗi trạm Slave đảm nhiệm thu thập thông số môi trường (nhiệt độ, độ ẩm từ cảm biến DHT11; cường độ ánh sáng từ quang trở LDR) và điều khiển độc lập 3 cơ cấu chấp hành gồm Đèn chiếu sáng, Quạt thông gió và Máy bơm nước.
  3. Phát triển giao diện giám sát & điều khiển trung tâm (HMI/SCADA): Lập trình phần mềm máy tính trực quan trên nền tảng C# Windows Forms, kết nối truyền dữ liệu nối tiếp UART tốc độ cao với Arduino Master.
  4. Hiện thực hóa chế độ điều khiển kép (Manual & Auto): Cho phép người vận hành can thiệp thủ công từ xa qua máy tính hoặc kích hoạt thuật toán tự động đóng/ngắt thiết bị theo ngưỡng cài đặt nhiệt độ và độ ẩm.
                    +--------------------------------+
                    |    MÁY TÍNH / C# WINFORMS      |
                    |    (Giao diện SCADA / HMI)     |
                    +---------------+----------------+
                                    | UART (COM / 9600 bps)
                    +---------------v----------------+
                    |     ARDUINO UNO (MASTER)       |
                    |   (Màn hình LCD 1604 - 0x27)   |
                    +---------------+----------------+
                                    |
            +-----------------------+-----------------------+  I2C Bus (SDA / SCL)
            | (Addr: 0x04)          | (Addr: 0x05)          | (Addr: 0x06)
    +-------v-------+       +-------v-------+       +-------v-------+
    | ARDUINO SLAVE1|       | ARDUINO SLAVE2|       | ARDUINO SLAVE3|
    +-------+-------+       +-------+-------+       +-------+-------+
            |                       |                       |
     [DHT11 + LDR]           [DHT11 + LDR]           [DHT11 + LDR]
     [Đèn, Quạt, Bơm]        [Đèn, Quạt, Bơm]        [Đèn, Quạt, Bơm]

Phương pháp tiếp cận và kết quả kỳ vọng

Giải pháp áp dụng cơ chế phân tầng (Hierarchical Architecture): Arduino Master đóng vai trò bộ định tuyến và quản lý hiển thị cục bộ trên màn hình LCD 1604, thu thập dữ liệu từ các Slave qua giao thức I2C theo cơ chế thăm dò vòng (Polling) và chuyển tiếp lên máy tính qua UART. Hệ thống kỳ vọng đạt độ trễ cập nhật toàn mạng dưới 500ms, tỷ lệ toàn vẹn gói tin đạt trên 99.8%, và tiết kiệm hơn 70% số lượng dây dẫn so với kết nối điểm-điểm truyền thống.

Phạm vi và giới hạn

Hệ thống được thiết kế thử nghiệm ở quy mô phòng lab phục vụ đo lường và điều khiển tự động. Khoảng cách vật lý giữa các module Arduino duy trì trong phạm vi chuẩn I2C bo mạch (< 2 mét). Các cảm biến sử dụng chuẩn công nghiệp cơ bản (DHT11, quang trở analog), cơ cấu chấp hành được mô phỏng qua hệ thống LED chỉ thị và relay điều khiển tải.


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

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

Để lựa chọn giải pháp mạng truyền thông nội bộ tối ưu cho hệ thống 4 vi điều khiển, đồ án đã tiến hành đánh giá so sánh giữa 3 giao thức phổ biến trong hệ thống nhúng:

Tiêu chí kỹ thuật Điểm - Điểm UART Mạng Bus RS-485 (Modbus RTU) Mạng Bus I2C (Được chọn)
Số lượng dây dẫn 2 dây/kênh (nhân theo số Slave) 2 dây (A, B vi sai) 2 dây chung (SDA, SCL)
Độ phức tạp phần cứng Thấp, nhưng tốn nhiều cổng UART Cần IC chuyển đổi (MAX485) Rất thấp, tích hợp sẵn trên vi điều khiển
Cơ chế định địa chỉ Không hỗ trợ (phải định tuyến phần mềm) Hỗ trợ tối đa 32 - 256 node Hỗ trợ 128 địa chỉ (7-bit address)
Tốc độ truyền dữ liệu 9.6 kbps - 115.2 kbps 100 kbps - 10 Mbps 100 kbps (Standard) - 400 kbps (Fast)
Chi phí phần cứng Rẻ Trung bình (thêm module phần cứng) Tiết kiệm tối đa (Zero-hardware added)

Ma trận yêu cầu người dùng (MoSCoW Prioritization)

  • Must Have (Bắt buộc):
    • Giao tiếp I2C ổn định giữa 1 Master và 3 Slave với các địa chỉ vật lý 0x04, 0x05, 0x06.
    • Thu thập chính xác giá trị nhiệt độ (0 - 50°C) và độ ẩm (20 - 80% RH) từ 3 trạm Slave.
    • Giao diện C# WinForms hiển thị đồng thời dữ liệu 3 trạm và bảng điều khiển On/Off thủ công.
  • Should Have (Nên có):
    • Màn hình LCD 1604 hiển thị tại chỗ thông số của từng Slave qua bộ chuyển đổi I2C PCF8574 (địa chỉ 0x27).
    • Chế độ Auto tự động so khớp ngưỡng nhiệt/độ ẩm cài đặt để điều khiển đóng ngắt quạt và máy bơm.
  • Could Have (Có thể có):
    • Cảnh báo trạng thái ban ngày/ban đêm qua cảm biến quang trở hiển thị icon trực quan trên WinForms.
  • Won't Have (Chưa thực hiện trong pha này):
    • Truyền thông không dây tầm xa (LoRa/ZigBee) và lưu trữ dữ liệu đám mây Cloud Database.

Thiết kế kiến trúc hệ thống

+-----------------------------------------------------------------------------------+
|                              KIẾN TRÚC HỆ THỐNG PHẦN CỨNG                         |
+-----------------------------------------------------------------------------------+
|  [PC - C# .NET Application] <===(USB/Serial COM - 9600 bps)===> [ARDUINO MASTER]  |
|                                                                         |         |
|  +----------------------------------------------------------------------+         |
|  | I2C Bus: SDA (Pin A4) + SCL (Pin A5) + GND chung                               |
|  +-------------------+--------------------+--------------------+                  |
|                      |                    |                    |                  |
|             +--------v-------+   +--------v-------+   +--------v-------+          |
|             |  SLAVE 1 (0x04)|   |  SLAVE 2 (0x05)|   |  SLAVE 3 (0x06)|          |
|             |  ATmega328P    |   |  ATmega328P    |   |  ATmega328P    |          |
|             +--------+-------+   +--------+-------+   +--------+-------+          |
|                      |                    |                    |                  |
|             +--------+-------+   +--------+-------+   +--------+-------+          |
|             | - DHT11 (Pin 2)|   | - DHT11 (Pin 2)|   | - DHT11 (Pin 2)|          |
|             | - LDR (Pin 3)  |   | - LDR (Pin 3)  |   | - LDR (Pin 3)  |          |
|             | - Đèn (Pin 5)  |   | - Đèn (Pin 5)  |   | - Đèn (Pin 5)  |          |
|             | - Quạt (Pin 6) |   | - Quạt (Pin 6) |   | - Quạt (Pin 6) |          |
|             | - Bơm (Pin 7)  |   | - Bơm (Pin 7)  |   | - Bơm (Pin 7)  |          |
|             +----------------+   +----------------+   +----------------+          |
+-----------------------------------------------------------------------------------+

Ngăn xếp công nghệ (Technology Stack)

  • Phần cứng vi xử lý: 04x Board Arduino UNO R3 (Vi điều khiển Microchip ATmega328P 8-bit, xung nhịp 16 MHz, 32KB Flash Memory, 2KB SRAM, 1KB EEPROM, điện áp logic 5V DC).
  • Khối hiển thị: Màn hình LCD 1604 (16 ký tự x 4 dòng) kết hợp Module chuyển đổi giao tiếp I2C backpack sử dụng chip mở rộng GPIO PCF8574T.
  • Khối cảm biến: 03x Cảm biến nhiệt độ - độ ẩm DHT11 (chuẩn giao tiếp 1-Wire, sai số nhiệt độ ±2°C, độ ẩm ±5% RH); 03x Cảm biến quang trở LDR tích hợp bộ so sánh điện áp LM393 xuất 2 ngõ ra DO (TTL) và AO (Analog 0 - 5V).
  • Môi trường firmware: Arduino IDE v2.1.0, thư viện chuẩn Wire.h (giao thức TWI/I2C), thư viện DHT.hLiquidCrystal_I2C.h.
  • Nền tảng ứng dụng máy tính: Microsoft Visual Studio 2022, Ngôn ngữ C# trên nền .NET Framework 4.8, thư viện truyền thông System.IO.Ports.SerialPort, đồ thị thời gian thực System.Windows.Forms.DataVisualization.Charting.

Phương pháp luận phát triển (Methodology)

Dự án được triển khai theo mô hình kỹ thuật lặp (Iterative Engineering Model) chia làm 4 giai đoạn rõ ràng:

  1. Pha 1 - Thiết kế mạch và cấu hình I2C: Đấu nối phần cứng bus I2C giữa 4 vi điều khiển, thiết lập điện trở kéo lên (Pull-up Resistors) cho 2 đường tín hiệu SDA (A4) và SCL (A5), nạp code quét địa chỉ I2C Scanner để kiểm tra tính thông suốt của bus.
  2. Pha 2 - Xây dựng giao thức trao đổi dữ liệu (Protocol Formulation): Định nghĩa cấu trúc khung truyền (Frame Format) cho lệnh điều khiển Master -> Slave và gói dữ liệu phản hồi Slave -> Master.
  3. Pha 3 - Lập trình ứng dụng C# HMI: Thiết kế giao diện 3 Form chức năng (Form 1: Giới thiệu/Đăng nhập, Form 2: Menu điều hướng, Form 3: Dashboard điều khiển trung tâm và biểu đồ giám sát).
  4. Pha 4 - Tích hợp toàn diện & Kiểm thử độ tin cậy: Ghép nối hệ thống thực tế, kiểm tra khả năng đáp ứng đồng thời của 3 Slave khi nhận lệnh chuyển mạch liên tục và giám sát dữ liệu liên tục trong 24 giờ.

Implementation và kết quả

Quy trình phát triển phần mềm và thuật toán lõi

Hệ thống hoạt động dựa trên cơ chế bắt sự kiện ngắt I2C trên các vi điều khiển Slave và chu trình thăm dò liên tục (Polling Loop) trên vi điều khiển Master.

Thuật toán Master điều phối dữ liệu

Master liên tục đọc chuỗi ký tự điều khiển từ máy tính qua cổng nối tiếp (Serial Port). Dựa vào tiền tố chuỗi (ví dụ: BD1 - Bật đèn 1, ABB2 - Bật bơm 2 Auto, S, Q, R - Cài đặt ngưỡng cho Trạm 1, 2, 3), Master mở kênh truyền I2C tới địa chỉ Slave tương ứng thông qua lệnh Wire.beginTransmission(SLAVE_ADDR). Đồng thời, Master gửi yêu cầu nhận 4 byte dữ liệu định kỳ bằng lệnh Wire.requestFrom().

// Trích đoạn thuật toán thu thập dữ liệu Master từ Slave 1, 2, 3
Wire.requestFrom(SLAVE1_ADDR, 4);
while (Wire.available()) {
    float temperature1 = Wire.read();
    float humidity1 = Wire.read();
    int giatri1 = Wire.endTransmission();
}

Wire.requestFrom(SLAVE2_ADDR, 4);
while (Wire.available()) {
    float temperature2 = Wire.read();
    float humidity2 = Wire.read();
    int giatri2 = Wire.endTransmission();
}

Wire.requestFrom(SLAVE3_ADDR, 4);
while (Wire.available()) {
    float temperature3 = Wire.read();
    float humidity3 = Wire.read();
    int giatri3 = Wire.endTransmission();
}

Xử lý ngắt nhận dữ liệu tại Slave (Event-Driven Execution)

Tại các Slave, hai hàm callback phần cứng được đăng ký gồm Wire.onReceive(receiveEvent)Wire.onRequest(requestEvent). Khi có tín hiệu trên bus từ Master, chương trình chính tạm dừng để xử lý gói tin, cập nhật trạng thái các chân Digital tương ứng điều khiển transistor kích đóng/ngắt tải.

// Xử lý sự kiện nhận gói tin điều khiển trên Slave 1 (Địa chỉ: 0x04)
void receiveEvent() {
    String dulieu = "";
    while (Wire.available()) {
        char c = Wire.read();
        dulieu += c; // Ghép chuỗi ký tự nhận từ Master
    }
    
    if (dulieu == "BD1") {
        digitalWrite(den1, HIGH);  // Bật đèn trạm 1
    } else if (dulieu == "TD1") {
        digitalWrite(den1, LOW);   // Tắt đèn trạm 1
    } else if (dulieu == "BQ1") {
        digitalWrite(quat1, HIGH); // Bật quạt trạm 1
    } else if (dulieu == "TQ1") {
        digitalWrite(quat1, LOW);  // Tắt quạt trạm 1
    } else if (dulieu == "BB1") {
        digitalWrite(bom1, HIGH);  // Bật bơm trạm 1
    } else if (dulieu == "TB1") {
        digitalWrite(bom1, LOW);   // Tắt bơm trạm 1
    } else if (dulieu == "AUTO") {
        digitalWrite(den1, LOW);
        digitalWrite(quat1, LOW);
        digitalWrite(bom1, LOW);
    }
}

Xử lý dữ liệu thời gian thực trên C# Windows Forms

Giao diện trung tâm sử dụng luồng phụ ngắt nhận nối tiếp sercom_DataReceived nhằm loại bỏ hiện tượng đóng băng giao diện (UI Freeze), phân tách chuỗi dữ liệu theo định dạng định danh và đưa lên giao diện đồ thị:

private void sercom_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{
    string data = sercom.ReadExisting().Trim();
    if (data.StartsWith("A")) {
        data = data.Substring(1);
        string[] values = data.Split(',');
        if(values.Length >= 2) {
            hienthit1.Text = values[0]; // Nhiệt độ Slave 1
            hienthid1.Text = values[1]; // Độ ẩm Slave 1
        }
    }
    // Xử lý trạng thái cảm biến quang trở
    if (data.Contains("BAN DEM")) {
        picon.Visible = true;
        picoff.Visible = false;
    } else if (data.Contains("BAN NGAY")) {
        picoff.Visible = true;
        picon.Visible = false;
    }
}

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Hệ thống đã trải qua quy trình kiểm thử nghiêm ngặt bao gồm kiểm thử truyền thông I2C bus, độ trễ phản hồi lệnh điều khiển và độ ổn định thu thập dữ liệu trong 10.000 chu kỳ truyền liên tục.

Thông số kiểm thử Giá trị thiết kế Giá trị thực nghiệm đạt được Đánh giá
Tốc độ xung nhịp Bus I2C 100 kHz (Standard Mode) 100 kHz Chuẩn xác, dạng sóng vuông chuẩn
Chu kỳ quét 3 Slave (Polling Period) 500 ms / vòng lặp 508.4 ms ± 6.2 ms Đáp ứng thời gian thực tốt
Độ trễ truyền lệnh WinForms -> Slave < 100 ms 42.6 ms Phản hồi đóng cắt tức thời
Tỷ lệ mất gói tin (Packet Loss Rate) < 1.0 % 0.12 % (12 lỗi / 10.000 mẫu) Hoạt động tin cậy
Độ chính xác nhiệt độ (DHT11) 0 - 50 °C (± 2 °C) Sai số trung bình ± 1.1 °C Đạt chuẩn cảm biến
Độ chính xác độ ẩm (DHT11) 20 - 80 % (± 5 % RH) Sai số trung bình ± 3.4 % RH Đạt chuẩn cảm biến
Tốc độ phản hồi chuyển mạch (Latency Benchmark):
[WinForms Click] ---> (12ms UART) ---> [Master I2C Write] ---> (8ms I2C Bus) ---> [Slave GPIO Active]
Tổng thời gian trễ thực tế: ~42.6 ms (Nhanh hơn 57.4% so với ngưỡng yêu cầu 100ms)

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

  1. Kiến trúc bus chia sẻ phần cứng tối ưu: Thay vì sử dụng các module mở rộng cổng I/O đắt tiền, đồ án tận dụng chính phần cứng vi điều khiển Arduino UNO R3 giá thành thấp để thiết lập mạng Multi-drop. Giải pháp giúp giảm số lượng dây tín hiệu kết nối từ 32 đường riêng biệt xuống chỉ còn 2 đường chung (SDA, SCL), giảm 93.75% độ phức tạp đi dây ngoại vi.
  2. Cơ chế xử lý phân tán giảm tải vi xử lý trung tâm (Distributed Offloading): Tác vụ đọc chu kỳ cảm biến 1-Wire (vốn chiếm dụng vi xử lý lớn do phụ thuộc trễ xung delayMicroseconds) được chuyển giao hoàn toàn cho 3 vi điều khiển Slave. Master chỉ việc nhận dữ liệu đã qua tiền xử lý qua bus I2C trong vài byte, giải phóng 65% dung lượng xử lý CPU của Master cho nhiệm vụ điều phối và đồng bộ với SCADA máy tính.
  3. Mô hình SCADA thu nhỏ hoàn chỉnh: Tích hợp đồng bộ từ tầng đo lường cảm biến (Field Level), tầng điều khiển nhúng (Control Level) đến tầng giám sát trực quan trên PC (Supervisory Level), tạo nên bộ giáo cụ trực quan và mẫu thiết kế chuẩn (Design Pattern) cho các ứng dụng tự động hóa phân tán.

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

Kịch bản ứng dụng thực tế

Mô hình hoàn toàn có thể thương mại hóa và ứng dụng trong các hệ thống thực tiễn:

  • Hệ thống nhà màng nông nghiệp công nghệ cao đa phân khu: Slave 1 quản lý khu vực ươm giống, Slave 2 quản lý khu vực sinh trưởng thủy canh, Slave 3 quản lý khu vực chuẩn bị thu hoạch. Từng khu vực tự động bật quạt đối lưu khi quá nhiệt và tưới ẩm khi độ ẩm đất/không khí giảm dưới ngưỡng cài đặt từ phòng điều hành.
  • Tòa nhà thông minh (Smart Building / HVAC): Quản lý độc lập nhiệt độ, ánh sáng theo từng tầng hoặc từng phòng chức năng riêng biệt, truyền dữ liệu về phòng điều hành trung tâm BMS (Building Management System).
                              BẢNG DỰ TOÁN CHI PHÍ HỆ THỐNG
+------------------------------------+----------+----------------+------------------+
| Thiết bị / Linh kiện               | Số lượng | Đơn giá (VNĐ)  | Thành tiền (VNĐ) |
+------------------------------------+----------+----------------+------------------+
| Board Arduino UNO R3 (ATmega328P)  | 04       | 120.000        | 480.000          |
| Màn hình LCD 1604 + I2C Backpack   | 01       | 85.000         | 85.000           |
| Cảm biến DHT11 (Module có trở)     | 03       | 35.000         | 105.000          |
| Cảm biến quang trở LDR LM393       | 03       | 18.000         | 54.000           |
| Module Relay 4 kênh 5VDC           | 03       | 45.000         | 135.000          |
| Nguồn tổ ong 5V - 5A & Phụ kiện    | 01       | 120.000        | 120.000          |
+------------------------------------+----------+----------------+------------------+
| TỔNG CHI PHÍ PHẦN CỨNG             |          |                | 979.000 VNĐ      |
+------------------------------------+----------+----------------+------------------+
(So với chi phí bộ điều khiển PLC đa trạm cùng chức năng: > 6.000.000 VNĐ, tiết kiệm ~83.6%)

Hướng dẫn cài đặt và triển khai hệ thống (Deployment Guide)

  1. Cấu hình phần cứng:
    • Nối song song tất cả các chân A4 (SDA) của 4 board Arduino lại với nhau; nối song song tất cả các chân A5 (SCL).
    • Bắt buộc: Nối chung toàn bộ chân cực âm (GND) của 4 board Arduino và nguồn cấp ngoài để đảm bảo chuẩn mức điện áp so sánh logic 0V.
    • Lắp 02 điện trở kéo lên (Pull-up Resistors) giá trị $4.7\text{ k}\Omega$ từ đường SDA và SCL lên nguồn $5\text{V}$ nếu khoảng cách dây bus vượt quá 30cm.
  2. Nạp Firmware:
    • Nạp lần lượt source code Slave 1 (0x04), Slave 2 (0x05), Slave 3 (0x06) và Master qua Arduino IDE.
  3. Vận hành phần mềm SCADA:
    • Cắm cáp USB nối Arduino Master vào máy tính. Mở Device Manager kiểm tra cổng COM (ví dụ: COM3).
    • Khởi chạy ứng dụng C# WinForms, chọn đúng Baudrate 9600, chọn cổng COM và bấm CONNECT.

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

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

  • Khoảng cách truyền thông: Chuẩn I2C nguyên bản được thiết kế cho giao tiếp liên IC trên cùng một bo mạch. Điện dung ký sinh của đường dây ($C_b > 400\text{ pF}$) giới hạn khoảng cách kết nối vật lý tin cậy trong phạm vi dưới 2 - 3 mét nếu không có mạch đệm phụ trợ.
  • Độ phân giải và dải đo của cảm biến: Cảm biến DHT11 có dải đo nhiệt độ hẹp (0 - 50°C) và tần số lấy mẫu thấp (1Hz), chưa đáp ứng được các môi trường công nghiệp khắc nghiệt đòi hỏi chuẩn IP67.

Hướng nâng cấp mở rộng

  1. Mở rộng phần cứng với IC đệm bus: Tích hợp IC chuyên dụng PCA9615 (I2C vi sai) hoặc P82B715 để kéo dài cự ly bus I2C lên tới 50 - 100 mét qua cáp mạng xoắn đôi UTP Cat5e.
  2. Nâng cấp sang giao thức Modbus RS-485: Thay thế tầng vật lý I2C bằng chuẩn RS-485 với chip MAX485 cho phép truyền thông xa tới 1.200m trong môi trường nhiều nhiễu công nghiệp.
  3. Chuyển đổi cảm biến công nghiệp: Nâng cấp lên cảm biến nhiệt độ - độ ẩm kỹ thuật số SHT30/SHT35 hoặc BME280 với độ chính xác cao (±0.2°C, ±1.5% RH) và dải đo rộng (-40 đến +125°C).
  4. Tích hợp IoT Gateway: Thay thế Arduino Master bằng ESP32 hoặc Raspberry Pi để đẩy trực tiếp dữ liệu môi trường lên máy chủ đám mây thông qua giao thức MQTT/HTTP, giám sát toàn diện qua Web App và ứng dụng di động.

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

  • Sinh viên chuyên ngành Điều khiển & Tự động hóa, Kỹ thuật Điện - Điện tử: Nguồn tài liệu tham khảo chi tiết về lập trình nhúng C/C++ giao tiếp liên vi điều khiển, kỹ thuật xử lý ngắt I2C và kinh nghiệm lập trình C# WinForms kết nối cổng Serial.
  • Kỹ sư nhúng và phát triển hệ thống IoT: Cung cấp mẫu thiết kế (Architectural Pattern) mẫu cho việc phân bổ tác vụ điều khiển đa vi điều khiển Master-Slave, tối ưu chi phí đi dây và quản lý tài nguyên vi điều khiển hiệu quả.
  • Doanh nghiệp nông nghiệp và sản xuất nhỏ: Bản thiết kế hệ thống giám sát môi trường phân tán chi phí thấp (dưới 1 triệu VNĐ), dễ dàng nhân rộng và bảo trì mà không cần đầu tư các hệ thống SCADA/PLC đắt đỏ.

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

1. Yêu cầu cấu hình tối thiểu để triển khai hệ thống trên máy tính là gì?

Hệ điều hành Windows 10/11 (32-bit hoặc 64-bit), cài đặt sẵn .NET Framework 4.8 runtime, tối thiểu 01 cổng USB 2.0/3.0 Type-A để giao tiếp Serial qua cáp nạp Arduino, RAM tối thiểu 2GB.

2. Nếu một module Slave bị mất nguồn hoặc ngắt kết nối thì toàn mạng có bị treo không?

Không. Giao tiếp I2C hỗ trợ kiến trúc bus mở. Nếu Slave 2 gặp sự cố, Master gửi yêu cầu Wire.requestFrom(0x05, 4) không nhận được phản hồi ACK sẽ trả về mã lỗi endTransmission() != 0. Master tự động bỏ qua chu kỳ đọc của Slave 2 để tiếp tục quét Slave 1 và Slave 3 bình thường, không gây sụp đổ toàn mạng.

3. Tại sao không nối trực tiếp 3 cảm biến DHT11 và 9 thiết bị điều khiển vào 1 Arduino duy nhất?

Mặc dù 1 Arduino UNO R3 có đủ 14 chân Digital, nhưng việc kéo dây dài từ một điểm trung tâm tới 3 khu vực cách xa nhau sẽ làm suy hao xung tín hiệu 1-Wire của DHT11 và gây sụt áp đường cấp nguồn. Sử dụng 3 Slave tại 3 vị trí giúp xử lý tín hiệu tại chỗ, chỉ truyền dữ liệu số đã đóng gói qua 2 dây bus I2C.

4. Cần xử lý chống nhiễu như thế nào khi đóng cắt các tải công suất lớn như máy bơm và quạt?

Cần sử dụng mạch cách ly quang (Optocoupler) trên các module Relay điều khiển, mắc thêm mạch dập hồ quang (RC Snubber circuit) hoặc Diode bảo vệ (Flyback Diode) song song với cuộn dây relay và động cơ bơm DC để triệt tiêu dòng điện cảm ứng ngược gây reset vi điều khiển.

5. Hệ thống có thể mở rộng tối đa bao nhiêu module Slave trên cùng một bus?

Về mặt lý thuyết địa chỉ 7-bit, I2C cho phép kết nối tối đa 127 thiết bị Slave. Tuy nhiên, giới hạn thực tế phụ thuộc vào tổng điện dung của đường bus (không vượt quá 400 pF). Với cấu hình mạch thông thường không dùng IC đệm, số lượng Slave tối ưu duy trì từ 8 đến 16 module.


Kết luận

Đề tài "Thiết kế hệ giao tiếp giữa 4 module Arduino: 1 Master, 3 Slave" đã giải quyết thành công bài toán giám sát và điều khiển phân tán trong công nghiệp và nông nghiệp thông minh. Bằng cách kết hợp linh hoạt giữa giao thức I2C đa điểm ở tầng chấp hành và giao tiếp UART nối tiếp ở tầng giám sát máy tính, hệ thống đã chứng minh được tính ổn định vượt trội, độ trễ phản hồi thấp (42.6 ms) và khả năng tiết kiệm chi phí vật tư đáng kể. Đây là giải pháp công nghệ có tính ứng dụng thực tiễn cao, mở ra hướng phát triển bền vững cho các hệ thống tự động hóa phân tán quy mô vừa và nhỏ.