ESP32 Cảm biến chuyển động

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

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

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
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×breadboard (bo mạch thí nghiệm)
1×dây jumper (dây jumper)
1×(Tùy chọn) DC Power Jack
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 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 là một cảm biến có thể 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 để phát hiện sự hiện diện của con người trong nhiều ứng dụng (tự động bật/tắt bóng đèn, kích hoạt/ngừng thang cuốn, phát hiện kẻ xâm nhập, mở/đóng cửa...)

Sơ đồ chân cảm biến chuyển động HC-SR501

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

  • Chân VCC: kết nối chân này với VCC (5V)
  • Chân GND: kết nối chân này với GND (0V)
  • Chân OUTPUT: kết nối chân này với chân input của ESP32. Chân này xuất tín hiệu tương ứng với việc phát hiện chuyển động:
    • LOW nếu không phát hiện chuyển động
    • HIGH nếu phát hiện chuyển động

    Ngoài ra còn có hai biến trở và một jumper trên cảm biến chuyển động HC-SR501. Các biến trở và jumper này được sử dụng để điều chỉnh cài đặt của cảm biến. Hướng dẫn chi tiết được mô tả trong phần Sử dụng nâng cao.

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

    Cách thức hoạt động của cảm biến chuyển động HC-SR501

    Nguyên lý hoạt động của cảm biến HC-SR501 dựa trên sự thay đổi của bức xạ hồng ngoại trên vật thể chuyển động. Để được phát hiện bởi cảm biến HC-SR501, vật thể phải đáp ứng hai yêu cầu:

    • Vật thể đang phát ra tia hồng ngoại
    • Vật thể đang chuyển động hoặc rung động

    Vì vậy:

    • 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 không cử động), nó sẽ KHÔNG được cảm biến phát hiện.
    • 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 xe), nó sẽ KHÔNG được cảm biến phát hiện.

    Động vật và con người tự nhiên phát ra tia hồng ngoại. Do đó, động vật và con người có thể được cảm biến HC-SR501 phát hiện nếu họ đang chuyển động.

    Video trên cho thấy nguyên lý hoạt động của cảm biến chuyển động. Trong thực tế, cảm biến chuyển động có thể hoạt động khác nhau tùy theo cài đặt của cảm biến (được mô tả trong phần Sử dụng nâng cao)

    Phát hiện sự hiện diện của con người

    Bản thân cảm biến KHÔNG trực tiếp phát hiện sự hiện diện của con người, cảm biến chỉ phát hiện chuyển động. Và sau đó sự hiện diện của con người được suy luận dựa trên việc phát hiện chuyển động:

    • Nếu phát hiện chuyển động, con người có mặt
    • Nếu KHÔNG phát hiện chuyển động, con người KHÔNG có mặt

    Có một vấn đề với quy tắc này trong thực tế, con người có mặt trong phạm vi cảm biến nhưng KHÔNG chuyển động. Khi đó chuyển động KHÔNG được phát hiện. ESP32 (hoặc MCU) suy luận rằng con người KHÔNG có mặt.

    Tuy nhiên, cảm biến được sử dụng rộng rãi để phát hiện con người trong nhiều ứng dụng vì vấn đề này KHÔNG nghiêm trọng và giá cảm biến rẻ.

    ESP32 và cảm biến chuyển động HC-SR501

    Khi một chân của ESP32 được cấu hình như một digital input, nó có thể đọc trạng thái (LOW hoặc HIGH) của bất cứ thứ gì được kết nối với nó.

    Bằng cách kết nối chân ESP32 với chân OUTPUT của cảm biến HC-SR501, chúng ta có thể sử dụng code ESP32 để đọc giá trị của chân OUTPUT, và sau đó suy luận chuyển động.

Sơ đồ đấu nối giữa cảm biến chuyển động HC-SR501 và ESP32

  • Cách kết nối ESP32 và cảm biến chuyển động sử dụng breadboard (cấp nguồn qua cáp USB)
ESP32 cảm biến chuyển động sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

  • Cách kết nối ESP32 và cảm biến chuyển động sử dụng breadboard (cấp nguồn qua chân Vin)
ESP32 cảm biến chuyển động sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

how to connect ESP32 and cảm biến chuyển động
how to wire ESP32 and cảm biến chuyển động

Cài đặt ban đầu

Điều chỉnh phạm vi phát hiện Vặn hoàn toàn theo chiều kim đồng hồ.
Điều chỉnh độ trễ thời gian Vặn hoàn toàn ngược chiều kim đồng hồ.
Bộ chọn kích hoạt lặp lại Đặt jumper như hình bên dưới.
ESP32 cảm biến chuyển động initial setting

Cách lập trình cảm biến chuyển động

  • Cấu hình một chân của ESP32 thành chế độ digital input bằng cách sử dụng hàm pinMode()
pinMode(PIN_TO_SENSOR, INPUT);
  • Đọc trạng thái của chân OUTPUT của cảm biến bằng cách sử dụng hàm digitalRead().
pinStateCurrent = digitalRead(PIN_TO_SENSOR);
  • Phát hiện bắt đầu chuyển động (trạng thái chân thay đổi từ LOW sang HIGH)
pinStatePrevious = pinStateCurrent; // lưu trữ trạng thái cũ pinStateCurrent = digitalRead(PIN_TO_SENSOR); // đọc trạng thái mới if (pinStatePrevious == LOW && pinStateCurrent == HIGH) { // trạng thái chân thay đổi: LOW -> HIGH Serial.println("Motion detected!"); }
  • Phát hiện dừng chuyển động (trạng thái chân thay đổi từ HIGH sang LOW)
pinStatePrevious = pinStateCurrent; // lưu trữ trạng thái cũ pinStateCurrent = digitalRead(PIN_TO_SENSOR); // đọc trạng thái mới if (pinStatePrevious == HIGH && pinStateCurrent == LOW) { // trạng thái chân thay đổi: HIGH -> LOW Serial.println("Motion stopped!"); }

Code ESP32

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 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/esp32/esp32-motion-sensor */ const int PIN_TO_SENSOR = 19; // GPIO19 pin connected to OUTPUT pin of sensor int pinStateCurrent = LOW; // current state of pin int pinStatePrevious = LOW; // previous state of pin void setup() { Serial.begin(9600); // initialize serial pinMode(PIN_TO_SENSOR, INPUT); // set ESP32 pin to input mode to read value from OUTPUT pin of sensor } void loop() { pinStatePrevious = pinStateCurrent; // store old state pinStateCurrent = digitalRead(PIN_TO_SENSOR); // read new state if (pinStatePrevious == LOW && pinStateCurrent == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); // TODO: turn on alarm, light or activate a device ... here } else if (pinStatePrevious == HIGH && pinStateCurrent == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); // TODO: turn off alarm, light or deactivate a device ... here } }

Các bước nhanh

  • Nếu đây là lần đầu bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Sao chép code trên và dán vào Arduino IDE.
  • Biên dịch và upload code lên board ESP32 bằng cách nhấn nút Upload trên Arduino IDE
  • Mở Serial Monitor trên Arduino IDE
how to open serial monitor on Arduino ide
  • Di chuyển tay bạn phía trước phạm vi cảm biến
  • Xem kết quả trong 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.

Tham khảo ngôn ngữ lập trình

Bình luận