B36 – Sử dụng cảm biến siêu âm IOE SR-05

Không giống những cảm biến siêu âm tiệm cận khác, IOE SR-05 giao tiếp với vi điều khiển thông qua chuẩn USART. Điều này giúp tăng độ chính xác và dễ kiểm soát chương trình hơn.

Về hình dạng và kích thước, IOE SR-05 không khác gì những cảm biến cùng loại. Tuy nhiên, nếu quan sát kỹ ta sẽ thấy sự khác biệt ở chân với các ký hiệu đánh dấu.

  • Một số thông số cơ bản:
  • Kích thước nhỏ, kích thước bảng PCB chỉ 2.2 * 3.6CM
  • Có một cổng dữ liệu IO truyền dữ liệu số trực tiếp của khoảng cách đo được.
  • Chu kỳ đo khoảng cách chỉ 18ms, giúp giảm đáng kể thời gian đo.
  • Phạm vi vượt quá tự động trả về dữ liệu AAAA, giảm thời gian chờ đợi sau khi vượt quá phạm vi.
  • Có một đèn LED màu đỏ ở mặt sau để chỉ trạng thái làm việc, khi có chướng ngại vật, đèn LED sẽ sáng.
  • Dòng định mức: 8mA
  • Tần suất làm việc: 40KHz
  • Phạm vi dao động: 0mm- 2000mm
  • Sai số:  1mm
  • Thời gian đáp ứng: 18ms
  • Giao thức truyền nối tiếp: 9600,n,8,1 (Khi chọn chế độ truyền dữ liệu nối tiếp)

Kết nối với Arduino rất đơn giản.

VCC – đầu vào điện áp rộng: hỗ trợ 3v-5.5v

TXD – đầu ra nối tiếp – Cũng là chân ECHO

EN – (Chân kích hoạt, 0 khi mô-đun hoạt động, 1 khi không hoạt động) – Cũng là chân Trig

GND – 0V

Chú ý sử dụng Software Serial thì chỉ cần chân RX, như ví dụ trong hình là chân 2. Chân TX 3 không sử dụng. Còn nếu sử dụng Arduino Mega thì dùng chân Serial cứng.

Chương trình ví dụ như sau (cho Arduino Mega với 2 cảm biến)

// bandardalat.com
// Mega & IOE SR-05
 uint8_t trig1 = 33; // Digital        
 uint8_t echo1 = 15; //RX Serial3
 uint8_t trig2 = 37;
 uint8_t echo2 = 17;
 unsigned long duration1 = 0;
 unsigned long duration2 = 0;
 long unsigned distance1 = 0;
 long unsigned distance2 = 0;
 uint8_t distanceValue[4] = {0,0,0,0};
 void setup()
 {
   Serial.begin(9600);
   Serial3.begin(9600);
   Serial2.begin(9600);
   pinMode(trig1, OUTPUT);
   pinMode(trig2, OUTPUT);
   digitalWrite(trig1, HIGH);
   digitalWrite(trig2, HIGH);
   pinMode(echo1, INPUT);
   pinMode(echo2, INPUT);
 }
 void loop()
 {
   Distance1();
   delay(1000);
   Distance2();
 }
 void Distance1(void)
 {
   while ( Serial3.read() >= 0 );        
   digitalWrite(trig1, 0);     
   while (Serial3.available() <= 4)     
   {
   }
   distanceValue[0] = Serial3.read();    
   if ( distanceValue[0] == 0xFF )      
   {
     for (uint8_t i = 1; i <= 3; i ++)
     {
       distanceValue[i] = Serial3.read();
     }
   }
 digitalWrite(trig1, 1);      
 distance1 = distanceValue[1] * 256 + distanceValue[2];                  
   if ((distanceValue[3] == distanceValue[1] + distanceValue[2] - 1))
   {
     Serial.print("The distance 1 is : ");
     Serial.print(distance1);
     Serial.println(" mm");
   }
 }
 void Distance2(void)
 {
   while ( Serial2.read() >= 0 );        
   digitalWrite(trig2, 0);     
   while (Serial2.available() <= 4)     
   {
   }
   distanceValue[0] = Serial2.read();    
   if ( distanceValue[0] == 0xFF )      
   {
     for (uint8_t i = 1; i <= 3; i ++)
     {
       distanceValue[i] = Serial2.read();
     }
   }
 digitalWrite(trig2, 1);      
 distance2 = distanceValue[1] * 256 + distanceValue[2];                  
   if ((distanceValue[3] == distanceValue[1] + distanceValue[2] - 1))
   {
     Serial.print("The distance 2 is : ");
     Serial.print(distance2);
     Serial.println(" mm");
   }
 }

Video minh họa

Leave a Reply

Your email address will not be published. Required fields are marked *