HCM Khoa Cơ Khí Ch.năng Họ và tên Chữ ký Ngày Thiết kế B.
Trang 1Tiến hành cắt chữ
Bắt đầu
Kết nối máy tính và arduino bằng
UART
Chuyển động Jog
Gửi dữ liệu xuống arduino
Chuyển động Jog X Chuyển động Jog Y
Chuyển động Jog Z
Gửi lệnh xuống arduino
Home
Dir_X = 1
Dir_X = 0
Dir_Y = 1
Dir_Y = 0
Dir_ Z = 1
Dir_Z = 0
Trục Z đi lên
Tín hiệu Home Z
Dừng trục Z
Đi ngược lại
10 xung
Lùi trục Y
Tín hiệu Home Y
Dừng trục Y
Đi ngược lại
10 xung
Lùi trục X
Tín hiện Home X
Dừng trục X
Đi ngược lại
10 xung
Cắt tự động
Tiến hành cắt
Trục X di chuyển Trục Y di chuyển
Trục Z di chuyển
Gửi buffer tọa độ xuống arduino
k != pulX Khởi tạo biến đếm k = 0
Bắn BLUx
k = k +1
Dừng trục X
Dir_X = 1
k != pulZ Khỏi tạo biến đếm k = 0
Bắn BLUz
k = k +1
Dừng trục Z
Dir_Z = 1
Trục Z đi lên Trục Z đi xuống
k != pulY Khởi tạo biến đếm k = 0
Bắn BLUy
k = k +1
Dừng trục Y
Dir_Y = 1
Nhập tọa độ 2 điểm đầu và cuối của đoạn thẳng m Nhập số sung mỗi lần nội suy: BLUx, BLUy
Tính toán số xung cần thiết cấp cho mỗi trục: pulX, pulY
Số xung động cơ đã chạy được:
dentaX, dentaY
Xác định chiều quay dirX và
dirY
m song song với trục X
m song song với trục Y
Bắn xung trục X chạy BLUx
xung
Tính toán vị trí tương quan giữa
vị trí hiện tại và vị trí trước đó
Hai điểm nằm cùng phía đường thẳng m
Tiếp tục duy trì trục hiện tại thực thi
Đổi trục thực thi
Bắn xung cho trục thực thi 1
bước
Tính toán vị trí tương quan giữa
vị trí hiện tại và vị trí trước đó
dentaX < pulX
Bắn xung trục Y chạy BLUx
xung Lưu lại trạng thái hiện tại
X [n]
Y [n]
k < n
Khởi tạo biến đếm k = 0
X, Y: contour point array
G1XY(X[k], Y[k]) Xuống dao
Dir_ Z = 1 PulZ = 10000 Nhấc dao
Trục Z di chuyển
Dir_ Z = 0 pulZ = 10000
G1XY
Trục Z di chuyển
k = k +1
Xử lý chữ từ máy tính
Nhập chữ, font, font size (mm),
font style
Chuyển đổi ảnh RBG sang
ảnh xám
Tìm biên dạng bằng hàm findContours (EmguCV)
N: Số lượng đường biên
i < N
Khởi tạo max = contour[0].area
Khởi tạo i = 1 Khởi tạo index_max = 0
max < contour.area[i]
max = contour.area[i]
index_max = i
Lấy chiều cao của contour[index_max]
Tìm hệ số scale (quan hệ mm và
pixel)
N = 1
array_contour_point: Số điểm trên đường biên
j < array_contour_point_Off[0]
Khởi tạo j = 0 Khởi tạo offset = 10
Lưu tọa độ vào buffer trục X: (contourOff[0].X - offset) trục Y: (contourOff[0].Y - offset)
Lưu tọa độ vào buffer trục X: contourOff[0][j].X trục Y: contourOff[0][j].Y
j = j + 1
N = 2
Xác định thứ tự biên dạng trong
min < contour_area_Off[1]
Khởi tạo min = contour_area_Off[0]
Center_X = contour_Off[0].center.X Center_Y = contour_Off[0].center.Y
index = 0
Center_X = contourOff[1].center.X
Center_Y = contourOff[1].center.Y
index = 1
Lưu tọa độ vào buffer trục X: Center_X trục Y: Center_Y
j < array_contour_point_Off[index]
Lưu tọa độ vào buffer trục X: contour_Off[index][j].X trục Y: contour_Off[index][j].Y
j = j + 1
Khởi tạo index = 0 Khởi tạo center_X = 0 Khởi tạo center_Y = 0
Trở về
j < array_contour_point_Off[1]
j = 0
Lưu tọa độ vào buffer trục X: (contour_Off[1-index][0].X- offset) trục Y: (contour_Off[1-index][0].Y - offset)
Cắt 1 biên dạng ngoài
và 1 biên dạng trong
Cắt 1 biên dạng ngoài
và 1 biên dạng trong
j = j + 1
Xác định thứ tự biên dạng trong
Lưu tọa độ vào buffer trục X: contour_Off[index][j].X trục Y: contour_Off[index][j].Y
Trở về
Xác định thứ tự
2 biên dạng trong
Khởi tạo index[2] = 0 Khởi tạo center_X[2] = 0 Khởi tạo center_Y[2] = 0
Cắt 1 biên dạng ngoài và
2 biên dạng trong
max > contour_area_Off[stt]
Khởi tạo max= contour_area_Off[0]
Khởi tạo stt = 1 Khởi tạo stt_center = 0
Center_X[stt_center] = contour_Off[stt].center.X Center_Y[stt_center] = contour_Off[stt].center.Y
index[stt_center] = stt
Trở về
Xác định thứ tự
2 biên dạng trong
stt < 3
Center_X[stt_center] = contour_Off[stt-1].center.X Center_Y[stt_center] = contour_Off[stt-1].center.Y
index[stt_center] = stt - 1 max = contour_area_Off[stt]
stt = stt + 1 stt_center = stt_center +1
Lưu tọa độ vào buffer trục X: Center_X[stt]
trục Y: Center_Y[stt]
j < array_contour_point_Off[index[stt]]
Lưu tọa độ vào buffer trục X: contour_Off[index[stt]][j].X trục Y: contour_Off[index[stt]][j].Y
j = j + 1
j < array_contour_point_Off[index[stt]]
j = 0
Lưu tọa độ vào buffer trục X: (contour_Off[index[stt]][0].X- offset) trục Y: (contour_Off[index[stt]][0].Y - offset)
Cắt 1 biên dạng ngoài
và 2 biên dạng trong
j = j + 1
Lưu tọa độ vào buffer trục X: contour_Off[index[stt]][j].X trục Y: contour_Off[index[stt]][j].Y
Trở về
Khởi tạo stt = 0
stt = 2 stt = stt + 1
(index[0] + index[1]) = 1
index[2] = 2
(index[0] + index[1]) = 3
index[2] = 0 index[2] =1
Xử lý chữ từ máy tính
Trở về
Bắn xung cho động cơ trục X chạy đúng số xung pulX
Bắn xung cho động cơ trục Y chạy đúng số xung pulY
Bắn xung trục Y một lượng (pulY - dentaY)
dentaY = pulY?
dentaX = pulX?
Trục Y di chuyển Trục X di chuyển
Trục Z di chuyển
Trở về Trở về
Trở về
Tiến hành cắt
Trở về
Trở về
G1XY
CHƯƠNG TRÌNH ĐIỀU KHIỂN
Số lượng Khối lượng Tỉ lệ
1:1 Tờ: Số tờ: 1
Trường ĐH Bách Khoa TP.
HCM Khoa Cơ Khí
Ch.năng Họ và tên Chữ ký Ngày Thiết kế B Hoàng Sơn
H dẫn P Công Bằng Duyệt
Đ
Đ Đ
Đ
Đ
Đ
Đ
Đ
Đ Đ
Đ Đ
Đ Đ
Đ
Đ
Đ
Đ
Đ
Đ Đ
Đ
Đ
Đ
Đ
Đ
Đ Đ
Đ
Đ
Đ
Đ
Đ
Đ
S S
S S
S
S
S
S
S S
S
S
S
S
S
S
S
S S
S
S
S S
S
S
S
S
S
S
S
S
S
S S
Mở rộng/thu nhỏ biên dạng sử dụng thư viện ClipperLib
Kết thúc