Để bất kỳ dự án nào trở nên sống động, chúng ta cần sử dụng cảm biến. Cảm biến đóng vai trò là tai mắt cho tất cả các ứng dụng được nhúng, nó giúp Bộ vi điều khiển kỹ thuật số hiểu những gì đang thực sự xảy ra trong thế giới Analog thực này. Trong hướng dẫn này, chúng ta sẽ học cách Giao diện Cảm biến Siêu âm HC-SR04 với vi điều khiển PIC.
Các HC-SR04 là một bộ cảm biến siêu âm có thể được sử dụng để đo khoảng cách giữa bất cứ nơi nào 2cm đến 450cm (theo lý thuyết). Cảm biến này đã được chứng minh là xứng đáng khi phù hợp với nhiều dự án liên quan đến phát hiện chướng ngại vật, đo khoảng cách, lập bản đồ môi trường, v.v. Ở phần cuối của bài viết này, bạn sẽ tìm hiểu cách hoạt động của cảm biến này và cách giao diện nó với vi điều khiển PIC16F877A để đo khoảng cách và hiển thị nó trên màn hình LCD. Nghe thú vị phải không !! Vậy hãy bắt đầu…
Vật liệu thiết yếu:
- MCU PIC16F877A với thiết lập lập trình
- Màn hình LCD 16 * 2
- Cảm biến siêu âm (HC-SR04)
- Kết nối dây
Cảm biến siêu âm hoạt động như thế nào?
Trước khi tìm hiểu thêm, chúng ta nên biết cách hoạt động của cảm biến Siêu âm để có thể hiểu hướng dẫn này tốt hơn nhiều. Cảm biến siêu âm được sử dụng trong dự án này được hiển thị bên dưới.
Như bạn có thể thấy, nó có hai mắt tròn giống như hình chiếu và bốn chân cắm ra khỏi nó. Hai mắt như hình chiếu là Máy phát và máy thu sóng Siêu âm (sau đây gọi là sóng Hoa Kỳ). Máy phát phát ra sóng US ở tần số 40Hz, sóng này truyền trong không khí và bị phản xạ trở lại khi cảm nhận được vật thể. Các sóng trở lại được quan sát bởi máy thu. Bây giờ chúng ta biết thời gian cần thiết để làn sóng này phản xạ và quay trở lại và tốc độ của sóng Hoa Kỳ cũng là phổ quát (3400cm / s). Sử dụng thông tin này và các công thức trung học dưới đây, chúng tôi có thể tính khoảng cách được bao phủ.
Khoảng cách = Tốc độ × Thời gian
Bây giờ chúng ta đã biết cách hoạt động của một cảm biến Hoa Kỳ, hãy để chúng ta làm thế nào nó có thể được giao tiếp với bất kỳ MCU / CPU nào bằng cách sử dụng bốn chân. Những bốn chân là VCC, Trigger, Echo và Ground tương ứng. Mô-đun hoạt động trên + 5V và do đó chân Vcc và chân nối đất được sử dụng để cấp nguồn cho mô-đun. Hai chân còn lại là chân I / O mà chúng ta sử dụng để giao tiếp với MCU của mình. Chân kích hoạt nên được khai báo là chân đầu ra và được đặt ở mức cao đối với 10uS, điều này sẽ truyền sóng Hoa Kỳ vào không khí dưới dạng bùng nổ âm thanh 8 chu kỳ. Khi sóng được quan sát, chân Echo sẽ tăng cao trong khoảng thời gian chính xác mà sóng của Hoa Kỳ đã lấy để quay trở lại mô-đun cảm biến. Do đó chân Echo này sẽ được khai báo là đầu vàovà một bộ đếm thời gian sẽ được sử dụng để đo thời gian ghim cao. Điều này có thể được hiểu rõ hơn bằng biểu đồ thời gian dưới đây.
Hy vọng bạn đã có một cách dự kiến để giao tiếp cảm biến này với PIC. Chúng tôi sẽ sử dụng mô-đun Bộ hẹn giờ và mô-đun LCD trong hướng dẫn này và tôi cho rằng bạn đã quen thuộc với cả hai, nếu không, vui lòng quay lại hướng dẫn tương ứng bên dưới vì tôi sẽ bỏ qua hầu hết các thông tin liên quan đến nó.
- Giao diện LCD với Vi điều khiển PIC
- Hiểu về bộ hẹn giờ trong vi điều khiển PIC
Sơ đồ mạch:
Sơ đồ mạch hoàn chỉnh để giao tiếp Cảm biến siêu âm với PIC16F877A được hiển thị bên dưới:
Như đã trình bày, mạch không liên quan gì đến màn hình LCD và chính cảm biến siêu âm. Cảm biến của Mỹ có thể được cấp nguồn + 5V và do đó nó được cấp nguồn trực tiếp bởi bộ điều chỉnh điện áp 7805. Cảm biến có một chân đầu ra (chân kích hoạt) được kết nối với chân 34 (RB1) và chân đầu vào (chân Echo) được kết nối với chân 35 (RB2). Kết nối chân hoàn chỉnh được minh họa trong bảng dưới đây.
S.Không: |
Số pin PIC |
Tên ghim |
Kết nối với |
1 |
21 |
RD2 |
RS của LCD |
2 |
22 |
RD3 |
E của LCD |
3 |
27 |
RD4 |
D4 của LCD |
4 |
28 |
RD5 |
D5 của LCD |
5 |
29 |
RD6 |
D6 của LCD |
6 |
30 |
RD7 |
D7 của LCD |
7 |
34 |
RB1 |
Kích hoạt của Hoa Kỳ |
số 8 |
35 |
RB2 |
Tiếng vọng của Hoa Kỳ |
Lập trình Vi điều khiển PIC của bạn:
Chương trình hoàn chỉnh cho hướng dẫn này được đưa ra ở cuối trang này, bên dưới tôi đã giải thích mã thành các đoạn nhỏ đầy đủ ý nghĩa để bạn hiểu. Như đã nói trước đó, chương trình liên quan đến khái niệm về giao diện LCD và Bộ hẹn giờ sẽ không được giải thích chi tiết trong hướng dẫn này vì chúng tôi đã trình bày chúng trong các hướng dẫn trước.
Bên trong, chức năng chính chúng ta bắt đầu với việc khởi tạo các chân IO và các thanh ghi khác như bình thường. Chúng tôi xác định các chân IO cho LCD và cảm biến Hoa Kỳ và cũng khởi tạo thanh ghi Bộ hẹn giờ 1 bằng cách đặt nó hoạt động trên tiền vô hướng 1: 4 và sử dụng đồng hồ bên trong (Fosc / 4)
TRISD = 0x00; // PORTD được khai báo là đầu ra cho giao diện LCD TRISB0 = 1; // Xác định chân RB0 làm đầu vào để sử dụng làm chân ngắt TRISB1 = 0; // Chân kích hoạt của cảm biến US được gửi dưới dạng chân đầu ra TRISB2 = 1; // Chân tiếng vọng của cảm biến US được đặt làm chân đầu vào TRISB3 = 0; // RB3 là chân đầu ra cho LED T1CON = 0x20; // 4 đồng hồ vô hướng trước và đồng hồ nội bộ
Bộ định thời 1 là bộ định thời 16 bit được sử dụng trong PIC16F877A, thanh ghi T1CON điều khiển các tham số của mô-đun bộ định thời và kết quả sẽ được lưu trữ trong TMR1H và TMR1L vì nó là kết quả 16 bit nên 8 đầu tiên sẽ được lưu trữ trong TMR1H và 8 tiếp theo trong TMR1L. Bộ hẹn giờ này có thể được bật hoặc tắt bằng cách sử dụng TMR1ON = 0 và TMR1ON = 1 tương ứng.
Bây giờ, bộ đếm thời gian đã sẵn sàng để sử dụng, nhưng chúng ta phải gửi sóng Hoa Kỳ ra khỏi cảm biến, để làm điều này, chúng ta phải giữ chân Trigger ở mức cao 10uS, điều này được thực hiện bằng đoạn mã sau.
Kích hoạt = 1; __delay_us (10); Kích hoạt = 0;
Như được hiển thị trong biểu đồ thời gian ở trên, chân Echo sẽ ở mức thấp cho đến khi sóng quay trở lại và sau đó sẽ đi lên cao và ở mức cao trong khoảng thời gian chính xác để sóng quay trở lại. Thời gian này phải được đo bằng mô-đun Timer 1, có thể được thực hiện bằng dòng dưới đây
while (Tiếng vọng == 0); TMR1ON = 1; while (Tiếng vọng == 1); TMR1ON = 0;
Khi thời gian được đo, giá trị kết quả sẽ được lưu trong các thanh ghi TMR1H và TMR1L, các thanh ghi này phải được phân nhóm để tập hợp lại để lấy giá trị 16 bit. Điều này được thực hiện bằng cách sử dụng dòng bên dưới
time_taken = (TMR1L - (TMR1H << 8));
Đây TIME_TAKEN sẽ ở dạng byte, để có được giá trị thời gian thực tế chúng ta phải sử dụng dưới công thức.
Thời gian = (Giá trị thanh ghi 16 bit) * (1 / Đồng hồ nội bộ) * (Thang đo trước) Đồng hồ nội bộ = Fosc / 4 Trong trường hợp của chúng tôi, Fosc = 20000000Mhz và thang đo trước = 4 Do đó giá trị của Đồng hồ nội bộ sẽ là 5000000Mhz và giá trị thời gian sẽ là Thời gian = (giá trị thanh ghi 16 bit) * (1/5000000) * (4) = (giá trị thanh ghi 16 bit) * (4/5000000) = (giá trị thanh ghi 16 bit) * 0,0000008 giây (HOẶC) Thời gian = (giá trị thanh ghi 16-bit) * 0,8 micro giây
Trong chương trình của chúng tôi, giá trị của thanh ghi 16 bit được lưu trữ trong biến time_taken và do đó dòng dưới đây được sử dụng để tính time_taken trong micro giây
time_taken = time_taken * 0.8;
Tiếp theo chúng ta phải tìm cách tính khoảng cách. Như chúng ta biết khoảng cách = tốc độ * thời gian. Nhưng ở đây kết quả sẽ được chia cho 2 vì sóng bao phủ cả khoảng cách truyền và khoảng cách nhận. Tốc độ của sóng us (âm thanh) là 34000cm / s.
Khoảng cách = (Tốc độ * Thời gian) / 2 = (34000 * (giá trị thanh ghi 16 bit) * 0,0000008) / 2 Khoảng cách = (0,0272 * Giá trị thanh ghi 16 bit) / 2
Vì vậy, khoảng cách có thể được tính bằng cm như sau:
khoảng cách = (0,0272 * time_taken) / 2;
Sau khi tính toán giá trị của khoảng cách và thời gian thực hiện, chúng ta chỉ cần hiển thị chúng trên màn hình LCD.
Đo khoảng cách bằng PIC và Cảm biến siêu âm:
Sau khi thực hiện kết nối và tải lên mã, thiết lập thử nghiệm của bạn sẽ trông giống như sau được hiển thị trong hình dưới đây.
Bảng PIC Perf, hiển thị trong hình này, được tạo ra cho loạt bài hướng dẫn PIC của chúng tôi, trong đó chúng tôi đã học cách sử dụng vi điều khiển PIC. Bạn có thể muốn quay lại các hướng dẫn về Vi điều khiển PIC sử dụng MPLABX và XC8 nếu bạn không biết cách ghi chương trình bằng Pickit 3, vì tôi sẽ bỏ qua tất cả các thông tin cơ bản đó.
Bây giờ, đặt một vật thể trước cảm biến và nó sẽ hiển thị vật thể đó cách cảm biến bao xa. Bạn cũng có thể nhận thấy thời gian thực hiện được hiển thị bằng micro giây để sóng truyền và quay trở lại.
Bạn có thể di chuyển đối tượng ở khoảng cách bạn muốn và kiểm tra giá trị được hiển thị trên màn hình LCD. Tôi đã có thể đo khoảng cách từ 2cm đến 350cm với độ chính xác 0,5cm. Đây là một kết quả khá mỹ mãn! Hy vọng bạn thích hướng dẫn này và học được cách tự làm một cái gì đó. Nếu bạn có bất kỳ nghi ngờ nào, hãy thả chúng trong phần bình luận bên dưới hoặc sử dụng diễn đàn.
Đồng thời kiểm tra giao diện của cảm biến siêu âm với các bộ vi điều khiển khác:
- Đo khoảng cách dựa trên cảm biến siêu âm & Arduino
- Đo khoảng cách bằng cảm biến siêu âm Raspberry Pi và HCSR04
- Đo khoảng cách sử dụng HC-SR04 và Vi điều khiển AVR