Arduino UNO R4 Cảm Biến Chuyển Động

Hướng dẫn này sẽ chỉ bạn cách sử dụng cảm biến chuyển động HC-SR501 và Arduino UNO R4 để phát hiện con người. Cụ thể, chúng ta sẽ học:

Arduino UNO R4 cảm biến chuyển động

Linh Kiện Cần Thiết

1×Arduino UNO R4 WiFi hoặc Arduino UNO R4 Minima
1×(Tùy chọn) DIYables STEM V4 IoT, tương thích với Arduino Uno R4 WiFi
1×Arduino UNO R4 Minima (Thay thế)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×HC-SR501 Motion Sensor
1×Alternatively, AM312 Mini Motion Sensor
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino UNO R4
1×(Khuyến nghị) Breadboard Shield for Arduino UNO R4
1×(Khuyến nghị) Enclosure for Arduino UNO R4
1×(Khuyến nghị) Power Splitter for Arduino UNO R4
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V4 IoT Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Cảm Biến Chuyển Động HC-SR501

hc-sr501 cảm biến chuyển động

Cảm biến PIR HC-SR501 phát hiện chuyển động của con người hoặc động vật. Nó thường được sử dụng trong nhiều ứng dụng khác nhau như bật tắt đèn, mở đóng cửa, vận hành thang cuốn, và phát hiện kẻ xâm nhập.

Khi bạn đến những nơi có cửa tự động mở đóng, đèn bật tắt tự động, hoặc thang cuốn tự khởi động, bạn có bao giờ thắc mắc "Điều này hoạt động như thế nào?" không? Nếu có, hướng dẫn này không chỉ giải thích cách thức hoạt động mà còn chỉ bạn cách tự tạo ra nó. Hãy bắt đầu!

Sơ Đồ Chân

Cảm biến chuyển động HC-SR501 có ba chân:

  • Chân GND: kết nối với GND (0V)
  • Chân VCC: kết nối với VCC (5V)
  • Chân OUTPUT: gửi tín hiệu LOW khi không có chuyển động, HIGH khi có chuyển động. Kết nối chân này với chân input của Arduino UNO R4.

HC-SR501 bao gồm một jumper và hai biến trở, giúp điều chỉnh cài đặt của cảm biến. Bắt đầu với cài đặt mặc định. Bạn có thể tìm thông tin chi tiết hơn trong phần "Sử Dụng Nâng Cao". Sử Dụng Nâng Cao

hc-sr501 cảm biến chuyển động sơ đồ chân

Cách Hoạt Động

Cảm biến HC-SR501 cảm nhận chuyển động bằng cách ghi nhận những thay đổi trong ánh sáng hồng ngoại từ vật thể di chuyển. Để cảm biến HC-SR501 có thể phát hiện một vật thể, nó phải thỏa mãn hai điều kiện:

  • đang rung chuyển hoặc di chuyển
  • đang phát ra năng lượng hồng ngoại.

Do đó:

  • Nếu một vật thể di chuyển mà không phát ra tia hồng ngoại (như robot hoặc xe đồ chơi), cảm biến sẽ không phát hiện được.
  • Nếu một vật thể phát ra tia hồng ngoại nhưng không di chuyển (như một người đứng yên), cảm biến sẽ không phát hiện được.

Con người và động vật tự nhiên phát ra hồng ngoại. Vì điều này, cảm biến có thể cảm nhận khi con người và động vật di chuyển.

Trạng thái của chân OUTPUT:

  • Nếu không có người hoặc động vật nào di chuyển trong phạm vi của cảm biến, chân OUTPUT của cảm biến ở mức LOW.
  • Nếu một người hoặc động vật bước vào phạm vi của cảm biến, chân OUTPUT thay đổi từ LOW sang HIGH, báo hiệu phát hiện chuyển động.
  • Nếu một người hoặc động vật rời khỏi phạm vi của cảm biến, chân OUTPUT thay đổi từ HIGH sang LOW, báo hiệu kết thúc chuyển động.

Video cho thấy ý tưởng cơ bản về cách hoạt động của cảm biến chuyển động. Trong các tình huống thực tế, cách thức hoạt động có thể thay đổi một chút dựa trên cài đặt của nó, như được giải thích trong phần Sử Dụng Nâng Cao.

Arduino UNO R4 - Cảm Biến Chuyển Động HC-SR501

Khi bạn cài đặt một chân trên Arduino UNO R4 làm digital input, nó có thể phát hiện xem linh kiện được kết nối đang ở trạng thái LOW hay HIGH.

Kết nối chân của Arduino UNO R4 với chân OUTPUT của cảm biến HC-SR501. Sau đó, sử dụng code Arduino UNO R4 để đọc giá trị của chân OUTPUT để phát hiện chuyển động.

Sơ Đồ Đấu Nối

Arduino UNO R4 cảm biến chuyển động sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Cài Đặt Ban Đầu

Biến Trở Điều Chỉnh Thời GianVặn hoàn toàn theo chiều ngược kim đồng hồ.
Biến Trở Điều Chỉnh Phạm ViVặn hoàn toàn theo chiều kim đồng hồ.
Jumper Chọn Chế Độ TriggerĐặt jumper như hình.
Arduino cảm biến chuyển động initial setting

Cách Lập Trình Cho Cảm Biến Chuyển Động

  • Cài đặt chân Arduino UNO R4 thành chế độ digital input bằng hàm pinMode().
pinMode(SENSOR_PIN, INPUT);
  • Sử dụng hàm digitalRead() để kiểm tra trạng thái của chân OUTPUT của cảm biến.
motion_state = digitalRead(SENSOR_PIN);
  • Phát hiện khi chuyển động bắt đầu (chân thay đổi trạng thái từ LOW sang HIGH).
prev_motion_state = motion_state; // Lưu trạng thái trước đó của chân motion_state = digitalRead(SENSOR_PIN); // Đọc trạng thái hiện tại của chân if (prev_motion_state == LOW && motion_state == HIGH) { // Kiểm tra sự chuyển đổi từ LOW sang HIGH Serial.println("Motion detected!"); }
  • Phát hiện khi chuyển động dừng (trạng thái của chân thay đổi từ HIGH sang LOW).
prev_motion_state = motion_state; // Bảo toàn trạng thái trước đó của chân motion_state = digitalRead(SENSOR_PIN); // Cập nhật trạng thái hiện tại từ input cảm biến if (prev_motion_state == HIGH && motion_state == LOW) { // Phát hiện sự chuyển đổi từ HIGH sang LOW Serial.println("Motion stopped!"); // Xuất thông báo khi chuyển động dừng lại }

Code Arduino UNO R4

/* * Mã Arduino UNO R4 này được phát triển bởi newbiely.vn * Mã Arduino UNO R4 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino-uno-r4/arduino-uno-r4-motion-sensor */ #define SENSOR_PIN 2 // Arduino UNO R4 kết nối với chân output của cảm biến chuyển động int motion_state = LOW; // Khởi tạo trạng thái chân hiện tại là LOW int prev_motion_state = LOW; // Khởi tạo trạng thái chân trước đó là LOW void setup() { Serial.begin(9600); // Bắt đầu giao tiếp serial với tốc độ 9600 baud pinMode(SENSOR_PIN, INPUT); // Cấu hình chân 2 làm input cho cảm biến } void loop() { prev_motion_state = motion_state; // Gán trạng thái chân hiện tại cho trạng thái chân trước đó để so sánh motion_state = digitalRead(SENSOR_PIN); // Đọc trạng thái hiện tại từ output của cảm biến // Kiểm tra sự chuyển đổi từ LOW sang HIGH báo hiệu phát hiện chuyển động if (prev_motion_state == LOW && motion_state == HIGH) { Serial.println("Motion detected!"); // In thông báo khi phát hiện chuyển động // Tùy chọn: Thêm các hành động khác khi phát hiện chuyển động } // Kiểm tra sự chuyển đổi từ HIGH sang LOW báo hiệu chuyển động đã dừng else if (prev_motion_state == HIGH && motion_state == LOW) { Serial.println("Motion stopped!"); // In thông báo khi chuyển động đã dừng // Tùy chọn: Thêm các hành động khác khi chuyển động dừng } }

Các Bước Thực Hiện

Làm theo các hướng dẫn từng bước sau:

  • Nếu đây là lần đầu tiên bạn sử dụng Arduino Uno R4 WiFi/Minima, hãy tham khảo hướng dẫn về Arduino UNO R4 - Cài Đặt Phần Mềm.
  • Đấu nối các linh kiện theo sơ đồ được cung cấp.
  • Kết nối board Arduino Uno R4 với máy tính của bạn bằng cáp USB.
  • Khởi động Arduino IDE trên máy tính.
  • Chọn board Arduino Uno R4 thích hợp (ví dụ: Arduino Uno R4 WiFi) và cổng COM.
  • Sao chép code ở trên và mở bằng Arduino IDE
  • Nhấn nút Upload trong Arduino IDE để upload code lên Arduino UNO R4
  • Mở Serial Monitor
  • Di chuyển tay của bạn trước mặt cảm biến
  • Kiểm tra kết quả trên Serial Monitor
COM6
Send
Motion detected! Motion stopped!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Sử Dụng Nâng Cao

Phần này chứa thông tin nâng cao có thể gây quá tải. Nếu bạn chưa chắc về nội dung, hãy bỏ qua và chuyển sang phần tiếp theo.

Chúng ta có thể điều chỉnh cài đặt của cảm biến bằng một jumper và hai biến trở, như đã mô tả ở trên.

Biến Trở Điều Chỉnh Phạm Vi Phát Hiện

Biến trở này điều chỉnh khoảng cách phát hiện (khoảng 3 mét đến 7 mét).

  • Khi vặn hoàn toàn theo chiều kim đồng hồ, phạm vi phát hiện khoảng 3 mét.
  • Khi vặn hoàn toàn ngược chiều kim đồng hồ, phạm vi phát hiện khoảng 7 mét.
cảm biến chuyển động detection range

Chúng ta có thể thay đổi cài đặt biến trở để có được phạm vi mong muốn, từ 3 mét đến 7 mét.

Biến Trở Điều Chỉnh Thời Gian Trễ

Biến trở này điều chỉnh thời gian trễ.

  • Nếu bạn vặn hoàn toàn theo chiều kim đồng hồ, thời gian trễ sẽ khoảng 5 phút.
  • Nếu bạn vặn hoàn toàn ngược chiều kim đồng hồ, thời gian trễ sẽ khoảng 3 giây.

Tiếp theo, chúng ta sẽ giải thích ý nghĩa của thời gian trễ và mối quan hệ của nó với Repeat Trigger.

cảm biến chuyển động adjust time delay

Jumper Chọn Chế Độ Trigger

Jumper này cho phép bạn chọn chế độ trigger: single trigger hoặc repeatable trigger.

cảm biến chuyển động trigger selection

Chúng ta sẽ gọi cài đặt thời gian trễ (được điều chỉnh bởi Time Delay Adjuster) là time_delay. Hãy tưởng tượng bạn tiếp tục di chuyển trong vùng phát hiện của cảm biến trong một khoảng thời gian đáng kể, chúng ta sẽ gọi là motion_time (dài hơn nhiều so với time_delay).

  • Trong chế độ single trigger, chân OUTPUT chuyển đổi giữa LOW HIGH nhiều lần. Nó giữ ở mức HIGH trong khoảng thời gian bằng "time_delay" và LOW trong thời gian cố định là 3 giây.
cảm biến chuyển động single trigger mode
  • Chân OUTPUT giữ ở mức HIGH trong suốt thời gian chuyển động cộng với thời gian trễ.
cảm biến chuyển động repeatable trigger mode

Kiểm Tra

Hãy kiểm tra các chế độ trigger. Vặn Time Delay Adjuster hoàn toàn sang trái để đặt thời gian trễ là 3 giây.

  • Chế Độ Single Trigger:
    • Đặt jumper để chọn chế độ single trigger.
    • Vẫy tay trước mặt cảm biến liên tục trong 10 giây.
    • Rút tay khỏi phạm vi của cảm biến.
    • Đợi 3 giây; sau đó kiểm tra serial monitor để xem kết quả như hình.
    COM6
    Send
    Motion detected! Motion stopped! Motion detected! Motion stopped! Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Chế Độ Repeatable Trigger:
      • Đặt jumper để kích hoạt chế độ Repeatable Trigger.
      • Di chuyển tay liên tục trước mặt cảm biến khoảng 10 giây.
      • Rút tay khỏi phạm vi của cảm biến.
      • Sau khi đợi 3 giây, kiểm tra serial monitor để xem kết quả.
      COM6
      Send
      Motion detected! Motion stopped!
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  

      Trong chế độ single trigger, cảm biến kích hoạt hai hoặc ba lần. Trong chế độ repeatable trigger, nó chỉ kích hoạt một lần.

      ※ Lưu ý:

      Trong khoảng thời gian LOW kéi dài 3 giây, cảm biến không thể phát hiện bất kỳ chuyển động nào. Điều này có nghĩa là cảm biến không hoạt động trong thời gian này, nhưng điều này thường không gây ra vấn đề gì.

      Khuyến nghị sử dụng chế độ repeatable trigger.

      Trong các ứng dụng thực tế:

      • Các thiết bị hoặc máy móc thường được bật khi phát hiện có người ở gần.
      • Các thiết bị hoặc máy móc không được tắt ngay khi người rời đi. Chúng được tắt sau một khoảng thời gian trễ nhất định.

Tài Liệu Tham Khảo Hàm

Bình Luận