Raspberry Pi Cảm Biến Chuyển Động
Bạn đã bao giờ tự hỏi, "Làm thế nào nó có thể làm được điều đó?" khi bạn gặp những nơi có cửa tự động, đèn và thang cuốn tự động? Nếu có, hướng dẫn này sẽ không chỉ trả lời câu hỏi của bạn, mà còn chỉ cho bạn cách thực hiện điều đó bằng cách sử dụng Raspberry Pi và cảm biến chuyển động. Hãy bắt đầu thôi!
Hướng dẫn này sẽ chỉ bạn cách sử dụng Raspberry Pi với cảm biến chuyển động. Cụ thể, chúng ta sẽ học:
- Cảm biến chuyển động HC-SR501 hoạt động như thế nào
- Cách kết nối cảm biến chuyển động HC-SR501 với Raspberry Pi
- Cách lập trình Raspberry Pi để đọc trạng thái từ cảm biến chuyển động HC-SR501
- Cách sử dụng Raspberry Pi và HC-SR501 để phát hiện sự thay đổi trạng thái chuyển động.
Phần Cứng Cần Thiết
| 1 | × | Raspberry Pi 5 | ||
| 1 | × | HC-SR501 Motion Sensor | ||
| 1 | × | Alternatively, AM312 Mini Motion Sensor | ||
| 1 | × | dây jumper | ||
| 1 | × | (Khuyến nghị) Screw Terminal Block Shield for Raspberry Pi | ||
| 1 | × | (Khuyến nghị) Raspberry Pi Prototyping Base Plate & Breadboard Kit | ||
| 1 | × | (Khuyến nghị) HDMI Touch Screen Monitor for Raspberry Pi |
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về Cảm Biến Chuyển Động HC-SR501

Cảm biến PIR HC-SR501 có khả năng phát hiện chuyển động của con người (hoặc động vật). Nó được sử dụng rộng rãi trong nhiều ứng dụng khác nhau, chẳng hạn như tự động bật/tắt bóng đèn, mở/đóng cửa, kích hoạt/vô hiệu hóa thang cuốn và phát hiện kẻ xâm nhập.
Sơ Đồ Chân Cảm Biến Chuyển Động
Cảm biến chuyển động HC-SR501 có 3 chân:
- Chân GND: phải được kết nối với GND (0V)
- Chân VCC: phải được kết nối với VCC (5V)
- Chân OUTPUT: là chân đầu ra ở mức LOW khi không phát hiện chuyển động và ở mức HIGH khi phát hiện chuyển động. Chân này nên được kết nối với chân input của Raspberry Pi.
HC-SR501 có một jumper và hai potentiometer. Chúng được sử dụng để điều chỉnh cài đặt của cảm biến.

Cách Hoạt Động
Cảm biến HC-SR501 có thể nhận biết chuyển động dựa trên sự thay đổi trong bức xạ hồng ngoại phát ra từ một vật thể di chuyển. Để được nhận dạng bởi cảm biến HC-SR501, vật thể phải thỏa mãn hai tiêu chí:
- Nó phải đang chuyển động hoặc rung động.
- Nó phải phát ra tia hồng ngoại.
Do đó:
- Nếu một vật thể đang chuyển động nhưng không phát ra tia hồng ngoại (ví dụ: robot hoặc đồ chơi xe), nó sẽ không được cảm biến phát hiện.
- Nếu một vật thể đang phát ra tia hồng ngoại nhưng không chuyển động (ví dụ: một người đứng yên), nó sẽ không được cảm biến phát hiện.
Con người và động vật là nguồn phát bức xạ hồng ngoại. Do đó, cảm biến có thể nhận biết chuyển động của chúng.
Trạng thái của chân OUTPUT:
- Khi không có con người (hoặc động vật) trong phạm vi phát hiện của cảm biến, chân OUTPUT ở mức LOW.
- Nếu một con người (hoặc động vật) vào phạm vi phát hiện của cảm biến, chân OUTPUT thay đổi từ LOW sang HIGH, cho biết đã phát hiện chuyển động.
- Nếu con người (hoặc động vật) rời khỏi phạm vi phát hiện của cảm biến, chân OUTPUT thay đổi từ HIGH sang LOW, cho biết chuyển động đã kết thúc.
Video trên cho thấy cách cảm biến chuyển động hoạt động về mặt lý thuyết. Trong thực tế, cảm biến chuyển động hoạt động hơi khác một chút, tùy thuộc vào cài đặt của cảm biến (được thảo luận trong phần Sử Dụng Nâng Cao).
Phát Hiện Sự Hiện Diện Của Con Người
Cảm biến không nhận biết sự hiện diện của con người. Nó chỉ phát hiện chuyển động. Chúng ta sử dụng Raspberry Pi để suy luận sự hiện diện của con người dựa trên chuyển động được phát hiện bởi cảm biến, theo nguyên tắc sau:
- Nếu quan sát thấy chuyển động, thì có người hiện diện.
- Nếu không phát hiện chuyển động, thì không có người hiện diện.
Quy tắc này không hoàn hảo trong tình huống thực tế: khi con người ở trong phạm vi của cảm biến nhưng không di chuyển, sẽ không có chuyển động nào được phát hiện. Do đó, Raspberry Pi kết luận rằng con người không có mặt.
Ví dụ, trong phòng họp của bạn, cảm biến chuyển động được sử dụng để bật và tắt đèn. Khi mọi người vào phòng, đèn sẽ được kích hoạt tự động. Nếu mọi người đều ngồi im trong cuộc họp, sẽ không có chuyển động nào được phát hiện, cho thấy không có ai hiện diện, do đó đèn sẽ được tắt. Để bật đèn lại, ai đó cần phải di chuyển.
Tuy nhiên, vấn đề này KHÔNG nghiêm trọng và cảm biến có giá rẻ. Do đó, nó được sử dụng rộng rãi để phát hiện con người trong nhiều ứng dụng.
Raspberry Pi - Cảm Biến Chuyển Động HC-SR501
Kết nối chân digital input của Raspberry Pi với chân OUTPUT của cảm biến HC-SR501. Sử dụng code Raspberry Pi, chúng ta có thể kiểm tra giá trị của chân OUTPUT để phát hiện chuyển động.
Sơ Đồ Đấu Nối

This image is created using Fritzing. Click to enlarge image
Thiết Lập Ban Đầu
| Time Delay Adjuster | Vặn ngược chiều kim đồng hồ hoàn toàn. |
| Detection Range Adjuster | Vặn theo chiều kim đồng hồ hoàn toàn. |
| Repeat Trigger Selector | Đặt jumper như hiển thị trong hình. |

Cách Lập Trình Cho Cảm Biến Chuyển Động
- Thiết lập digital input trên chân Raspberry Pi bằng cách sử dụng hàm GPIO.setup().
- Truy cập chân OUTPUT của cảm biến bằng cách sử dụng hàm GPIO.input().
Code Raspberry Pi - In Trạng Thái Chuyển Động
Các Bước Nhanh
- Đảm bảo bạn đã cài đặt Raspbian hoặc bất kỳ hệ điều hành tương thích Raspberry Pi nào khác trên Pi của bạn.
- Đảm bảo Raspberry Pi của bạn được kết nối với cùng mạng local với PC của bạn.
- Đảm bảo Raspberry Pi của bạn được kết nối internet nếu bạn cần cài đặt một số thư viện.
- Nếu đây là lần đầu tiên bạn sử dụng Raspberry Pi, xem Raspberry Pi - Cài Đặt Phần Mềm
- Kết nối PC của bạn với Raspberry Pi qua SSH sử dụng SSH client tích hợp sẵn trên Linux và macOS hoặc PuTTY trên Windows. Xem cách kết nối PC với Raspberry Pi qua SSH.
- Đảm bảo bạn đã cài đặt thư viện RPi.GPIO. Nếu chưa, hãy cài đặt bằng lệnh sau:
- Tạo file script Python motion_sensor.py và thêm code sau:
- Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
- Di chuyển tay của bạn trước phạm vi của cảm biến.
- Kiểm tra kết quả trong Terminal.
Script chạy trong vòng lặp vô hạn liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.
Code trên liên tục kiểm tra trạng thái chuyển động và in ra. Trong một số trường hợp, bạn có thể muốn in hoặc thực hiện hành động khi phát hiện sự thay đổi trong trạng thái chuyển động. Nếu gặp tình huống như vậy, hãy xem phần tiếp theo.
Code Raspberry Pi - Phát Hiện Sự Thay Đổi Trạng Thái Chuyển Động
- Tạo file script Python motion_sensor_events.py và thêm code sau:
- Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
- Di chuyển tay của bạn trước phạm vi của cảm biến.
- Kiểm tra kết quả trong Terminal.
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
Như đã nói trước đó, một jumper và hai potentiometer có thể được sử dụng để thay đổi cấu hình của cảm biến.
Bộ Điều Chỉnh Phạm Vi Phát Hiện
Potentiometer này được sử dụng để thay đổi khoảng cách có thể phát hiện (khoảng 3 đến 7 mét).
- Vặn hoàn toàn về bên phải làm cho nó phát hiện vật thể cách xa khoảng 3 mét.
- Vặn hoàn toàn về bên trái làm cho nó phát hiện vật thể cách xa khoảng 7 mét.

Bộ Điều Chỉnh Độ Trễ Thời Gian
Potentiometer này được sử dụng để thay đổi độ trễ thời gian:
- Khi vặn hoàn toàn theo chiều kim đồng hồ, độ trễ thời gian là khoảng 5 phút.
- Khi vặn hoàn toàn ngược chiều kim đồng hồ, độ trễ thời gian là khoảng 3 giây.
Phần tiếp theo giải thích khái niệm độ trễ thời gian liên quan đến Repeat Trigger.

Bộ Chọn Repeat Trigger
Có một jumper được sử dụng để chọn chế độ trigger: single trigger hoặc repeatable trigger.

Hãy gọi cài đặt độ trễ thời gian, được thiết lập qua Time Delay Adjuster, là time_delay. Nếu bạn tiếp tục di chuyển trong phạm vi của cảm biến trong thời gian dài (gọi là motion_time, dài gấp nhiều lần time_delay), thì trong Single Trigger Mode, trạng thái của chân OUTPUT sẽ chuyển đổi giữa LOW và HIGH nhiều lần. Thời gian HIGH sẽ bằng time_delay, trong khi thời gian LOW sẽ được cố định ở 3 giây.

- Chế độ repeatable trigger: Trạng thái của chân OUTPUT sẽ giữ ở mức HIGH trong khoảng thời gian (motion_time + time_delay).

Thử Nghiệm
- Chế độ single trigger:
- Đặt jumper để chọn chế độ single trigger
- Vẫy tay trước cảm biến trong khoảng 10 giây
- Di chuyển tay ra khỏi cảm biến
- Đợi 3 giây và bạn sẽ thấy kết quả trong serial monitor như sau:
- Đặt jumper để chọn chế độ Repeatable trigger
- Di chuyển tay trước cảm biến trong khoảng 10 giây
- Di chuyển tay ra khỏi phạm vi cảm biến
- Đợi 3 giây và bạn sẽ thấy kết quả trong serial monitor như sau:
- Chúng ta bật hoặc kích hoạt máy/thiết bị khi có người hiện diện
- Chúng ta không tắt hoặc vô hiệu hóa máy/thiết bị ngay lập tức khi không còn người hiện diện. Chúng ta tắt chúng sau một khoảng timeout.
Chế độ repeatable trigger:
Chúng ta có thể thấy rằng khi ở chế độ single trigger, cảm biến kích hoạt hai hoặc ba lần. Trong khi đó, khi ở chế độ repeatable trigger, cảm biến chỉ kích hoạt một lần.
※ Lưu ý:
Trong thời gian LOW (3 giây), đây là giá trị cố định và không thể điều chỉnh, cảm biến không thể phát hiện bất kỳ chuyển động nào. Nói cách khác, nó bị chặn trong khoảng thời gian này, nhưng điều này không gây ra bất kỳ vấn đề nào.
Được khuyến nghị sử dụng chế độ repeatable trigger.
Đối với nhiều ứng dụng thực tế:
Cách Sử Dụng Time Delay
Nếu không phát hiện con người, hệ thống tự động hóa sẽ đợi một khoảng thời gian trước khi thực hiện hành động.
Cảm biến chuyển động có Time Delay Adjuster có thể được thiết lập tối thiểu 3 giây và tối đa 5 phút. Ngoài ra, bất kỳ giá trị nào cũng có thể được thiết lập trong code Raspberry Pi bằng cách lập trình.
Nếu chúng ta không chỉ định timeout trong code Raspberry Pi, timeout sẽ tương đương với time delay được thiết lập trong cảm biến.