Chuyên đề arduino – Giao tiếp arduino với cảm biến siêu âm

     Giao tiếp arduino với cảm biến siêu âm là phương pháp đo khoảng cách với công nghệ siêu âm. Hiện nay công nghệ siêu âm đang được sử dụng nhiều trong cuộc sống. Bản chất của cảm biến là tính thời gian tín hiệu đến gặp vật cản. Từ đó nhân với tốc độ âm thanh truyền dẫn trong môi trường sẽ đo được khoảng cách. Bài viết hôm nay chúng ta sẽ nghiên cứu đến cách giao tiếp arduino với cảm biến siêu âm.

  NỘI DUNG BÀI VIẾT 

  • Giới thiệu về cảm biến siêu âm
  • Cấu tạo cảm biến siêu âm HY-SRF05
  • Lệnh đọc tín hiệu ping – pulseIn()
  • Nguyên lý điều khiển cảm biến
  • Ứng dụng điều khiển cảm biến siêu âm

  GIỚI THIỆU VỀ CẢM BIẾN SIÊU ÂM 

     Cảm biến siêu âm trên thị trường có rất nhiều loại. Tuy nhiên cho dù loại nào thì cũng đều có chung một phương pháp điều khiển. Chung ta sẽ sử dụng lệnh để xuất tin hiệu ping (tín hiệu dẫn đường), sau đó chờ tín hiệu trả về. Chúng ta sẽ đo kiểm thời gian tín hiệu đi và về mà cảm biến nhận được. Từ đó chúng ta sẽ biết được thời gian tín hiệu đi đến vật cản mà bạn cần đo khoảng cách.

    Cấu tạo của cảm biến siêu âm HY-SRF05 

     Cảm biến siêu âm HY-SRF05 được sử dụng để nhận biết khoảng cách từ vật thể đến cảm biến nhờ sóng siêu âm. Cảm biến có thời gian phản hồi nhanh, độ chính xác cao, phù hợp cho các ứng dụng phát hiện vật cản.

     Cảm biến siêu âm có hai chân sử dụng là chân Echo/ Trigger để nhận và phát tín hiệu ping. Và 2 chân cấp nguồn là Vcc và GND. 

    Thông số kỹ thuật

  • Điện áp hoạt động: 5VDC
  • Dòng tiêu thụ: 10-40mA
  • Tín hiệu giao tiếp: TTL
  • Chân tín hiệu: Echo, Trigger (thường dùng) và Out (ít dùng).
  • Góc quét: <15 độ
  • Tần số phát sóng: 40Khz
  • Khoảng cách đo được: 2-450cm
  • Sai số: 0.3cm (khoảng cách càng gần, bề mặt vật thể càng phẳng sai số càng nhỏ).
  • Kích thước: 43mm x 20mm x 17mm

  LỆNH ĐỌC TÍN HIỆU PING – pulseIn   

   Là lệnh đọc tín hiệu chu kỳ xung. Mục đích của lệnh là phát hiện tín hiệu xung, kể cả xung tích cực mức cao hoặc tích cực mức thấp. Xung tích cực mức cao là tín hiệu từ LOW – HIGH, tích cực mức thấp là từ HIGH – LOW.

   Cú pháp: pulseIn(<Chân đọc tín hiệu>, <Dạng tín hiệu phát hiện>);

                  pulseIn(<Chân đọc tín hiệu>, <Dạng tín hiệu phát hiện>, <Thời gian cho phép chờ tín hiệu>);

   Trong đó:

  • Chân đọc tín hiệu: là chân của arduino đọc giá trị từ cảm biến.
  • Dạng tín hiệu phát hiện: là tín mức tín hiệu để arduino nhận biết và kích hoạt bộ đếm thời gian. Nếu đặt là HIGH thì kích hoạt bộ đếm khi phát hiện mức HIGH và dừng lại khi phát hiện LOW. Ngược lại, nếu đặt là LOW thì kích hoạt bộ đếm khi phát hiện mức LOW và dừng lại khi phát hiện HIGH.
  • Thời gian cho phép chờ tín hiệu: là khoảng thời gian cho phép lệnh chờ, nếu quá thời gian mà không phát hiện tín hiệu thì dừng bộ đếm và trả về 0. Đơn vị của thời gian chờ là micro giây. Kiểu dữ liệu là unsigned long.

  NGUYÊN LÝ ĐỂ ĐIỀU KHIỂN CẢM BIẾN 

     Cảm biến này khá dễ sử dụng. Cấp nguồn 5VDC cho chân Vcc của cảm biến, cấp GND vào chân GND cảm biến. Chân Trig để phát tín hiệu ping và chân Echo nhận lại tín hiệu ping đã phát.

     Các bạn cần thực hiện những câu lệnh để điều khiển theo nguyên lý điều khiển như sau. Bạn xuất tín hiệu LOW, sau đó delay tạm dừng. Tiếp tục xuất tín hiệu mức HIGH, dùng delay tạm dừng, rồi lại xuất tín hiệu LOW ra chân Trig. Tín hiệu ping sẽ bao gồm trạng thái LOW-HIGH-LOW này tạo ra âm siêu âm cao độ hay còn gọi là ping, được phát ra từ cảm biến. Tín hiệu ping này sẽ đi ra ngoài và gặp vật cản sau đó phản hồi trở lại cảm biến. Cảm biến sẽ tạo ra một xung HIGH trên chân phản xạ của nó. Thời gian xung ping phát đi và phản hồi lại tính bằng micro giây cho biết thời gian tín hiệu đi đến mục tiêu và quay trở lại.

      Chúng ta sử dụng lệnh pulseIn để phát hiện tín hiệu ping phản hồi lại trên cảm biến. Cú pháp và chức năng của lệnh pulseIn đã được trình bày ở trên.

     Giá trị cảm biến đọc được là giá trị là thời gian với đơn vị là micro giây. Do đó, chúng ta cần chuyển đổi lại thời gian sang đơn vị met.

     thời gian (giờ) = thời gian (micro giây) / 1000000 / 3600

     Khi bạn thực hiện phép đo tín hiệu ping và biết thời gian cần thiết để tín hiệu ping di chuyển đến mục tiêu và quay trở lại. Bạn sử dụng nó để tính toán tốc độ âm thanh bằng công thức:

     Khoảng cách (miles) = tốc độ * thời gian (giờ).

     Trong đó

  • Khoảng cách: là khoảng cách đo được từ cảm biến đến mục tiêu và quay lại cảm biến (miles).
  • Tốc độ: là vận tốc di chuyển của âm thanh 776.5 miles/ giờ
  • Thời gian: là thời gian tín hiệu ping đi đến mục tiêu và quay lại cảm biến (giờ).

     Khoảng cách này là khoảng cách tín hiệu ping đi đến mục tiêu và quay lại cảm biến. Do đó, để tính khoảng cách từ cảm biến đến mục tiêu thì chúng ta phải chia 2 giá trị khoảng cách đo được.

     Hiện tại khoảng cách đo được là đơn vị miles, chúng ta muốn đổi lại đơn vị inch thì nhân với 63360. Còn nếu muốn đổi sang đơn vị centimet thì nhân thêm 2.54.

     Khoảng cách (cm) = Khoảng cách (miles) * 63360 * 2.54

     ỨNG DỤNG ĐIỀU KHIỂN CẢM BIẾN SIÊU ÂM 

     Trong đoạn chương trình này, chúng ta sẽ thực hiện đo khoảng cách và hiển thị kết quả lên màn hình serial.

 Linh kiện cần thiết

Linh kiện Số lượng
Bo arduino UNO 01
Cảm biến siêu âm 01

 Sơ đồ mạch

 

 Đoạn code chương trình

int trigPin=12; //Khai báo chân 13 là chân Trig
int echoPin=11;  //Khai báo chân 11 là Echo
float thoigian;
float vantoc_amthanh=776.5;
int khoang_cach; //Khoảng cách mong muốn là 6inch

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT); 
}
 
void loop() {
// Xuất dữ liệu ping ra chân cảm biến siêu âm
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2000);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(15);
  digitalWrite(trigPin, LOW);
  delayMicroseconds(10);
  
  thoigian = pulseIn(echoPin, HIGH);  //đọc thời gian trả về microceconds
  thoigian = thoigian/1000000; //Chuyển đơn vị về second
  thoigian = thoigian/ 3600; // Chuyển đơn vị về giờ
  
  khoang_cach = vantoc_amthanh * thoigian; // Tính khoảng cách
  khoang_cach = khoang_cach/2;
  khoang_cach = khoang_cach * 63360; //Đổi đơn vị inches
  khoang_cach = khoang_cach * 2.54; //Đổi sang đơn vị cm

  Serial.print("Khoảng cách: ");
  Serial.print(khoang_cach);
  Serial.println(" cm");
  delay(1000);
  }

   Ngoài những kiến thức về cảm biến siêu âm mà bạn đã xem trong bài viết này. Chúng ta hãy xem những cảm biến khác trong chuỗi bài viết về chuyên đề arduino.

 


Categories:

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *