MẠCH ĐIỀU KHIỂN MÁY SLAVE, DANH SÁCH INPUT – OUTPUT CỦA SLAVE .... MẠCH ĐIỀU KHIỂN MÁY MASTER, DANH SÁCH INPUT – OUTPUT CỦA MASTER .... Cảm biến mực nước cao Phát hiện mực nước cao Nút
Trang 1BÁO CÁO MÔN HỌC MẠNG TRUYỀN THÔNG TRONG CÔNG NGHIỆP
Giám sát và Điều khiển từ xa Trạm bơm xả Giảng viên hướng dẫn : LÊ QUANG ĐỨC
Sinh viên thực hiện : NGUYỄN ĐÌNH HÙNG - 2280500057
NGUYỄN MINH HIẾU - 2280500573
Lớp: 22DTDJA1
Tp Hồ Chí Minh, ngày 29 tháng 11 năm 2024
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HCM
Trang 2Mục lục
PHẦN 1 MÔ TẢ THIẾT BỊ MÁY VÀ CÁC HOẠT ĐỘNG 1 PHẦN 2 MẠCH ĐỘNG LỰC 4 PHẦN 3 MẠCH ĐIỀU KHIỂN MÁY SLAVE, DANH SÁCH INPUT – OUTPUT CỦA
SLAVE 5 PHẦN 4 MÔ TẢ GIAO TIẾP MASTER – SLAVE, VAI TRÒ VÀ NHIỆM VỤ CỦA MASTER
VÀ SLAVE 6 PHẦN 5 MẠCH ĐIỀU KHIỂN MÁY MASTER, DANH SÁCH INPUT – OUTPUT CỦA MASTER 7 PHẦN 6 QUY TRÌNH HOẠT ĐỘNG CỦA SLAVE 8 PHẦN 7 QUY TRÌNH HOẠT ĐỘNG CỦA MASTER 9 PHẦN 8 ĐẤU NỐI, KIỂM TRA ĐẤU NỐI HỆ THỐNG BẰNG CHƯƠNG TRÌNH ĐƠN GIẢN (INPUT, OUTPUT, TRUYỀN THÔNG) 10 PHẦN 9 CHƯƠNG TRÌNH CODE 10
Trang 3PHẦN 1 MÔ TẢ THIẾT BỊ MÁY VÀ CÁC HOẠT ĐỘNG
1 Mô tả thiết bị:
Các thành phần chính và chức năng:
phối hệ thống
phụ
Thiết bị thay thế để mô phỏng
Cảm biến mực nước trung
Trang 4Cảm biến mực nước cao Phát hiện mực nước cao Nút nhấn bơm 3
bơm chậm Đèn cảnh báo mức nước
Đèn cảnh báo mức nước
trung bình
Hiển thị cảnh báo mức nước
Đèn cảnh báo mức nước
Đèn hiển thị chế độ bơm
Đèn hiển thị chế độ bơm
Bộ điều khiển chính (PLC
hoặc vi điều khiển công
nghiệp)
Bộ điều khiển phụ (vi điều
khiển)
Điều khiển bơm và nhận lệnh từ
Slave
Giao tiếp cổng COM RS232 to TTL
Bảng thiết bị thay thế để mô phỏng
2 Mô tả hoạt động mô phỏng:
cả 3 bóng Led xanh sáng Đèn led hiển thị chế độ bơm nhanh sáng
sáng 2 bóng Led vàng sáng Đèn led hiển thị chế độ bơm nhanh sáng
1 bóng, led đỏ sáng
Trang 5• Khi nhấn nút chế độ bơm chậm, đèn led bơm sẽ sáng 1 bóng 3 bóng đỏ, vàng, xanh đều tắt Đèn led hiển thị chế độ bơm chậm sáng
- Hệ thống sử dụng giao tiếp RS232 để truyền dữ liệu giữa Arduino
Master và Arduino Slave nhằm điều khiển bơm và LED
Sơ đồ nguyên lý
Trang 6PHẦN 2 MẠCH ĐỘNG LỰC
Mạch động lực
Trang 7PHẦN 3 MẠCH ĐIỀU KHIỂN MÁY SLAVE, DANH SÁCH INPUT –
OUTPUT CỦA SLAVE
1 Mạch điều khiển máy Slave bao gồm các đầu vào và đầu ra sau:
Nút chế độ bơm
chậm
Chế độ bơm
Mạch điều khiển máy Slave
Trang 8PHẦN 4 MÔ TẢ GIAO TIẾP MASTER – SLAVE, VAI TRÒ VÀ NHIỆM
VỤ CỦA MASTER VÀ SLAVE
1 Vai trò và nhiệm vụ của Master:
a) Vai trò
- Là trung tâm điều khiển và giám sát toàn bộ hệ thống bơm
- Đưa ra thông tin dựa theo dữ liệu từ Slave
b) Nhiệm vụ
- Gửi lệnh điều khiển
- Điều khiển 3 mức bơm tới Slave:
- Giám sát các led mô tả trạng thái:
+ ledRed: mức nước thấp
+ ledYellow: mức nước vừa
+ ledGreen: mức nước cao
+ LEDGREENA: động cơ A
+ LEDGREENB: động cơ B
+ LEDGREENC: động cơ C
+ LEDNHANH: chế độ bơm nhanh
+ LEDCHAM: chế độ bơm chậm
2 Vai trò và nhiệm vụ của Slave:
a) Vai trò
- Là thiết bị nhận lệnh từ Master
- Giải mã byte dữ liệu nhận được để xác định yêu cầu điều khiển
b) Nhiệm vụ
- Nhận lệnh điều khiển từ Master
- Các led mô tả trạng thái:
+ pump1: Led mô phỏng bơm 1
+ pump2: Led mô phỏng bơm 2
+ pump3: Led mô phỏng bơm 3
- Các nút điều khiển:
+ btnFast: Nút bơm nhanh
+ btnMedium: Nút bơm vừa
+ btnSlow: Nút bơm chậm
+ btnStop: Chế độ bơm chậm
3 Giao thức truyền thông:
- Giao thức truyền thông giữa Master và Slave trong hệ thống này sử dụng
RS232 để truyền và nhận dữ liệu giữa 2 Arduino
- Master là thiết bị phát lệnh chính, Slave nhận và phản hồi dữ liệu
Trang 9PHẦN 5 MẠCH ĐIỀU KHIỂN MÁY MASTER, DANH SÁCH INPUT –
OUTPUT CỦA MASTER
Arduino
Ghi chú
LED chế độ bơm
nhanh
Chế độ bơm nhanh cho chạy 3 bơm
LED chế độ bơm
chậm
Chế độ bơm chậm cho chạy 1 bơm
của Slave
của Slave
Mạch điều khiển máy master
Trang 10PHẦN 6 QUY TRÌNH HOẠT ĐỘNG CỦA SLAVE
1 Quy trình hoạt động của Slave:
1 Khởi tạo hệ thống
2 Nhận dữ liệu từ Master Arduino thông qua RS232
3 Xử lí tín hiệu
4 Điều khiển các LED để hiển thị trạng thái tốc độ
5 Điều khiển bơm theo mức nước:
Lưu đồ quy trình hoạt động:
Trang 11PHẦN 7 QUY TRÌNH HOẠT ĐỘNG CỦA MASTER
Quy trình hoạt động của Master:
1 Khởi tạo hệ thống
2 Đọc các tín hiệu từ nút nhấn và công tắc gạt
3 Gửi dữ liệu vào Slave
4 Xử lí tín hiệu
5 Điều khiển các LED để hiển thị trạng thái tốc độ
Lưu đồ quy trình hoạt động:
Trang 12PHẦN 8 ĐẤU NỐI, KIỂM TRA ĐẤU NỐI HỆ THỐNG BẰNG CHƯƠNG
TRÌNH ĐƠN GIẢN (INPUT, OUTPUT, TRUYỀN THÔNG)
Arduino
Master
Module RS232
Arduino
PHẦN 9 CHƯƠNG TRÌNH CODE
1 Chương trình code master:
#define ledRed 10 // LED đỏ (bơm chậm)
#define ledYellow 9 // LED vàng (bơm vừa)
#define ledGreen 11 // LED xanh (bơm nhanh)
#define LEDGREENA 5 // LED xanh đc A
#define LEDGREENB 6 // LED xanh đc B
#define LEDGREENC 7 // LED xanh đc C
#define LEDNHANH 12 // LED nhanh
#define LEDCHAM 8 // LED chậm
#define DC1 2 // Nút DC1
#define DC2 3 // Nút DC2
#define DC3 4 // Nút DC3
bool DC1State = false;
bool DC2State = false;
bool DC3State = false;
//bool lockState = false; // Trạng thái khóa (false: mở khóa, true: khóa)
void setup() {
pinMode(DC1, INPUT);
pinMode(DC2, INPUT);
pinMode(DC3, INPUT); // Cấu hình DC3 làm input
pinMode(LEDGREENA, OUTPUT);
pinMode(LEDGREENB, OUTPUT);
Trang 13pinMode(LEDGREENC, OUTPUT);
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(LEDNHANH, OUTPUT);
pinMode(LEDCHAM, OUTPUT);
Serial.begin(9600); // Khởi động UART
}
void loop() {
if (digitalRead(DC1) == HIGH) {
DC1State = true;
DC2State = false;
DC3State = false;
digitalWrite(LEDGREENA, HIGH);
digitalWrite(LEDGREENB, LOW);
digitalWrite(LEDGREENC, LOW);
digitalWrite(LEDCHAM, LOW);
digitalWrite(LEDNHANH, LOW);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
Serial.write(0x04); // Gửi tín hiệu tương ứng
delay(100);
}
if (digitalRead(DC2) == HIGH) {
DC1State = false;
DC2State = true;
DC3State = false;
digitalWrite(LEDGREENA, LOW);
digitalWrite(LEDGREENB, HIGH);
digitalWrite(LEDGREENC, LOW);
digitalWrite(LEDCHAM, LOW);
digitalWrite(LEDNHANH, LOW);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
Serial.write(0x05); // Gửi tín hiệu tương ứng
Trang 14}
if (digitalRead(DC3) == HIGH) {
DC1State = false;
DC2State = false;
DC3State = true;
digitalWrite(LEDGREENA, LOW);
digitalWrite(LEDGREENB, LOW);
digitalWrite(LEDGREENC, HIGH);
digitalWrite(LEDCHAM, LOW);
digitalWrite(LEDNHANH, LOW);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
Serial.write(0x06); // Gửi tín hiệu tương ứng
delay(100);
}
if (Serial.available() > 0) {
int receivedData = Serial.read(); // Đọc dữ liệu từ master
// Điều khiển LED dựa vào dữ liệu nhận được
switch (receivedData) {
case 0x00: // CHẾ ĐỘ CHẬM
digitalWrite(LEDGREENA, HIGH);
digitalWrite(LEDGREENB, LOW);
digitalWrite(LEDGREENC, LOW);
digitalWrite(LEDCHAM, HIGH);
digitalWrite(LEDNHANH, LOW);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
//lockState = false; // Mở khóa nút nhấn
break;
case 0x01: //CHẾ ĐỘ NHANH
digitalWrite(LEDGREENA, HIGH);
digitalWrite(LEDGREENB, HIGH);
digitalWrite(LEDGREENC, HIGH);
digitalWrite(LEDCHAM, LOW);
digitalWrite(LEDNHANH, HIGH);
digitalWrite(ledRed, HIGH);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
Trang 15break;
case 0x02: // Bơm vừa: LED vàng sáng, các LED khác tắt, 2 bơm sáng
digitalWrite(LEDGREENA, HIGH);
digitalWrite(LEDGREENB, HIGH);
digitalWrite(LEDGREENC, LOW);
digitalWrite(LEDCHAM, LOW);
digitalWrite(LEDNHANH, HIGH);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, HIGH);
digitalWrite(ledGreen, LOW);
break;
case 0x03: // Bơm chậm: LED đỏ sáng, các LED khác tắt, 1 bơm sáng
digitalWrite(LEDGREENA, HIGH);
digitalWrite(LEDGREENB, LOW);
digitalWrite(LEDGREENC, LOW);
digitalWrite(LEDCHAM, LOW);
digitalWrite(LEDNHANH, HIGH);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, HIGH);
break;
}
}
}
2 Chương trình code slave:
// Nút nhấn
const int btnFast = 6; // Nút bơm nhanh
const int btnMedium = 7; // Nút bơm vừa
const int btnSlow = 8; // Nút bơm chậm
const int btnStop = 9;
// Đèn LED bơm
const int pump1 = 10; // LED bơm 1
const int pump2 = 11; // LED bơm 2
const int pump3 = 12; // LED bơm 3
// Đèn LED trạng thái mức nước
const int ledRed = 2; // LED đỏ (bơm chậm)
const int ledYellow = 3; // LED vàng (bơm vừa)
const int ledGreen = 4; // LED xanh (bơm nhanh)
// Trạng thái hiện tại
int state = 0; // 0: Tắt, 1: Bơm nhanh, 2: Bơm vừa, 3: Bơm chậm
Trang 16// Biến lưu trạng thái trước của nút nhấn
bool lastFast = false;
bool lastMedium = false;
bool lastSlow = false;
bool lastStop = false;
void setup() {
// Thiết lập nút nhấn làm đầu vào
pinMode(btnFast, INPUT_PULLUP);
pinMode(btnMedium, INPUT_PULLUP);
pinMode(btnSlow, INPUT_PULLUP);
pinMode(btnStop, INPUT_PULLUP);
// Thiết lập đèn LED bơm làm đầu ra
pinMode(pump1, OUTPUT);
pinMode(pump2, OUTPUT);
pinMode(pump3, OUTPUT);
// Thiết lập đèn LED trạng thái làm đầu ra
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Đọc trạng thái nút nhấn
bool fastPressed = !digitalRead(btnFast);
bool mediumPressed = !digitalRead(btnMedium);
bool slowPressed = !digitalRead(btnSlow);
bool stopPressed = !digitalRead(btnStop);
if (stopPressed && !lastStop) { // Khi nhấn nút dừng
state = 0; // Chuyển về trạng thái tắt
}
// Xử lý nút bơm nhanh
if (fastPressed && !lastFast) { // Chỉ thay đổi khi nút được nhấn (chuyển từ HIGH sang LOW)
state = 1; // Chuyển sang trạng thái bơm nhanh
}
// Xử lý nút bơm vừa
if (mediumPressed && !lastMedium) {
state = 2; // Chuyển sang trạng thái bơm vừa
}
Trang 17// Xử lý nút bơm chậm
if (slowPressed && !lastSlow) {
state = 3; // Chuyển sang trạng thái bơm chậm
}
// Lưu trạng thái nút nhấn trước đó
lastFast = fastPressed;
lastMedium = mediumPressed;
lastSlow = slowPressed;
lastStop = stopPressed;
// Điều khiển bơm và đèn LED theo trạng thái
if (state == 1) {
// Bơm nhanh: LED xanh sáng, các LED khác tắt, tất cả 3 bơm sáng
digitalWrite(pump1, HIGH);
digitalWrite(pump2, HIGH);
digitalWrite(pump3, HIGH);
digitalWrite(ledGreen, HIGH);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, LOW);
} else if (state == 2) {
// Bơm vừa: LED vàng sáng, các LED khác tắt, 2 bơm sáng
digitalWrite(pump1, HIGH);
digitalWrite(pump2, HIGH);
digitalWrite(pump3, LOW);
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, HIGH);
digitalWrite(ledRed, LOW);
} else if (state == 3) {
// Bơm chậm: LED đỏ sáng, các LED khác tắt, 1 bơm sáng
digitalWrite(pump1, HIGH);
digitalWrite(pump2, LOW);
digitalWrite(pump3, LOW);
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, HIGH);
} else if (state == 0) {
digitalWrite(pump1, LOW);
digitalWrite(pump2, LOW);
digitalWrite(pump3, LOW);
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, LOW);
} else {
// Tắt tất cả khi không có trạng thái
Trang 18digitalWrite(pump2, LOW);
digitalWrite(pump3, LOW);
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, LOW);
}
}