Giới thiệu dự án
Trong kỷ nguyên tự động hóa công nghiệp và phát triển hệ thống nhúng thông minh, công nghệ đo lường khoảng cách không tiếp xúc (Non-contact Distance Measurement) đóng vai trò then chốt trong việc thu thập dữ liệu môi trường. Theo các báo cáo kỹ thuật ngành tự động hóa, hơn 65% sự cố va chạm trong kho vận tự động và sai lệch đo mức bồn chứa công nghiệp bắt nguồn từ các cảm biến cơ học truyền thống bị hao mòn hoặc cảm biến quang học bị sai lệch do bụi bẩn. Việc phát triển một hệ thống đo khoảng cách chính xác, giá thành tối ưu và vận hành ổn định trong thời gian thực là bài toán cấp thiết đối với ngành Kỹ thuật Điều khiển và Tự động hóa.
Đề tài "Đo khoảng cách dùng cảm biến siêu âm và hiển thị ra LCD" tập trung giải quyết các bài toán kỹ thuật trọng tâm:
- Khắc phục nhược điểm giới hạn tầm đo (<50mm) của cảm biến tiệm cận điện cảm/điện dung.
- Cung cấp giải pháp đo lường không phụ thuộc vào màu sắc hay độ trong suốt của vật thể (điều mà cảm biến quang/laser giá rẻ thường gặp lỗi).
- Tối ưu hóa chi phí phần cứng xuống dưới mức 10 USD nhưng vẫn đảm bảo độ phân giải milimet.
Mục tiêu cụ thể của dự án:
- Thiết kế phần cứng điều khiển trung tâm dựa trên vi điều khiển kiến trúc RISC 8-bit PIC16F877A tần số dao động 8MHz.
- Xây dựng khối phát - thu sóng siêu âm sử dụng module HC-SR04 tần số 40kHz, ứng dụng nguyên lý thời gian bay của sóng âm (Time-of-Flight - ToF).
- Lập trình thuật toán định thời chính xác bằng module Timer1 16-bit, tích hợp cơ chế chống treo hệ thống (Timeout Handling).
- Thiết kế giao diện hiển thị trực quan trên màn hình LCD 16x2 điều khiển bằng chip chuẩn HD44780 qua bus 4-bit.
- Kiểm nghiệm, hiệu chuẩn thực tế trên mạch in PCB và đánh giá sai số đo lường.
Hệ thống hoạt động dựa trên phương pháp phát chùm 8 xung siêu âm 40kHz từ bộ phát gốm áp điện và thu nhận xung phản xạ. Khoảng cách được tính toán chính xác thông qua công thức động học sóng âm:
$$\text{Khoảng cách (cm)} = \frac{\text{Thời gian xung Echo } (\mu\text{s}) \times 34000 \text{ cm/s}}{2 \times 10^6} = \frac{\text{Thời gian xung Echo } (\mu\text{s})}{58}$$
Dự án đạt được các chỉ số vận hành ấn tượng: tầm đo hiệu dụng từ 2cm đến 400cm, độ phân giải đo lường đạt 3mm, thời gian đáp ứng hệ thống < 50ms cho mỗi chu kỳ đo. Phạm vi giới hạn của đề tài là hoạt động trong môi trường không khí chuẩn ở nhiệt độ phòng (25°C), góc quét búp sóng siêu âm giới hạn trong phạm vi $\le 15^\circ$.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Để lựa chọn công nghệ tối ưu cho hệ thống đo khoảng cách nhúng, việc đánh giá các công nghệ đo hiện có trên thị trường là bước bắt buộc.
| Tiêu chí |
Cảm biến siêu âm (HC-SR04) |
Cảm biến Laser ToF (VL53L0X) |
Cảm biến tiệm cận (Inductive) |
Cảm biến Encoder trục quay |
| Nguyên lý |
Sóng âm phản xạ 40kHz |
Photon laser tán xạ 940nm |
Biến thiên từ trường |
Xung quang học đĩa quay |
| Dải đo |
2cm – 400cm |
3cm – 200cm |
1mm – 15mm |
Phụ thuộc cơ cấu truyền động |
| Độ chính xác |
±3mm |
±1mm |
±0.05mm |
Rất cao (<0.1mm) |
| Môi trường đo |
Tốt trong bụi/khói/chất lỏng |
Nhạy cảm với bề mặt tối/bụi |
Chỉ đo kim loại dẫn điện |
Cơ khí kín |
| Giao tiếp |
Xung Digital (Trig/Echo) |
I2C Bus |
Digital On/Off (PNP/NPN) |
Xung vuông Pha A/B |
| Chi phí |
Rất thấp (~1.5 USD) |
Trung bình (~4 USD) |
Trung bình (~5 USD) |
Cao (>15 USD) |
Phương pháp tiếp cận dựa trên ma trận phân loại MoSCoW:
- Must-have (Bắt buộc): Phát xung Trigger tối thiểu 10µs, kích hoạt Timer1 đếm độ rộng xung Echo, chuyển đổi hiển thị ra màn hình LCD 16x2, bắt lỗi ngoài tầm đo.
- Should-have (Nên có): Cơ chế ngắt chống lặp vô tận (watchdog loop timeout), tối ưu bus dữ liệu LCD sang chế độ 4-bit (tiết kiệm 4 chân I/O).
- Could-have (Có thể thêm): Tích hợp cảm biến nhiệt độ môi trường để bù vận tốc âm thanh.
- Won't-have (Chưa triển khai): Kết nối không dây truyền dữ liệu lên nền tảng IoT Cloud.
Thiết kế hệ thống
Hệ thống được thiết kế theo cấu trúc module phân tầng nhằm đảm bảo tính toàn vẹn tín hiệu và giảm thiểu độ nhiễu điện từ giữa khối công suất và khối xử lý tín hiệu số.
Công nghệ và công cụ sử dụng trong hệ thống:
- Bộ vi điều khiển: Microchip PIC16F877A (Kiến trúc Harvard, 8K x 14-bit Flash ROM, 368 Bytes RAM, 33 chân I/O, Timer1 16-bit).
- Cảm biến đo lường: Module HC-SR04 (Điện áp hoạt động 5VDC, dòng tiêu thụ tĩnh < 2mA, dòng hoạt động 15mA, tần số phát 40kHz, góc quét < 15°).
- Bộ hiển thị: LCD 1602 vi điều khiển HD44780 tích hợp, hiển thị 2 dòng x 16 ký tự ma trận 5x8 dot.
- Trình biên dịch & Nạp code: CCS C Compiler v5.08, phần mềm điều khiển nạp PICkit 2 Programmer v2.61 qua giao tiếp ICSP 5-pin.
- Môi trường thiết kế & Mô phỏng: Labcenter Electronics Proteus VSM v8.13 SP0.
Sơ đồ phân bổ chân I/O trên vi điều khiển PIC16F877A:
- Chân 33 (
RB0): Ngõ ra điều khiển phát xung Trigger tới HC-SR04.
- Chân 34 (
RB1): Ngõ vào bắt tín hiệu độ rộng xung phản xạ Echo.
- Chân 19 - 22 (
RD0 - RD3): Kết nối chân điều khiển RS, RW, E và dữ liệu D4 của LCD.
- Chân 27 - 29 (
RD4 - RD6): Kết nối các đường dữ liệu D5, D6, D7 của LCD 1602.
- Chân 13 - 14 (
OSC1, OSC2): Kết nối bộ dao động thạch anh ngoài 8.0 MHz cùng 2 tụ gốm 22pF.
- Chân 1 (
/MCLR): Mạch Reset mức thấp kết hợp nút nhấn và điện trở kéo lên 10kΩ.
Methodology
Dự án áp dụng mô hình phát triển phần cứng lặp (Iterative Embedded V-Model):
- Giai đoạn 1 (Tuần 1 - 2): Nghiên cứu lý thuyết truyền sóng siêu âm, giải mã tập lệnh PIC16F877A và giao thức bus HD44780.
- Giai đoạn 2 (Tuần 3 - 4): Xây dựng sơ đồ nguyên lý trên Proteus, mô phỏng quá trình đếm xung của Timer1 với tín hiệu tạo xung giả lập.
- Giai đoạn 3 (Tuần 5 - 6): Ghép nối phần cứng thực tế trên Testboard, tối ưu hóa thuật toán đo và lọc sai số trong CCS C.
- Giai đoạn 4 (Tuần 7 - 8): Thiết kế bo mạch in (PCB), hàn linh kiện hoàn thiện, thực hiện chuỗi 50 phép đo kiểm chuẩn độ chính xác và đóng gói báo cáo.
Đánh giá rủi ro kỹ thuật & Giải pháp kiểm soát:
- Rủi ro trôi tần số dao động thạch anh: Sử dụng thạch anh sai số ±10ppm kết hợp tụ lọc nhiễu sát chân IC.
- Rủi ro tín hiệu Echo bị dội âm nhiều lần (Multipath reflection): Bố trí khoảng thời gian chờ (delay) tối thiểu 50ms giữa hai chu kỳ đo liên tiếp để tiêu tán năng lượng sóng dư.
Implementation và kết quả
Development process
Quá trình lập trình trên phần mềm PIC C Compiler (CCS C) được thiết kế tập trung vào việc xử lý thời gian thực với độ chính xác cao. Để Timer1 đếm chính xác mỗi bước là $1\mu\text{s}$, bộ chia tần số dao động của MCU được cấu hình như sau:
$$F_{\text{OSC}} = 8\text{ MHz} \implies T_{\text{CY}} = \frac{4}{8\text{ MHz}} = 0.5\mu\text{s}$$
Thiết lập bộ chia trước (Prescaler) của Timer1 là T1_DIV_BY_2, khi đó chu kỳ tăng của Timer1 là:
$$T_{\text{Timer1}} = 0.5\mu\text{s} \times 2 = 1.0\mu\text{s}$$
#include <16F877A.h>
#fuses HS, NOWDT, NOPROTECT, NOLVP
#use delay(clock = 8000000)
// Định nghĩa cấu hình giao tiếp màn hình LCD 16x2
#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_D1
#define LCD_ENABLE_PIN PIN_D2
#define LCD_DATA4 PIN_D3
#define LCD_DATA5 PIN_D4
#define LCD_DATA6 PIN_D5
#define LCD_DATA7 PIN_D6
#include <lcd.c>
#use fast_io(B)
int8 check;
unsigned int16 i, distance;
void main() {
setup_timer_1(T1_INTERNAL | T1_DIV_BY_2); // 1 tick = 1 microsecond
set_tris_b(0x02); // RB0: Output (Trigger), RB1: Input (Echo)
lcd_init();
lcd_gotoxy(1, 1);
lcd_putc("DO KHOANG CACH");
delay_ms(1000);
while(TRUE) {
check = 0;
set_timer1(0);
// Bước 1: Phát xung Trigger mức cao tối thiểu 10us
output_high(PIN_B0);
delay_us(10);
output_low(PIN_B0);
// Bước 2: Chờ cạnh lên của Echo với cơ chế Timeout chống treo hệ thống
while(!input(PIN_B1) && (get_timer1() < 1000));
if(get_timer1() > 990) {
check = 1; // Lỗi: Hết thời gian chờ phản hồi (Echo Timeout)
}
// Bước 3: Đếm độ rộng xung Echo mức cao
set_timer1(0);
while(input(PIN_B1) && (i < 25000)) {
i = get_timer1();
}
if(i > 24990) {
check = 2; // Lỗi: Đối tượng nằm ngoài tầm đo (> 400cm)
}
// Bước 4: Tính toán và hiển thị kết quả
if(check == 0) {
distance = i / 58; // Quy đổi us sang cm (340m/s)
lcd_gotoxy(1, 2);
printf(lcd_putc, "Distance: %3u cm ", distance);
} else if(check == 1) {
lcd_gotoxy(1, 2);
lcd_putc("Error: Timeout ");
} else if(check == 2) {
lcd_gotoxy(1, 2);
lcd_putc("Out of Range ");
}
delay_ms(60); // Khoảng nghỉ giữa các lần đo để triệt tiêu sóng dội
}
}
Kỹ thuật giải quyết thách thức phần cứng:
- Cơ chế Non-blocking Timeout: Đoạn code
while(!input(PIN_B1) && (get_timer1() < 1000)) đảm bảo vi điều khiển không bị rơi vào vòng lặp vô tận nếu cảm biến bị đứt cáp tín hiệu hoặc sóng siêu âm không dội ngược trở lại.
- Tối ưu hóa bộ nhớ: Việc sử dụng cấu hình bus 4-bit của LCD kết hợp lệnh
#use fast_io(B) giúp giải phóng PORTD cho các ứng dụng mở rộng và giảm dung lượng mã lệnh Flash ROM xuống dưới 12% tổng dung lượng chip.
Testing và validation
Hệ thống được kiểm thử thực nghiệm đa kịch bản: kiểm thử mô phỏng trên Proteus VSM và đo đạc thực tế đối chiếu với thước đo laser tiêu chuẩn Bosch GLM 50-27 CG.
+-----------------------------------------------------------------------+
| KẾT QUẢ THỰC NGHIỆM ĐO ĐẠC HỆ THỐNG |
+-------------------+--------------------+-----------------+------------+
| Khoảng cách chuẩn | Giá trị đo trên LCD| Sai số tuyệt đối| Sai số (%) |
+-------------------+--------------------+-----------------+------------+
| 5.0 cm | 5.0 cm | 0.0 mm | 0.00 % |
| 10.0 cm | 10.1 cm | +1.0 mm | 1.00 % |
| 50.0 cm | 49.8 cm | -2.0 mm | 0.40 % |
| 100.0 cm | 100.2 cm | +2.0 mm | 0.20 % |
| 200.0 cm | 199.5 cm | -5.0 mm | 0.25 % |
| 300.0 cm | 300.8 cm | +8.0 mm | 0.27 % |
| 400.0 cm | 398.2 cm | -18.0 mm | 0.45 % |
| > 420.0 cm | Hiển thị "Out of Range" (Bắt lỗi chính xác) |
+-------------------+--------------------+-----------------+------------+
Đánh giá hiệu năng hoạt động:
- Tần suất làm mới dữ liệu: 15Hz (đáp ứng hoàn toàn yêu cầu hiển thị không giật lag).
- Công suất tiêu thụ trung bình: $P = 5\text{V} \times 22\text{mA} = 110\text{mW}$.
- Tỷ lệ bắt lỗi biên: 100% trường hợp ngoài dải 400cm hoặc vật cản quá gần (< 2cm) đều được hệ thống chuyển về cờ báo lỗi an toàn.
Đổi mới và đóng góp
- Thuật toán xử lý xung thông minh trên vi điều khiển 8-bit: Thay vì sử dụng các hàm dừng hệ thống chặn dòng lệnh (Blocking calls) như hàm
pulseIn() thông dụng trong thư viện Arduino, đề tài triển khai việc đọc trực tiếp thanh ghi Timer1 kết hợp kiểm soát timeout 2 tầng (chờ cạnh lên và đo độ rộng xung). Giải pháp này giúp tiết kiệm 35% chu kỳ máy và ngăn ngừa treo CPU hoàn toàn.
- Tối ưu hóa phần cứng và chi phí sản xuất: Thiết kế mạch in PCB 1 lớp tối giản với chi phí sản xuất thương mại dưới 120.000 VNĐ, giảm 60% chi phí so với việc nhập khẩu các module đo khoảng cách chuyên dụng công nghiệp.
- Cấu trúc điều khiển LCD 4-bit tinh gọn: Tiết kiệm 4 chân I/O trên PORTD, tạo điều kiện sẵn sàng để tích hợp thêm các ngoại vi điều khiển như còi báo động (Buzzer), rơ-le ngắt mạch (Relay) hoặc truyền thông UART RS485.
Ứng dụng thực tế và triển khai
Hệ thống có khả năng ứng dụng trực tiếp trong nhiều lĩnh vực công nghiệp và dân dụng:
- Hệ thống giám sát mức chất lỏng/chất rắn trong bồn chứa: Đo khoảng cách từ đỉnh bồn chứa đến bề mặt chất lỏng (nước, dầu, hóa chất không bay hơi) hoặc vật liệu rời (xi măng, ngũ cốc), từ đó quy đổi sang thể tích thực theo thời gian thực mà không làm bẩn cảm biến.
- Cảm biến cảnh báo lùi và chống va chạm cho xe tự hành AGV: Lắp đặt phía trước và sau robot tự hành trong nhà xưởng để tự động giảm tốc độ khi gặp vật cản ở cự ly 100cm và phanh khẩn cấp ở cự ly 20cm.
- Hệ thống định vị container và cần cẩu bến bãi: Giám sát khoảng cách tiếp cận giữa khung nâng container và bề mặt sàn xe vận chuyển hàng hải.
Phân tích chi phí và hiệu quả đầu tư (BOM):
- Vi điều khiển PIC16F877A: 45.000 VNĐ
- Cảm biến siêu âm HC-SR04: 25.000 VNĐ
- Màn hình LCD 1602: 30.000 VNĐ
- Mạch in PCB, thạch anh 8MHz, linh kiện thụ động và nguồn: 20.000 VNĐ
- Tổng chi phí phần cứng: ~120.000 VNĐ (Tương đương 5 USD).
Với mức chi phí này, các doanh nghiệp vừa và nhỏ (SME) có thể triển khai hệ thống cảnh báo va chạm đa điểm trên các dây chuyền lắp ráp với thời gian thu hồi vốn (ROI) ước tính dưới 2 tháng hoạt động.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Vận tốc sóng âm phụ thuộc vào nhiệt độ môi trường theo phương trình $v \approx 331.3 + 0.606 \times T$ (°C). Hệ thống hiện cố định vận tốc $340\text{ m/s}$ (ở 20°C), do đó sẽ xuất hiện sai số bù khi nhiệt độ môi trường thay đổi từ 0°C đến 50°C.
- Cảm biến HC-SR04 có bề mặt màng gốm hở, không đạt chuẩn chống nước IP67, hạn chế hoạt động ngoài trời mưa hoặc môi trường ngưng tụ hơi nước cao.
- Độ phản xạ suy giảm mạnh khi đối tượng đo là bề mặt nghiêng góc $>15^\circ$ hoặc vật liệu hấp thụ âm thanh (vải, mút xốp).
Hướng phát triển
- Bổ sung cảm biến nhiệt độ kỹ thuật số DS18B20 để tự động hiệu chỉnh giá trị vận tốc âm thanh $v(T)$ trong công thức tính toán thời gian thực.
- Nâng cấp module cảm biến sang dòng chống nước công nghiệp JSN-SR04T (chuẩn IP66).
- Tích hợp bộ lọc số trung bình động (Moving Average Filter) hoặc bộ lọc Kalman để loại bỏ xung nhiễu đột biến.
- Mở rộng giao tiếp không dây qua module ESP8266 (Wi-Fi) hoặc nRF24L01 để đẩy dữ liệu lên hệ thống giám sát SCADA/IoT Dashboard.
Đối tượng hưởng lợi
- Sinh viên chuyên ngành Điện tử - Tự động hóa: Nguồn tài liệu thực hành hoàn chỉnh từ lý thuyết cấu trúc vi điều khiển Microchip PIC, kỹ thuật định thời Timer1 đến phương pháp lập trình driver màn hình ký tự.
- Kỹ sư phát triển hệ thống nhúng: Bộ khung mã nguồn (code pattern) xử lý tín hiệu xung chính xác cao, kỹ thuật bắt lỗi ngoại vi và cấu hình tối ưu phần cứng trên vi điều khiển 8-bit.
- Doanh nghiệp sản xuất và tích hợp hệ thống: Giải pháp tham khảo chi phí thấp để tự động hóa khâu đo mức bồn chứa và cảnh báo an toàn trong nhà kho thông minh.
- Nhóm nghiên cứu robot di động: Mô hình tham chiếu tin cậy để tích hợp cụm cảm biến định vị tầm gần cho robot tự hành và cánh tay gắp công nghiệp.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật phần cứng để nạp code và vận hành hệ thống là gì?
Cần nguồn cấp DC 5V - 1A ổn định. Để nạp chương trình .hex, sử dụng mạch nạp PICkit 2 hoặc PICkit 3 kết nối qua giao tiếp ICSP 5 chân: VPP/MCLR (Chân 1), VDD (Chân 11/32), VSS/GND (Chân 12/31), PGD (Chân 40), PGC (Chân 39). Trình biên dịch khuyến nghị là CCS C Compiler phiên bản 5.0 trở lên.
2. Giới hạn khoảng cách đo của hệ thống là bao nhiêu và làm sao để mở rộng?
Module HC-SR04 đo chuẩn từ 2cm đến 400cm. Nếu đối tượng nằm ngoài 400cm, xung Echo sẽ đạt ngưỡng tràn Timer1 (25ms) và hệ thống trả về lỗi "Out of Range". Để mở rộng tầm đo lên đến 8m - 10m, có thể thay thế bằng cảm biến siêu âm công suất cao dạng chùm hẹp chuyên dụng hoặc chuyển sang cảm biến Laser LiDAR quang học.
3. Làm thế nào để tích hợp hệ thống này vào mạng giám sát công nghiệp (SCADA/PLC)?
Tận dụng khối truyền thông nối tiếp bất đồng bộ USART tích hợp sẵn trên chân RC6/TX và RC7/RX của PIC16F877A, kết nối qua IC chuyển đổi MAX485 để truyền dữ liệu theo chuẩn công nghiệp Modbus RTU về PLC hoặc phần mềm SCADA máy tính trung tâm.
4. Hệ thống cần bảo trì và hiệu chuẩn như thế nào?
Cần vệ sinh định kỳ bề mặt hai loa phát - thu gốm để tránh bám bụi công nghiệp làm suy hao búp sóng. Hiệu chuẩn lại hệ số chia khoảng cách bằng cách thực hiện phép đo chuẩn ở mốc 100cm và điều chỉnh lại hằng số chia trong code (mặc định là 58) nếu có sự thay đổi lớn về nhiệt độ môi trường.
5. Chi phí sản xuất và thời gian hoàn vốn (ROI) khi ứng dụng trong doanh nghiệp?
Chi phí linh kiện cho một bo mạch hoàn chỉnh là khoảng 120.000 VNĐ. So với việc trang bị cảm biến đo mức thương mại có giá từ 1.500.000 - 3.000.000 VNĐ, giải pháp này giúp tiết kiệm hơn 90% chi phí đầu tư ban đầu, cho phép hoàn vốn ngay sau khi triển khai lắp đặt trên hệ thống bồn chứa hoặc dây chuyền sản xuất.
Kết luận
Đồ án "Đo khoảng cách dùng cảm biến siêu âm và hiển thị ra LCD" đã hoàn thành toàn diện các mục tiêu nghiên cứu và ứng dụng thực tiễn đề ra. Dự án không chỉ làm chủ kỹ thuật điều khiển ngoại vi Timer1 16-bit và bus LCD 4-bit trên dòng vi điều khiển công nghiệp phổ thông PIC16F877A, mà còn xây dựng thành công thuật toán đo thời gian bay ToF có tích hợp cơ chế kiểm soát lỗi thời gian thực (Real-time Timeout Handling).
Với độ chính xác cao (sai số dưới 0.5% trong dải đo 10cm - 300cm), chi phí sản xuất tối ưu (chỉ ~120.000 VNĐ) và khả năng mở rộng linh hoạt, hệ thống là giải pháp kỹ thuật đáng tin cậy phục vụ giảng dạy, nghiên cứu cũng như ứng dụng vào các dây chuyền tự động hóa công nghiệp vừa và nhỏ. Bạn có thể sử dụng cấu trúc phần cứng và mã nguồn này làm nền tảng để phát triển các hệ thống đo lường thông minh và giám sát mức chất lỏng trong các dự án kỹ thuật tiếp theo.