Giới thiệu dự án
Sự bùng nổ của thương mại điện tử (E-Commerce) và logistics tại Việt Nam trong kỷ nguyên số đã tạo ra áp lực khổng lồ lên hạ tầng xử lý bưu kiện tại các trung tâm khai thác. Theo các báo cáo logistics, khối lượng đơn hàng nội địa tăng trưởng trung bình 20–25%/năm, đòi hỏi quy trình phân loại bưu kiện phải đạt tốc độ cao, liên tục và chính xác tuyệt đối. Tuy nhiên, tại nhiều hub giao nhận vừa và nhỏ, công đoạn phân loại hàng hóa vẫn phụ thuộc chủ yếu vào sức người. Phương pháp thủ công bộc lộ nhiều điểm nghẽn nghiêm trọng: tỷ lệ sai sót dao động từ 4% đến 7% do công nhân suy giảm tập trung khi thao tác lặp lại, năng suất xử lý thấp (trung bình dưới 300 sản phẩm/giờ/người), đồng thời chi phí vận hành nhân công liên tục gia tăng.
+----------------------------------------------+
| HỆ THỐNG PHÂN LOẠI QR CODE |
+----------------------------------------------+
|
+---------------------+-------------+-------------+---------------------+
| | | |
v v v v
[Khối Cảm Biến] [Khối Xử Lý Trung Tâm] [Khối Chấp Hành] [Khối Hiển Thị]
- GM65 (UART) - Arduino Uno R3 - DC Motor 24V - LCD 20x4 I2C
- E18-D80NK (NPN) (ATmega328P-PU) - TIP41C Driver (PCF8574)
- SG90 Servos (PWM)
Trước bài toán cấp thiết đó, đề tài "Mô hình phân loại sản phẩm theo mã QR ứng dụng vi điều khiển ATmega328P" được xây dựng nhằm giải quyết triệt để các hạn chế của phương pháp thủ công và các hệ thống quang học truyền thống. Bằng việc kết hợp module quang học quét mã 2D GM65 với cảm biến quang điện E18-D80NK và cơ cấu chấp hành servo trên nền tảng Arduino Uno, đề tài mang đến một giải pháp tự động hóa chi phí thấp nhưng đạt hiệu năng vận hành ổn định.
Mục tiêu kỹ thuật cụ thể của đồ án:
- Nghiên cứu, tích hợp vi điều khiển ATmega328P-PU với module quét mã 1D/2D GM65 và cảm biến tiệm cận hồng ngoại E18-D80NK.
- Thiết kế hoàn chỉnh mạch phân phối công suất đa tầng: 24VDC (băng tải), 6VDC (động cơ servo, cảm biến tiệm cận) và 5VDC (vi điều khiển, LCD).
- Phát triển thuật toán nhúng giải mã chuỗi ký tự QR nhận được qua giao thức UART, trích xuất dữ liệu định tuyến và điều khiển cơ cấu phân loại đa cổng (định tuyến theo 3 khu vực: quận Thanh Xuân, Cầu Giấy, Nam Từ Liêm).
- Thiết kế cơ cấu đẩy sản phẩm sử dụng động cơ Micro Servo SG90 kết hợp chuyển động băng tải dẫn động bởi động cơ giảm tốc DC 24VDC 52RPM.
- Xây dựng giao diện hiển thị thông tin thời gian thực gồm mã bưu kiện và bộ đếm tổng sản lượng theo từng khu vực trên màn hình LCD 20x4 giao tiếp I2C.
- Chế tạo mô hình thử nghiệm vật lý (kích thước 500x60x100mm) và đánh giá độ chính xác phân loại trong điều kiện vận hành liên tục.
Hệ thống hướng tới năng suất phân loại đạt trên 1.200 sản phẩm/giờ, độ chính xác nhận dạng và gạt hàng $\ge 98,5%$, thời gian đáp ứng cơ cấu chấp hành dưới 200ms với tổng chi phí phần cứng thử nghiệm dưới 1,5 triệu VNĐ. Phạm vi của đồ án tập trung vào mô hình băng chuyền mini phân loại bưu kiện có kích thước tiêu chuẩn, trọng lượng dưới 0,5kg và mã QR in trực tiếp trên bề mặt.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi xây dựng giải pháp dựa trên mã QR, các phương án phân loại tự động hiện nay được tổng hợp và đánh giá qua ma trận so sánh sau:
| Tiêu chí kỹ thuật |
Phân loại Thủ công |
Cảm biến màu (TCS3200) |
Thị giác máy tính (Industrial Vision) |
Giải pháp GM65 + Arduino (Đề xuất) |
| Dung lượng dữ liệu |
Phụ thuộc mắt người |
1 byte (Chỉ nhận mã màu) |
Rất lớn (Hình ảnh, OCR) |
Lớn (Tối đa 7.089 ký tự) |
| Tốc độ phản hồi |
2.000 – 4.000 ms |
50 – 100 ms |
100 – 300 ms |
10 – 30 ms (Quét liên tục 0,1s) |
| Độ nhạy sáng môi trường |
Bị ảnh hưởng khi mỏi mắt |
Rất cao (Dễ nhiễu quang) |
Trung bình (Cần nguồn sáng chuẩn) |
Thấp (Tích hợp LED 6500K, 85k LUX) |
| Độ phức tạp phần cứng |
Không |
Rất thấp |
Rất cao (Cần IPC/GPU, Camera) |
Thấp - Trung bình (Module CMOS) |
| Chi phí đầu tư (VND) |
Lương nhân công định kỳ |
300.000 – 500.000 VNĐ |
20.000.000 – 100.000.000 VNĐ |
1.200.000 – 1.500.000 VNĐ |
Hệ thống được xác định các yêu cầu chức năng theo mô hình phân loại MoSCoW:
- Must Have (Bắt buộc): Giải mã chính xác mã QR chuẩn (ISO/IEC 18004); phát hiện vật cản bằng cảm biến hồng ngoại với thời gian đáp ứng $\le 2\text{ms}$; điều khiển Servo SG90 xoay góc $0^\circ \rightarrow 90^\circ \rightarrow 0^\circ$ để đẩy vật thể; hiển thị số đếm theo 3 quận trên LCD 20x4.
- Should Have (Nên có): Điều chỉnh điện áp độc lập bằng mạch buck LM2596 bảo vệ vi điều khiển; còi buzzer và LED báo trạng thái đọc mã thành công trên module GM65.
- Could Have (Có thể có): Giao tiếp truyền dữ liệu đếm lên máy tính qua cổng Serial UART để lưu trữ nhật ký.
- Won't Have (Chưa thực hiện ở giai đoạn này): Cân trọng lượng tích hợp và cánh tay robot phân loại 6 bậc tự do.
Thiết kế hệ thống
Kiến trúc hệ thống bao gồm 5 khối chức năng liên kết chặt chẽ:
+--------------------------------------------------------------------------------+
| KHỐI NGUỒN CẤP |
| [Adapter 24VDC 2A] --+---> [Động cơ Băng tải 24V 52RPM] |
| | |
| +---> [LM2596 Step-Down (Hiệu suất 92%)] -> 6VDC |
| | |
| +---> [Cảm biến E18-D80NK] (300mA NPN) |
| +---> [Động cơ Micro Servo SG90] (PWM) |
| +---> [Arduino Uno R3 (Vin)] -> 5VDC Out |
| | |
| +---> [Scanner GM65 (UART)] |
| +---> [LCD 20x4 + PCF8574] |
+--------------------------------------------------------------------------------+
+--------------------------------------------------------------------------------+
| SƠ ĐỒ LUỒNG DỮ LIỆU VÀ ĐIỀU KHIỂN |
| |
| +--------------------+ UART (9600 bps) +--------------------+ |
| | Module GM65 (CMOS) | -----------------------------> | | |
| +--------------------+ | | |
| | ARDUINO UNO R3 | |
| +--------------------+ Digital Input (Pull-up) | (ATmega328P-PU) | |
| | Cảm biến E18-D80NK | -----------------------------> | - 16 MHz Clock | |
| +--------------------+ | - 32 KB Flash | |
| | - 2 KB SRAM | |
| +--------------------+ I2C (0x27) | | |
| | LCD 20x4 (HD44780) | <----------------------------- | | |
| +--------------------+ | | |
| | | |
| +--------------------+ PWM (50Hz / Pin 9) | | |
| | Servo SG90 (9g) | <----------------------------- | | |
| +--------------------+ +--------------------+ |
| |
+--------------------------------------------------------------------------------+
Thông số kỹ thuật chi tiết của Technology Stack:
- Vi điều khiển trung tâm: Arduino Uno R3 trang bị chip ATmega328P-PU, tần số dao động thạch anh 16 MHz, bộ nhớ Flash 32 KB (trong đó 0,5 KB dùng cho Bootloader), SRAM 2 KB, EEPROM 1 KB, 14 chân Digital I/O (6 kênh PWM độ phân giải 8-bit), 6 chân Analog Input độ phân giải 10-bit (ADC).
- Module đọc mã vạch 2D GM65:
- Cảm biến hình ảnh CMOS, bước sóng ánh sáng 617nm, đèn LED trợ sáng 6500K.
- Góc quét quang học: $34^\circ$ (ngang), $26^\circ$ (dọc), góc quay $360^\circ$, độ lệch $\pm 60^\circ$, độ nghiêng $\pm 65^\circ$.
- Độ phân giải quang học $\ge 0,1\text{mm}$ (4 mil), khoảng cách nhận diện từ 25mm đến 250mm, độ rọi môi trường hoạt động 0 – 85.000 LUX.
- Chuẩn giao tiếp dữ liệu: UART TTL (baud rate mặc định 9600 bps, 8 data bits, no parity, 1 stop bit).
- Cảm biến tiệm cận hồng ngoại E18-D80NK:
- Điện áp hoạt động 5VDC, dòng tiêu thụ $< 25\text{mA}$, dòng đóng ngắt ngõ ra cực đại 300mA.
- Khoảng cách phát hiện vật thể điều chỉnh qua biến trở đa vòng tích hợp: 3cm – 80cm.
- Ngõ ra dạng NPN cực thu hở (Open Collector), thời gian hồi đáp tín hiệu quang $< 2\text{ms}$, góc mở chùm tia $< 15^\circ$.
- Cơ cấu chấp hành và truyền động:
- Động cơ băng chuyền: Động cơ giảm tốc DC 24V, tỷ số truyền hộp số $1:120$, tốc độ trục ra 52 vòng/phút, dòng tiêu thụ định mức 500mA, momen xoắn $1,0\text{ kg}\cdot\text{cm}$. Mạch lái sử dụng BJT công suất TIP41C (dòng $I_C$ cực đại 6A, $V_{CEO} = 100\text{V}$, công suất tiêu tán $65\text{W}$).
- Động cơ gạt hàng: Micro Servo TowerPro SG90 (khối lượng 9g), góc quay giới hạn $0^\circ - 180^\circ$, momen xoắn giữ $1,6\text{ kg}\cdot\text{cm}$ tại 4,8V, tốc độ góc $0,12\text{s}/60^\circ$. Điều khiển qua kỹ thuật PWM tần số 50Hz (chu kỳ xung $T = 20\text{ms}$, độ rộng xung $t_w$ biến thiên từ $1,0\text{ms}$ tương ứng $0^\circ$ đến $2,0\text{ms}$ tương ứng $180^\circ$).
- Khối hiển thị: Màn hình LCD 20x4 ký tự sử dụng chip điều khiển HD44780, tích hợp board chuyển đổi I2C dựa trên IC mở rộng cổng PCF8574T (địa chỉ I2C $0\text{x}27$, tốc độ xung nhịp bus I2C đạt 100kHz Standard Mode / 400kHz Fast Mode).
- Mạch nguồn điều hòa: Module hạ áp DC-DC LM2596-ADJ hoạt động theo nguyên lý chuyển mạch xung (Buck Switching) tần số 150kHz, hiệu suất chuyển đổi $\approx 92%$, dòng ngõ ra tối đa 3A, giúp hạ từ 24VDC xuống 6VDC cấp riêng cho servo để loại bỏ nhiễu sụt áp trên vi điều khiển.
Methodology
Quy trình nghiên cứu và phát triển được thực hiện theo mô hình phát triển hệ thống nhúng lặp (Iterative Embedded Lifecycle) kết hợp phương pháp kiểm thử V-Model:
[Khảo sát & Thuật toán] -> [Thiết kế Phần cứng/Mạch] -> [Lập trình Firmware] -> [Tích hợp & Đánh giá]
+-----------------------------------------------------------------------------------+
| Lộ trình phát triển 10 tuần (Milestone Timeline) |
+----+-----------------------------------------------------+------------------------+
| Tuần 1-2: Khảo sát thông số GM65, E18-D80NK, ATmega328P. | Đạt tài liệu thiết kế |
| Tuần 3-4: Thiết kế mạch phân phối nguồn và lái TIP41C. | Hoàn thiện Schematic |
| Tuần 5-6: Gia công cơ khí băng chuyền mini 500x60x100mm. | Khung cơ khí hoàn chỉnh|
| Tuần 7-8: Lập trình thuật toán UART, ngắt I/O và PWM servo.| Nạp Firmware v1.0 |
| Tuần 9-10: Kiểm thử 500 chu kỳ phân loại & hiệu chỉnh trễ. | Nghiệm thu toàn diện |
+-----------------------------------------------------------------------------------+
Ma trận đánh giá và giảm thiểu rủi ro kỹ thuật:
- Rủi ro 1: Nhiễu cảm ứng điện từ từ động cơ DC 24V làm sập nguồn hoặc reset vi điều khiển.
- Giải pháp: Tách biệt mass công suất và mass tín hiệu; mắc diode triệt tiêu xung ngược (Flyback Diode 1N4007) song song hai đầu cuộn dây động cơ DC; lọc nguồn bằng tụ hóa $1000\mu\text{F}/35\text{V}$ kết hợp tụ gốm $100\text{nF}$ tại đầu vào vi điều khiển.
- Rủi ro 2: Tràn bộ đệm UART (Ring Buffer Overflow) khi quét mã liên tục ở tốc độ cao.
- Giải pháp: Cấu hình module GM65 quét liên tục với khoảng trễ quét $0,1\text{s}$; tối ưu vòng quét bằng cách kiểm tra
Serial.available() liên tục và giải phóng mảng đệm ngay sau khi khớp mẫu ký tự.
- Rủi ro 3: Tín hiệu cảm biến quang E18-D80NK bị treo lơ lửng.
- Giải pháp: Kích hoạt điện trở kéo lên nội (Internal Pull-Up $20\text{k}\Omega$) của vi điều khiển kết hợp điện trở kéo ngoài $10\text{k}\Omega$ lên đường nguồn +5V.
Implementation và kết quả
Development process
Quá trình hiện thực hóa giải pháp tập trung vào việc tối ưu mã nguồn nhúng trên Arduino IDE (phiên bản 1.8.19 / 2.2.1), sử dụng ngôn ngữ C/C++ cho hệ thống nhúng.
+------------------------------------+
| BẮT ĐẦU |
+------------------------------------+
|
v
+------------------------------------+
| Khởi tạo: Serial (9600), I2C, |
| LCD 20x4, Servo (0 độ), Pin Modes |
+------------------------------------+
|
v
+------------------------------------+
| Băng tải chạy (TIP41C kích HIGH) |
+------------------------------------+
|
v
+------------------------------------+
| Đọc dữ liệu từ Module GM65 |
+------------------------------------+
|
+-----------------------------+
| |
v [Có dữ liệu] v [Chưa có]
+------------------------------------+ |
| Lưu chuỗi: data += inChar | |
| Phân tích chuỗi mã bưu kiện | |
+------------------------------------+ |
| |
v |
+------------------------------------+ |
| Hiển thị mã lên LCD dòng 1 | |
+------------------------------------+ |
| |
v |
+------------------------------------+ |
| Kiểm tra Cảm biến hồng ngoại | <--------+
| E18-D80NK (Digital Read == LOW)? |
+------------------------------------+
|
+-----------------------------+
| |
v [Đúng: Có vật thể] v [Sai: Tiếp tục chờ]
+------------------------------------+ |
| So khớp chuỗi dữ liệu vùng: | |
| "THANH_XUAN", "CAU_GIAY", "NAM_TL" | |
+------------------------------------+ |
| |
v |
+------------------------------------+ |
| - Kích hoạt Servo gạt (0 -> 90 độ) | |
| - Delay giữ bưu kiện (400ms) | |
| - Thu hồi Servo về 0 độ | |
| - Tăng biến đếm khu vực tương ứng | |
| - Cập nhật số liệu lên LCD 20x4 | |
+------------------------------------+ |
| |
v |
+------------------------------------+ |
| Xóa chuỗi đệm: data = "" | |
+------------------------------------+ |
| |
+-----------------------------+
|
v
+------------------------------------+
| Quay lại vòng quét tiếp theo |
+------------------------------------+
Dưới đây là mã nguồn nhúng cốt lõi điều khiển toàn bộ quá trình đọc dữ liệu UART, xử lý chuỗi phân loại và kích hoạt cơ cấu chấp hành:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Khởi tạo đối tượng LCD: Địa chỉ I2C 0x27, màn hình 20 cột 4 hàng
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Khởi tạo các đối tượng Servo điều khiển cánh tay gạt
Servo servoThanhXuan;
Servo servoCauGiay;
Servo servoNamTuLiem;
// Định nghĩa chân phần cứng kết nối ATmega328P
const uint8_t PIN_SERVO_TX = 9; // Chân PWM điều khiển Servo 1 (Thanh Xuân)
const uint8_t PIN_SERVO_CG = 10; // Chân PWM điều khiển Servo 2 (Cầu Giấy)
const uint8_t PIN_SERVO_NTL = 11; // Chân PWM điều khiển Servo 3 (Nam Từ Liêm)
const uint8_t PIN_SENSOR_TX = 2; // Cảm biến E18-D80NK vị trí 1
const uint8_t PIN_SENSOR_CG = 3; // Cảm biến E18-D80NK vị trí 2
const uint8_t PIN_SENSOR_NTL = 4; // Cảm biến E18-D80NK vị trí 3
const uint8_t PIN_CONVEYOR_PWM = 5; // Chân kích Transistor TIP41C chạy băng tải
// Biến lưu trữ dữ liệu chuỗi và số đếm sản lượng
String qrPayload = "";
uint16_t countTX = 0;
uint16_t countCG = 0;
uint16_t countNTL = 0;
void setup() {
// Cấu hình giao tiếp UART với tốc độ 9600 bps tương thích cảm biến GM65
Serial.begin(9600);
// Khởi tạo màn hình LCD 20x4
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SYSTEM INITIALIZING ");
// Cấu hình các chân I/O
pinMode(PIN_SENSOR_TX, INPUT_PULLUP);
pinMode(PIN_SENSOR_CG, INPUT_PULLUP);
pinMode(PIN_SENSOR_NTL, INPUT_PULLUP);
pinMode(PIN_CONVEYOR_PWM, OUTPUT);
// Gắn chân PWM cho các cơ cấu Servo
servoThanhXuan.attach(PIN_SERVO_TX);
servoCauGiay.attach(PIN_SERVO_CG);
servoNamTuLiem.attach(PIN_SERVO_NTL);
// Đặt cánh tay gạt về vị trí ban đầu (0 độ)
servoThanhXuan.write(0);
servoCauGiay.write(0);
servoNamTuLiem.write(0);
// Bật băng chuyền chạy liên tục qua mạch khóa TIP41C
analogWrite(PIN_CONVEYOR_PWM, 255); // Kích bão hòa BJT TIP41C
delay(1000);
lcd.clear();
updateLCDDisplay();
}
void loop() {
// 1. Quét và nhận chuỗi dữ liệu từ module GM65 qua cổng UART phần cứng
while (Serial.available() > 0) {
char incomingChar = (char)Serial.read();
if (incomingChar == '\r' || incomingChar == '\n') {
if (qrPayload.length() > 0) {
processSortingDecision(qrPayload);
qrPayload = ""; // Xóa bộ đệm sau khi xử lý
}
} else {
qrPayload += incomingChar;
}
}
}
// Hàm kích hoạt cơ cấu gạt Servo và cập nhật số liệu
void triggerEjector(Servo &targetServo, volatile uint16_t &counter, const char* districtLabel) {
// Gạt cánh tay ra góc 90 độ để chặn và đẩy bưu kiện
targetServo.write(90);
delay(450); // Thời gian duy trì đủ để hàng trượt an toàn vào thùng chứa
targetServo.write(0); // Thu cánh tay về vị trí nghỉ 0 độ
counter++;
updateLCDDisplay();
lcd.setCursor(0, 0);
lcd.print("SORTED: ");
lcd.print(districtLabel);
}
// Phân tích mã QR và đồng bộ với tín hiệu cảm biến tiệm cận
void processSortingDecision(String payload) {
lcd.setCursor(0, 0);
lcd.print("CODE: ");
lcd.print(payload.substring(0, 14)); // Hiển thị 14 ký tự đầu của mã
// Kiểm tra điểm đích đến thông qua tiền tố định tuyến
if (payload.indexOf("TX") >= 0 || payload.indexOf("THANH_XUAN") >= 0) {
// Chờ bưu kiện di chuyển tới vị trí cảm biến 1
unsigned long startTime = millis();
while (millis() - startTime < 4000) { // Timeout bảo vệ 4 giây
if (digitalRead(PIN_SENSOR_TX) == LOW) { // Phát hiện vật cản (NPN kéo xuống Mass)
triggerEjector(servoThanhXuan, countTX, "THANH XUAN");
return;
}
}
}
else if (payload.indexOf("CG") >= 0 || payload.indexOf("CAU_GIAY") >= 0) {
unsigned long startTime = millis();
while (millis() - startTime < 6000) {
if (digitalRead(PIN_SENSOR_CG) == LOW) {
triggerEjector(servoCauGiay, countCG, "CAU GIAY ");
return;
}
}
}
else if (payload.indexOf("NTL") >= 0 || payload.indexOf("NAM_TL") >= 0) {
unsigned long startTime = millis();
while (millis() - startTime < 8000) {
if (digitalRead(PIN_SENSOR_NTL) == LOW) {
triggerEjector(servoNamTuLiem, countNTL, "NAM TU LIEM");
return;
}
}
}
}
// Cập nhật giao diện thống kê sản lượng lên LCD 20x4
void updateLCDDisplay() {
lcd.setCursor(0, 1);
lcd.print("1.Thanh Xuan : ");
lcd.print(countTX);
lcd.setCursor(0, 2);
lcd.print("2.Cau Giay : ");
lcd.print(countCG);
lcd.setCursor(0, 3);
lcd.print("3.Nam Tu Liem: ");
lcd.print(countNTL);
}
Testing và validation
Quá trình kiểm chuẩn mô hình thực nghiệm được tiến hành qua 500 chu kỳ quét liên tục với các kích cỡ mã QR khác nhau (từ $1,5\text{cm} \times 1,5\text{cm}$ đến $4\text{cm} \times 4\text{cm}$) dán trên hộp bưu kiện thử nghiệm có trọng lượng 50g – 200g.
+---------------------------------------------------------------------------------------------+
| KẾT QUẢ THỬ NGHIỆM ĐỘ TIN CẬY VẬN HÀNH (500 CHU KỲ KIỂM THỬ) |
+-----------------------+---------------+--------------------+------------------+-------------+
| Vùng phân loại | Số mẫu kiểm thử| Số lần nhận diện OK| Số lần gạt chính xác| Tỷ lệ thành công |
+-----------------------+---------------+--------------------+------------------+-------------+
| Quận Thanh Xuân (Gate1)| 170 | 169 (99,4%) | 168 (98,8%) | 98,8% |
| Quận Cầu Giấy (Gate 2) | 165 | 164 (99,4%) | 163 (98,8%) | 98,8% |
| Quận Nam Từ Liêm(Gate3)| 165 | 165 (100,0%) | 162 (98,2%) | 98,2% |
| Tổng thể toàn hệ thống | 500 | 498 (99,6%) | 493 (98,6%) | 98,6% |
+-----------------------+---------------+--------------------+------------------+-------------+
+---------------------------------------------------+
| PHÂN BỐ TRẠNG THÁI KIỂM THỬ (500 MẪU) |
+---------------------------------------------------+
| Phân loại thành công (98,6%): [493 mẫu] |
| Lỗi trượt cơ khí ( 1,0%): [ 5 mẫu] |
| Lỗi đọc mã QR ( 0,4%): [ 2 mẫu] |
+---------------------------------------------------+
- Độ trễ phản hồi hệ thống (Latency):
- Thời gian giải mã của GM65: $28\text{ms} \pm 5\text{ms}$.
- Thời gian phản hồi của cảm biến quang E18-D80NK: $1,8\text{ms}$.
- Thời gian quay góc $90^\circ$ của SG90: $180\text{ms}$.
- Tổng thời gian đáp ứng cơ điện: $< 210\text{ms}$, đảm bảo không gây trôi gói hàng ở tốc độ băng tải $0,15\text{m/s}$.
- Độ ổn định nhiệt: Sau 4 giờ chạy liên tục, nhiệt độ bề mặt module LM2596 đo được ở mức $48,2^\circ\text{C}$ (dưới ngưỡng chịu nhiệt an toàn $125^\circ\text{C}$), transistor TIP41C ổn định ở mức $41,5^\circ\text{C}$ nhờ tải dòng băng chuyền thấp ($0,8\text{A}$).
Kết quả đạt được
Hệ thống đã hoàn thành xuất sắc các mục tiêu ban đầu đặt ra:
- Chế tạo thành công mô hình phần cứng phân loại nhỏ gọn với khung inox và băng tải cao su kích thước chuẩn 500x60x100mm.
- Tích hợp thành công giao tiếp giữa 3 chuẩn truyền thông khác nhau trên cùng một vi điều khiển ATmega328P: UART (GM65), I2C (LCD 20x4) và PWM tần số 50Hz (Servo SG90).
- Hệ thống xử lý mượt mà 3 tuyến bưu kiện độc lập với tỷ lệ phân loại chuẩn xác đạt 98,6%, loại bỏ hoàn toàn hiện tượng kẹt gói hàng nhờ căn chỉnh chính xác thời gian trễ $450\text{ms}$ trên servo.
Đổi mới và đóng góp
- Kiến trúc đồng bộ lai giữa Cảm biến hình ảnh & Quang điện (Hybrid Optical-Photocell Gating): Thay vì sử dụng thuật toán tính toán thời gian trễ (Timer Delay) thuần túy dựa vào tốc độ băng tải – vốn rất dễ sai lệch khi băng tải trượt hoặc thay đổi ma sát – đồ án đã áp dụng kỹ thuật kết hợp: Module GM65 xác định "danh tính bưu kiện", còn cảm biến quang điện E18-D80NK đóng vai trò "công tắc đồng bộ vị trí thực tế". Giải pháp này loại bỏ $100%$ lỗi định thời do trượt cơ khí.
- Tối ưu hóa tài nguyên phần cứng giá rẻ: Đạt được khả năng quét và điều khiển đa cổng phân loại trên vi điều khiển 8-bit ATmega328P chỉ với 2KB SRAM mà không cần đến các bộ vi xử lý nhúng đắt tiền như Raspberry Pi hay máy tính công nghiệp.
- Cải thiện năng suất và độ chính xác: Nâng cao hiệu suất phân loại lên $68%$ so với thao tác thủ công, đồng thời giảm thiểu sai sót từ $5%$ xuống dưới $1,4%$.
Ứng dụng thực tế và triển khai
Hệ thống có khả năng ứng dụng trực tiếp tại các bưu cục cấp quận/huyện của VNPost, Viettel Post, Giao Hàng Nhanh (GHN), J&T Express, hoặc các kho lưu chuyển hoàn tất đơn hàng (Fulfillment Centers) của Shopee, Lazada.
KHO GIAO NHẬN THƯƠNG MẠI ĐIỆN TỬ
|
+---------------------+---------------------+
| |
v v
[Trạm Phân Tuyến Quận Huyện] [Hệ Thống Đóng Gói Sản Phẩm]
- Tự động tách bưu phẩm theo 3 khu vực - Tự động kiểm tra tính hợp lệ
- Tự động đếm sản lượng vào thùng - Loại bỏ sản phẩm in sai mã QR
Phân tích tài chính và thời gian hoàn vốn (ROI Analysis)
| Hạng mục chi phí phần cứng |
Đơn giá (VNĐ) |
Số lượng |
Thành tiền (VNĐ) |
| Board mạch vi điều khiển Arduino Uno R3 |
120.000 |
1 |
120.000 |
| Module quét mã 1D/2D GM65 UART |
650.000 |
1 |
650.000 |
| Cảm biến hồng ngoại E18-D80NK |
45.000 |
3 |
135.000 |
| Micro Servo TowerPro SG90 |
35.000 |
3 |
105.000 |
| Màn hình LCD 20x4 + Module I2C PCF8574 |
85.000 |
1 |
85.000 |
| Mạch hạ áp LM2596 + Nguồn Adapter 24V 2A |
110.000 |
1 |
110.000 |
| Động cơ giảm tốc 24VDC 52RPM + BJT TIP41C |
150.000 |
1 |
150.000 |
| Khung băng tải cơ khí mini + Dây đai |
145.000 |
1 |
145.000 |
| Tổng chi phí chế tạo (BOM Cost) |
|
|
1.500.000 VNĐ |
- So sánh hiệu quả kinh tế:
- Chi phí thuê 01 nhân công phân loại: $\approx 6.500.000\text{ VNĐ/tháng}$.
- Hệ thống tự động thay thế 02 vị trí đọc và phân tuyến thủ công, giúp tiết kiệm $13.000.000\text{ VNĐ/tháng}$.
- Thời gian hoàn vốn đầu tư (Payback Period): Dưới 0,5 tháng vận hành.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Cơ cấu gạt sử dụng động cơ Micro Servo SG90 có nhông nhựa và momen xoắn giới hạn ($1,6\text{ kg}\cdot\text{cm}$), chỉ phù hợp cho bưu kiện nhẹ dưới $200\text{g}$.
- Vi điều khiển ATmega328P chỉ có 01 bộ phần cứng UART (chân 0 Rx, 1 Tx), gây khó khăn khi vừa muốn nạp code/giao tiếp Serial Monitor với máy tính vừa nhận dữ liệu từ cảm biến GM65 nếu không dùng SoftwareSerial.
- Hệ thống chưa có khả năng lưu trữ cơ sở dữ liệu lớn hoặc kết nối mạng công nghiệp để đồng bộ lên Cloud ERP.
Hướng phát triển tiếp theo
- Thay thế cơ cấu gạt servo bằng xy lanh khí nén tác động kép (Pneumatic Actuator) điều khiển qua van điện từ Solenoid Valve để phân loại các kiện hàng nặng đến 10kg – 20kg.
- Nâng cấp bộ vi điều khiển trung tâm lên dòng ESP32 (tích hợp Wi-Fi/Bluetooth, 3 bộ UART phần cứng, xung nhịp 240MHz) hoặc STM32F407 để đẩy dữ liệu đếm thời gian thực lên máy chủ thông qua giao thức MQTT/HTTP RESTful API.
- Tích hợp thêm cảm biến trọng lượng Loadcell kết hợp module giải mã ADC 24-bit HX711 để phát hiện và cảnh báo các bưu kiện sai lệch khối lượng so với thông tin khai báo trên mã QR.
Đối tượng hưởng lợi
- Sinh viên & Giảng viên ngành Kỹ thuật Điện - Điện tử / Tự động hóa: Tài liệu tham khảo toàn diện về tích hợp hệ thống quang học - cơ điện tử, phương pháp xử lý giao thức truyền thông nối tiếp và kỹ thuật chống nhiễu trong mạch công suất.
- Kỹ sư phát triển hệ thống nhúng (Embedded Developers): Nắm bắt kiến trúc điều khiển kết hợp cảm biến tiệm cận với module nhận dạng hình ảnh, mẫu thiết kế phần cứng ổn định với nguồn nuôi độc lập.
- Doanh nghiệp Logistics vừa và nhỏ (SMEs): Cơ sở để chế tạo các module phân loại hàng hóa nội bộ với chi phí đầu tư ban đầu cực thấp, dễ dàng bảo trì và thay thế linh kiện tại thị trường Việt Nam.
Câu hỏi thường gặp
-
Yêu cầu kỹ thuật tối thiểu để triển khai và vận hành hệ thống là gì?
Hệ thống yêu cầu nguồn điện lưới 220VAC chuyển đổi qua nguồn Adapter 24VDC 2A, không gian lắp đặt tối thiểu $600\text{mm} \times 300\text{mm}$, môi trường làm việc khô ráo, nhiệt độ $0 - 50^\circ\text{C}$ và cường độ ánh sáng môi trường không vượt quá 85.000 LUX.
-
Hệ thống có thể mở rộng lên bao nhiêu cổng phân loại (sorting bins)?
Trên vi điều khiển Arduino Uno R3, hệ thống có thể mở rộng tối đa 5 cổng phân loại. Nếu kết hợp thêm IC ghi dịch mở rộng 74HC595 hoặc module điều khiển 16 kênh PWM PCA9685 giao tiếp qua bus I2C, hệ thống có thể dễ dàng mở rộng lên từ 16 đến 64 cổng phân loại độc lập mà không cần thay đổi vi điều khiển chính.
-
Làm thế nào để tích hợp hệ thống với phần mềm quản lý kho (WMS/ERP) có sẵn?
Dữ liệu sau khi giải mã từ GM65 có thể được Arduino Uno gửi trực tiếp qua cổng USB Serial lên máy tính trạm trung tâm. Tại đây, một ứng dụng viết bằng C#, Python hoặc Node.js sẽ lắng nghe cổng COM, truy vấn API máy chủ kho để kiểm tra trạng thái đơn hàng và gửi lệnh phản hồi điều khiển ngược lại hệ thống.
-
Quy trình bảo trì và thay thế linh kiện định kỳ ra sao?
Cần vệ sinh bề mặt thấu kính module quang học GM65 và mắt thu phát hồng ngoại E18-D80NK bằng khăn mềm khô định kỳ 1 tháng/lần. Kiểm tra độ căng dây đai băng tải và bôi trơn bánh răng hộp số động cơ DC định kỳ 3 tháng/lần.
-
Chi phí chế tạo chi tiết và thời gian hoàn vốn thực tế?
Tổng chi phí gia công chế tạo mô hình hoàn chỉnh là 1.500.000 VNĐ. Với năng suất xử lý thay thế từ 1 đến 2 công nhân tại bưu cục nhỏ, thời gian hoàn vốn đầu tư chỉ mất chưa đầy 15 - 30 ngày làm việc.
Kết luận
Đề tài "Mô hình phân loại sản phẩm theo mã QR" của sinh viên Ngọc Văn Lập (Khoa CNKT Điện - Điện tử, Trường Đại học Công nghệ Đông Á), dưới sự hướng dẫn của TS. Nguyễn Sơn Hải, đã chứng minh tính khả thi và hiệu quả vượt trội của việc ứng dụng công nghệ vi điều khiển vào giải bài toán tự động hóa logistics. Bằng việc kết hợp chính xác giữa module quét mã quang học GM65, hệ thống cảm biến quang điện E18-D80NK và vi điều khiển ATmega328P, đề tài đã tạo nên một giải pháp kỹ thuật hoàn chỉnh: tốc độ nhận diện nhanh dưới 30ms, độ chính xác phân loại đạt 98,6%, kết cấu mạch điện phân phối nguồn tối ưu chống nhiễu tốt và chi phí chế tạo tiết kiệm. Đây là nền tảng thực tiễn vững chắc để tiếp tục phát triển thành các dây chuyền phân loại bưu kiện tự động công nghiệp quy mô lớn trong tương lai.