Ứng dụng phát hiện vật cản

Cái này viết ngắn gọn.

Ứng dụng phát hiện vật cản

Phát hiện vật cản bằng cảm biến vật cản hồng ngoại thông báo phát hiện qua LED và hiển thị kết quả trên Serial Monitor của trình biên dịch Arduino-IDE.

Cảm biến vật cản hồng ngoại hoạt động bằng cách phát ra tia hồng ngoại. Khi có vật cản, tia hồng ngoại phát đi sẽ gặp bề mặt vật cản và bị phản xạ lại vào LED thu hồng ngoại trên cảm biến từ đó giúp chúng ta phát hiện có vật cản hay không.

Các linh kiện chuẩn bị

Chức năng các linh kiện

  • Board UnoX:
  • Đọc dữ liệu từ cảm biến hồng ngoại.
  • Xuất tín hiệu thông báo cho LED và hiển thị kết quả trên Serial Monitor của trình biên dịch Aruino-IDE.
  • Cảm biến vật cản hồng ngoại:
  • Xử lí dữ liệu hồng ngoại và gửi dữ liệu Digital qua board UnoX.
  • Cảm biến có khả năng phát hiện vật cản trong khoảng 2cm ~ 80cm.

Cảm biến vật cản hồng ngoại sẽ bị nhiễu bởi ánh sáng hồng ngoại, cho nên không thể dùng cảm biến khi có ánh sáng mặt trời chiếu vào.

Đấu nối

UnoXCảm biến vật cản hồng ngoại
3.3VVCC
GNDGND
A1OUT

Mã nguồn

  • Khai báo các chân của cảm biến kết nối với UnoX và cấu hình IN/OUT cho các chân này.
  • Lấy dữ liệu từ cảm biến vật cản hồng ngoại dùng hàm digitalRead().
  • Dựa vào dữ liệu này để điều khiển LED sắng hoặc tắt và hiển thị trạng thái DETECT hoặc UNDETECT.
  #define sensorPin  A1     // Chọn chân A1 là chân đọc dữ liệu từ cảm biến.
  #define pinLed     3      // Chọn chân số 3 của Unox là chân xuất tín hiệu điều khiển LED D6

  int sensorValue = 0;      // Biến lưu trữ giá trị đến từ cảm biến.
  int sensorValuePrev = 0;  // Biến lưu trữ giá trị trước của cảm biến

  void setup() {
    Serial.begin(9600);
    pinMode(pinLed, OUTPUT); // Chân số 3 là output
  }

  void loop() {
    // Đọc giá trị từ cảm biến
    sensorValue = digitalRead(sensorPin);
    // Nếu giá trị cảm biến thay đổi thì thực hiện các lệnh bên dưới.
    if (sensorValue != sensorValuePrev) {
      // Nếu giá trị cảm biến = 0, in ra chữ DETECT và LED D6 sáng.
      if(sensorValue==0){
        Serial.println("DETECT");   // in ra chữ DETECT
        digitalWrite(pinLed, HIGH); // LED sáng.
        Serial.println();           // Xuống hàng.
      } else {     // Ngược lại thì in ra chữ UNDETECT và LED D6 tắt.
        Serial.println("UNDETECT"); // in ra chữ UNDETECT
        digitalWrite(pinLed, LOW);  // LED tắt.
        Serial.println();           // Xuống hàng.
      }
      // Gán biến sensorValuePrev là giá trị hiện tại của biến sensorValue đến khi biến
      sensorValue thay đổi giá trị thì quay lại thực hiện các lệnh trên
      sensorValuePrev = sensorValue;
    }
    delay(100); // delay 0,1s
  }

Kết quả

  • Khi phát hiện vật cản (ly nước màu vàng) LED D6 sẽ sáng và màn hình Serial Monitor của trình biên dịch Arduino-IDE sẽ hiển thị DETECT (phát hiện)
  • Khi không có vật cản (ly nước màu vàng) LED D6 sẽ tắt và màn hình Serial Monitor của trình biên dịch Arduino-IDE sẽ hiển thị UNDETECT (không phát hiện).

Ứng dụng mở rộng

  • Xe dò tự động tránh vật cản.
  • Xe dò line.