I. Mô tả thực hành

Cảm biến siêu âm thường được sử dụng trên các xe tự lái để đo khoảng cách đến vật cản. Trong bài thực hành này, chúng ta sẽ làm quen với cảm biến siêu âm SRF 05 và dùng nó để đo khoảng cách. Ngoài ra, về phần lập trình, chúng ta làm quen với khái niệm hàm (function) trong C.

II. Linh kiện và cách nối dây

2.1 Cảm biến siêu âm SRF 05

2.1 Cảm biến siêu âm SRF 05

Cảm biến siêu âm SRF 05 dùng để đo khoảng cách dùng để làm cho robot có thể tránh được vật cản. Tầm hoạt động trong vòng 5m.

Nguyên lý hoạt động của cảm biến siêu âm cũng tương tự như cách định vị của loài dơi bay trong đêm. Cảm biến siêu âm bao gồm một bộ phát và một bộ thu song siêu âm. Bộ phát phát song siêu âm. Sóng siêu âm này lan truyền trong không khí, va chạm với vật cản và bị phản hồi lại. Bộ thu thu sóng phản hồi. Dựa vào thời gian phát đến thời gian nhận phản hồi, ta có thể ước tính khoảng cách từ cảm biến đến vật cản. Ví dụ khoảng cách = thời gian / 2 / 29.1, trong đó 29.1 là vận tốc (cm/s) lan truyền sóng trong không khí ở 15 độ C.

Cảm biến này hỗ trợ các chân:

  • VCC: cấp nguồn cho cảm biến.
  • Trigger: kích hoạt quá trình phát sóng âm. Cảm biến được kích hoạt bằng cách bật PIN Trigger theo thứ tự LOW – HIGH – LOW qua hàm digitalWrite.
  • Echo: bình thường sẽ ở trạng thái 0V, được kích hoạt lên 5V ngay khi có tín hiệu trả về, sau đó trở về 0V.
  • GND: nối với cực âm của mạch
  • OUT: không sử dụng

2.2 Cách nối dây

2.2 Cách nối dây

ArduinoKit VST
5VVCC (bất kì)
GNDGND (bất kì)
7echo
8trig

III. Thực hiện

Nạp đoạn code sau vào Arduino. di chuyển vật cản lại gần, ra xa cảm biến và quan sát khoảng cách hiển thị trên cổng serial.

IV. Khái niện lý thuyết

4.1 Hàm trong C (Function)

4.1 Hàm trong C (Function)

Chúng ta đã làm quen với 02 hàm bắt buộc phải có trong một chương trình Arduino là void setup()void loop() không trả về giá trị. Các phương thức (method) được viết sẵn trong thư viện LiquidCrystal_I2C gắn với đối tượng lcd trong các bài thực hành trước như lcd.print, lcd.setCursor thực hiện một công việc hoàn toàn tương tự như một hàm và không trả về giá trị.

Hàm (function) là một đoạn chương trình được tạo ra để làm một công việc gì đó. Hàm hoạt động như một cái hộp đen. Khi sử dụng hàm, ta chỉ cần quan tâm đến các tham số ngõ vào và giá trị trả về của hàm. Ví dụ khi sử dụng hàm sqrt(9.0), tham số ngõ vào của hàm là 9.0 và giá trị trả về là 3.0 (kiểu int). Nếu sử dụng hàm theo cách int a = sqrt(9.0), biến a mang giá trị 3.0 (kiểu int).

Trong bài này ta làm quen với việc tạo một hàm trong C. Hàm trong C được tạo theo cú pháp sau:

kiểu_trả_về tên_hàm(các_tham_số) {

 // khai báo các biến_cục_bộ trong hàm (có thể có hoặc không)

// các câu lệnh trong thân hàm

// return giá_trị_trả_về (có thể có hoặc không)

}

  • kiểu_trả_về: giá trị kiểu dữ liệu của dữ liệu sẽ trả về cho hàm.
  • tên_hàm: tên của hàm mà bạn muốn định nghĩa, được đặt theo qui tắc đặt tên của C.
  • biến_cục_bộ(localvariables): nếu được khai báo trong hàm thì chỉ có giá trị cục bộ trong đoạn hàm mà thôi. Hoàn toàn không có tác dụng trong các hàm khác. Ví dụ ta có thể khai báo 02 biến cục bộ khác nhau trong 02 hàm.
    Khác với biến_cục_bộbiến_toàn_cục (global variables) được khai báo từ đầu trước hàm setup() như trong các bài thực hành trước.
  • giá_trị_trả_về: giá trị trả về của hàm. Giá trị này cũng có thể là một biểu thức. Nếu kiểu_trả_vềvoid thì ta không dùng lệnh return.

4.2 Giải thích các câu lệnh

4.2 Giải thích các câu lệnh

Từ dòng 4-22 là hàm int GetDistance(). Hàm này không có tham số ngõ vào. Giá trị trả về là khoảng cách đo được theo kiểu integer, distanceCm.

  • Dòng 9-13: tạo một xung LOW-HIGH-LOW trên chân trigger của cảm biến.
  • pulseIn(ECHO,HIGH,TIMEOUT): đo khoảng thời gian đến khi chân ECHO lên HIGH. Trả về giá trị 0 nếu quá thời gian TIMEOUT. Lưu ý: Ta cũng có thể dùng hàm pulseIn với cú pháp pulseIn(ECHO,HIGH).

V. Bài Tập

Câu 1: Hiển thị khoảng cách đo được lên LCD.

Câu 2: Nếu có xe điều khiển thì gắn cảm biến lên xe điều khiển. Lập trình cho xe chạy đến còn cách vật cản 5cm thì tự động dừng.

Bài viết liên quan