Trang chủ Điện - Điện tửArduinoKết Nối HMI TJC Với Arduino Điều Khiển Relay 4 Kênh

Kết Nối HMI TJC Với Arduino Điều Khiển Relay 4 Kênh

bởi Admin
140 lượt xem 9 Phút đọc

Điều khiển 4 Thiết bị qua HMI TJC

Hướng dẫn tích hợp toàn diện màn hình HMI TJC (USART) 2.4 inch với Arduino để điều khiển hệ thống Relay thông qua giao tiếp Serial UART.

Phần cứng

  • Arduino Uno/Nano
  • HMI TJC (2.4 inch)
  • Module 4 Relay

Logic Điều khiển

Giao tiếp 1 chiều đơn giản: HMI gửi ký tự lệnh -> Arduino nhận và đóng ngắt Relay tương ứng.


2

Kết nối Phần cứng

HMI TJC Arduino Chức năng
VCC (5V) 5V Nguồn (+5V)
GND GND Nối đất (0V)
TX D10 (RX) Gửi dữ liệu
RX D11 (TX) Nhận phản hồi
Module Relay 4 Kênh Arduino Chức năng
VCC 5V Nguồn cấp cho module Relay
GND GND Mass chung hệ thống
IN1 D2 Điều khiển Thiết bị 1
IN2 D3 Điều khiển Thiết bị 2
IN3 D4 Điều khiển Thiết bị 3
IN4 D5 Điều khiển Thiết bị 4

Cảnh báo nguồn điện

Tuyệt đối không cắm ngược dây 5V và GND. HMI sẽ hỏng ngay lập tức nếu cấp sai cực tính.


3

Lập trình HMI (USART HMI)

Bước 1

Thiết lập dự án

Tạo New Project trong phần mềm. và đặt tên cho dự án.

Tạo New Project

Bước 1.1 - Tạo New Project
  • Chọn đúng Model màn hình
  • Hướng màn hình: Ngang (0)
  • Đặt biến hệ thống bauds=9600 trong program.s

Hãy chọn program.s và đặt bauds = 9600. Điều này đảm bảo HMI và Arduino giao tiếp cùng tốc độ.

Chọn đúng Model màn hình

Bước 1.1 - Chọn đúng Model màn hình

Hướng màn hình: Ngang (0)

Bước 1.2 - Cài hướng màn hình ngang 0

Đặt biến hệ thống bauds=9600 trong program.s

Bước 1.3 - Đặt bauds bằng 9600 trong program.s
Bước 2

Tạo giao diện điều khiển

Kéo 4 nút nhấn (Button) từ thanh công cụ ra màn hình thiết kế.

Tại bảng thuộc tính (Attribute) bên phải:

  • objname: Đặt lần lượt b0, b1, b2, b3
  • txt: Sửa thành "OFF"
Bước 3

Viết lệnh (Event Code)

Chọn từng nút nhấn, tìm tab Touch Press Event ở góc dưới màn hình. Copy đoạn code logic tương ứng vào đó.

Code này xử lý việc đổi màu nút, đổi chữ ON/OFF và gửi ký tự (A, a...) xuống Arduino.

Touch Press Event Code Logic Toggle (Bật/Tắt)
Nút b0 (Thiết bị 1)
																	if(b0.txt=="OFF")
{
  b0.txt="ON"
  b0.bco=7433    // Xanh lá
  b0.pco=65535   // Chữ trắng
  print "A"      // Gửi lệnh Bật
}else
{
  b0.txt="OFF"
  b0.bco=29612   // Xám
  b0.pco=65535
  print "a"      // Gửi lệnh Tắt
}
																
Nút b1 (Thiết bị 2)
																	if(b1.txt=="OFF")
{
  b1.txt="ON"
  b1.bco=7433
  b1.pco=65535
  print "B"
}else
{
  b1.txt="OFF"
  b1.bco=29612
  b1.pco=65535
  print "b"
}
																
Nút b2 (Thiết bị 3)
																	if(b2.txt=="OFF")
{
  b2.txt="ON"
  b2.bco=7433
  b2.pco=65535
  print "C"
}else
{
  b2.txt="OFF"
  b2.bco=29612
  b2.pco=65535
  print "c"
}
																
Nút b3 (Thiết bị 4)
																	if(b3.txt=="OFF")
{
  b3.txt="ON"
  b3.bco=7433
  b3.pco=65535
  print "D"
}else
{
  b3.txt="OFF"
  b3.bco=29612
  b3.pco=65535
  print "d"
}
																
Bước 4

Nạp chương trình

Kết nối mạch nạp USB-TTL vào máy tính.

  • Nhấn nút Compile để kiểm tra lỗi.
  • Nhấn nút Download (mũi tên xanh) để nạp.

Tải File Project Mẫu

File nguồn (.HMI) đã được thiết kế giao diện và lập trình sẵn code ở trên. Bạn có thể tải về, mở bằng phần mềm USART HMI và nạp ngay.

Tải xuống (.HMI)

Tải Phần Mềm Cần Thiết

Tải phần mềm lập trình HMI và driver USB-TTL trước khi nạp code. Bạn chỉ cần thay URL ở các nút bên phải.

Hướng dẫn Nạp Code (USB-TTL)

USB TTL 5V TX RX GND HMI VCC RX TX GND
Lưu ý:  Cần cài driver (CH340/CP2102) trước khi cắm vào máy tính.
  1. Kết nối dây: Nối 4 dây theo sơ đồ. Chú ý nối chéo TX - RX.
    • USB 5V → HMI VCC
    • USB GND → HMI GND
    • USB TX → HMI RX
    • USB RX → HMI TX
  2. Cắm vào máy tính: Máy tính sẽ nhận cổng COM.
  3. Mở file project: Trong phần mềm HMI, vào File > Open và chọn file .HMI cần nạp.
  4. Nạp Code: Nhấn nút Download (biểu tượng mũi tên xanh) trên phần mềm HMI.

Nạp code cho màn HMI bằng thẻ nhớ (microSD)

Chuẩn bị thẻ nhớ

  • Format thẻ nhớ microSD thành FAT32.
  • Chép file .tft đã tải vào thẻ nhớ ( Tải tại đây).
  • Lưu ý: chỉ để 1 file duy nhất, đặt ngoài thư mục (root của thẻ).

Gắn thẻ và bắt đầu nạp

  • Tắt nguồn màn hình TJC.
  • Gắn thẻ nhớ vào khe SD.
  • Cấp nguồn lại, màn hình tự nhận file và hiển thị Updating....

Chờ hoàn tất

  • Giữ nguồn ổn định, không rút thẻ trong lúc nạp.
  • Khi báo Update Success hoặc Finished, tắt nguồn rồi rút thẻ nhớ.

Khởi động lại

  • Bật nguồn lại, màn hình sẽ chạy giao diện mới vừa nạp.

4

Code Arduino

main.ino
																						#include 
																							
// === CẤU HÌNH PIN ===
// RX_Pin (Arduino nhận) nối với HMI TX
// TX_Pin (Arduino gửi) nối với HMI RX
SoftwareSerial HmiSerial(10, 11); // RX = 10, TX = 11
// Định nghĩa chân điều khiển 4 Relay
const int RELAY_1 = 2;
const int RELAY_2 = 3;
const int RELAY_3 = 4;
const int RELAY_4 = 5;
void setup() {
  // Serial Monitor để debug trên máy tính
  Serial.begin(9600);
  
  // Giao tiếp với HMI (Bắt buộc 9600 để khớp với HMI)
  HmiSerial.begin(9600); 
  // Cấu hình Output cho Relay
  pinMode(RELAY_1, OUTPUT);
  pinMode(RELAY_2, OUTPUT);
  pinMode(RELAY_3, OUTPUT);
  pinMode(RELAY_4, OUTPUT);
  // Trạng thái ban đầu: TẮT TOÀN BỘ (Mức HIGH cho Relay kích thấp)
  digitalWrite(RELAY_1, HIGH); 
  digitalWrite(RELAY_2, HIGH);
  digitalWrite(RELAY_3, HIGH);
  digitalWrite(RELAY_4, HIGH);
  
  Serial.println("System Ready. Waiting for HMI commands...");
}
void loop() {
  // Kiểm tra có dữ liệu từ HMI gửi xuống không
  if (HmiSerial.available()) {
    String command = "";
    char incomingByte;
    // Đọc chuỗi dữ liệu cho đến khi hết buffer
    while (HmiSerial.available()) {
      incomingByte = HmiSerial.read();
      // Loại bỏ ký tự rác hoặc ký tự kết thúc chuỗi mặc định của HMI (0xFF)
      if (incomingByte != 0xFF && incomingByte >= 32) {
        command += incomingByte;
      }
      delay(2); // Đợi một chút để buffer nhận đủ ký tự tiếp theo
    }
    // Nếu có lệnh hợp lệ
    if (command.length() > 0) {
      Serial.print("Lenh tu HMI: ");
      Serial.println(command);
      handleCommand(command);
    }
  }
}
// Hàm xử lý logic điều khiển
void handleCommand(String cmd) {
  // --- THIẾT BỊ 1 ---
  if (cmd == "A") {
    digitalWrite(RELAY_1, LOW);  // BẬT
    Serial.println("-> TB 1: ON");
  } else if (cmd == "a") {
    digitalWrite(RELAY_1, HIGH); // TẮT
    Serial.println("-> TB 1: OFF");
  } 
  
  // --- THIẾT BỊ 2 ---
  else if (cmd == "B") {
    digitalWrite(RELAY_2, LOW);
    Serial.println("-> TB 2: ON");
  } else if (cmd == "b") {
    digitalWrite(RELAY_2, HIGH);
    Serial.println("-> TB 2: OFF");
  }
  
  // --- THIẾT BỊ 3 ---
  else if (cmd == "C") {
    digitalWrite(RELAY_3, LOW);
    Serial.println("-> TB 3: ON");
  } else if (cmd == "c") {
    digitalWrite(RELAY_3, HIGH);
    Serial.println("-> TB 3: OFF");
  }
  
  // --- THIẾT BỊ 4 ---
  else if (cmd == "D") {
    digitalWrite(RELAY_4, LOW);
    Serial.println("-> TB 4: ON");
  } else if (cmd == "d") {
    digitalWrite(RELAY_4, HIGH);
    Serial.println("-> TB 4: OFF");
  }
}
																						
																					

Để lại bình luận

Focus Mode

Đã phát hiện trình chặn quảng cáo

Vui lòng hỗ trợ chúng tôi bằng cách tắt tiện ích chặn quảng cáo (AdBlocker) trên trình duyệt của bạn khi truy cập trang web của chúng tôi.