Cảm biến siêu âm HC-SR04 với Arduino | Làm thước đo khoảng cách

Cảm biến khoảng cách siêu âm HC-SR04 được sử dụng rất phổ biến để xác định khoảng cách vì RẺ và CHÍNH XÁC. Cảm biến sử dụng sóng siêu âm và có thể đo khoảng cách trong khoảng từ 2 -> 300 cm, với độ chính xác gần như chỉ phụ thuộc vào cách lập trình.

Thông số kỹ thuật:

  • Mạch cảm biến: HC-SR04
  • Màu sắc: Xanh dương + Bạc
  • Điện áp làm việc: 5 VDC
  • Dòng điện tĩnh: < 2mA.
  • Tín hiệu đầu ra: tín hiệu tần số điện, mức cao 5V, mức thấp 0V.
  • Góc cảm biến: Không quá 15 độ.
  • Khoảng cách phát hiện: 2cm ~ 450cm.
  • Độ chính xác cao: Lên đến 3mm
  • Chế độ kết nối: VCC / trig (T) / echo (R) / GND

Nguyên tắc làm việc:

  • Kích hoạt cảm biến bằng cách gửi tín hiệu mức cao trong 10us.
  • Mô-đun tự động gửi tám xung sóng vuông 40khz và tự động phát hiện xem có nhận tín hiệu xung quay lại hay không
  • Nếu có tín hiệu quay trở lại cảm biến trả về tín hiệu mức cao, thông qua khoản thời gian từ lúc kích hoạt cảm biến cho tới khi có tín hiệu trả về quý khách có thể tính ra khoảng cách.

Phần cứng cần thiết

    Sơ đồ kết nối

    CT1

    Code

    #include <LiquidCrystal.h>
    const int trig = 12;     // chân trig của HC-SR04
    const int echo = 11;     // chân echo của HC-SR04
    const int out = 13;   // chân Relay out
    const int bz = 3;
    //LCD pin to Arduino
    const int pin_RS = 8;
    const int pin_EN = 9;
    const int pin_d4 = 4;
    const int pin_d5 = 5;
    const int pin_d6 = 6;
    const int pin_d7 = 7;
    //const int pin_Backlight = 10;
    LiquidCrystal lcd(pin_RS, pin_EN, pin_d4, pin_d5, pin_d6, pin_d7);
    byte ledPin[] = { A5,A4,A3,A2,A1,A0 };
    byte pinCount;
    byte muc_nuoc = 2;
    int moc_tren = 780;
    int moc_duoi = 330;
    bool out_status = 0;  // Trạng thái out: 0 là tắt, 1 là bật
    void setup()
    {
     Serial.begin(9600);  
     pinMode(trig, OUTPUT);   // chân trig sẽ phát tín hiệu
     pinMode(echo, INPUT);    // chân echo sẽ nhận tín hiệu
     pinMode(out, OUTPUT);
     pinMode(bz, OUTPUT);
     lcd.begin(16, 2);
     pinCount = sizeof(ledPin);  // Lấy số lượng LED
       for (byte i = 0; i < pinCount; i++) {
         pinMode(ledPin[i], OUTPUT);  //Các chân LED là OUTPUT
         digitalWrite(ledPin[i], LOW); //Mặc định các chân LED sẽ tắt
       }
     pinMode(2, INPUT_PULLUP);
    }
    void loop()
    {
       unsigned long duration; // biến đo thời gian
       int distance;           // biến lưu khoảng cách
     /* Phát xung từ chân trig */
     digitalWrite(trig, 0);   // tắt chân trig
     delayMicroseconds(2);
     digitalWrite(trig, 1);   // phát xung từ chân trig
     delayMicroseconds(5);   // xung có độ dài5 microSeconds
     digitalWrite(trig, 0);   // tắt chân trig
     /* Tính toán thời gian */
     // Đo độ rộng xung HIGH ở chân echo.
     duration = pulseIn(echo, HIGH);
       // Tính khoảng cách đến vật.
     distance = int(duration / 2 / 29.412);
       /* In kết quả ra Serial Monitor */
     Serial.print(distance);
     Serial.println("cm");
     lcd.setCursor(0, 0);
     lcd.print("Distance: ");
     lcd.print(distance+1);
     lcd.print("cm   ");
     delay(200);
       if (distance < 10)
       {
          
         Danger();
       }
       else if (distance < 20)
       {
         Warning();
       }
       else {
         lcd.setCursor(0, 1);
         lcd.print("   TCL_47.BLOG   ");
       }
     
     lcd.setCursor(0, 0);
     lcd.print("   TCL_47.BLOG   ");
    }
    void Warning()
    {
       for (int a = 0; a < 3; a++)
       {
         lcd.setCursor(0, 1);
         lcd.print(" WARNING!   ");
         digitalWrite(out, 1);
         digitalWrite(bz, 1);
         delay(300);
         lcd.setCursor(0, 1);
         lcd.print("               ");
         digitalWrite(out, 0);
         digitalWrite(bz, 0);
         delay(150);
       }
    }
    void Danger()
    {
       for (int a = 0; a < 3; a++)
       {
         lcd.setCursor(0, 1);
         lcd.print(" DANGER! ");
         digitalWrite(out, 1);
         digitalWrite(bz, 1);
         delay(150);
         digitalWrite(out, 0);
         digitalWrite(bz, 0);
         lcd.setCursor(0, 1);
         lcd.print("               ");
         delay(75);
       }
    }
    void Danger1()
    {
       for (int a = 0; a < 3; a++)
       {
         lcd.setCursor(0, 1);
         lcd.print(" CO TROM!  ");
         digitalWrite(out, 1);
         digitalWrite(bz, 1);
       }
    }

    File: 

    Video

    cam bien sieu am hc-sr04,hcsr04, tlc47 truong cong ly, trương công lý