ESP32 - 모션 센서 | ESP32 - Motion Sensor

이 튜토리얼은 ESP32를 HC-SR501 모션 센서와 함께 사용하는 방법을 지시합니다. 구체적으로 우리는 배울 것입니다:

준비물

1×ESP-WROOM-32 Dev Module 쿠팡 | Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×HC-SR501 Motion Sensor 쿠팡 | Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) DC Power Jack 쿠팡 | Amazon
1×(Recommended) Screw Terminal Expansion Board for ESP32 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

HC-SR501 모션 센서에 대하여

HC-SR501 Motion Sensor

HC-SR501 PIR 센서는 사람(또는 동물)의 움직임을 감지할 수 있는 센서입니다. 많은 어플리케이션에서 인간의 존재를 감지하는 데 널리 사용됩니다(자동으로 전등의 켜짐/꺼짐, 에스컬레이터의 작동/비활성화, 침입자 감지, 문의 열림/닫힘...).

HC-SR501 모션 센서 핀배열

HC-SR501 모션 센서는 3개의 핀을 가지고 있습니다:

  • VCC 핀: 이 핀을 VCC(5V)에 연결하세요
  • GND 핀: 이 핀을 GND(0V)에 연결하세요
  • OUTPUT 핀: 이 핀을 ESP32의 입력 핀에 연결하세요. 이 핀은 움직임 감지에 따른 신호를 출력합니다:
    • 움직임이 감지되지 않으면 LOW
    • 움직임이 감지되면 HIGH

    HC-SR501 모션 센서에는 두 개의 가변 저항과 한 개의 점퍼도 있습니다. 이 가변 저항들과 점퍼는 센서 설정을 조정하는 데 사용됩니다. 자세한 설명은 고급 사용법에 설명되어 있습니다.

    HC-SR501 Motion Sensor Pinout

    HC-SR501 모션 센서 작동 원리

    HC-SR501 센서의 작동 원리는 움직이는 물체의 적외선 방사 변화를 기반으로 합니다. HC-SR501 센서에 의해 탐지되려면 물체는 두 가지 요구 사항을 충족해야 합니다:

    • 객체가 적외선을 방출하고 있습니다.
    • 객체가 움직이거나 흔들리고 있습니다.

    그래서:

    • 객체가 적외선을 방출하고 있지만 움직이지 않는 경우(예: 사람이 움직이지 않고 가만히 서 있는 경우), 센서에 의해 감지되지 않습니다.
    • 객체가 움직이고 있지만 적외선을 방출하지 않는 경우(예: 로봇이나 차량), 센서에 의해 감지되지 않습니다.

    동물과 사람은 자연스럽게 적외선을 방출합니다. 따라서, 동물과 사람은 움직이고 있다면 HC-SR501 센서에 의해 감지될 수 있습니다.

    위의 동영상은 모션 센서의 작동 원리를 보여줍니다. 실제로, 모션 센서는 센서 설정(고급 사용법 섹션에서 설명됨)에 따라 다르게 작동할 수 있습니다.

    인간의 존재 감지

    센서 자체가 인간의 존재를 직접 감지하지는 않으며, 단지 움직임을 감지할 뿐입니다. 그리고 움직임이 감지되면 인간의 존재가 추론됩니다:

    • 만약 움직임이 감지되면, 사람이 존재합니다.
    • 만약 움직임이 감지되지 않으면, 사람이 존재하지 않습니다.

    이 규칙에는 실제로 문제가 있습니다. 센서 범위 내에 사람이 있지만 움직이지 않습니다. 움직임이 감지되지 않습니다. ESP32(또는 MCU)는 사람이 없다고 판단합니다.

    그러나 이 문제는 심각하지 않고 센서의 가격이 저렴하기 때문에 많은 응용 프로그램에서 사람을 탐지하는 데 널리 사용됩니다.

    ESP32 와 HC-SR501 모션 센서

    ESP32의 핀이 디지털 입력으로 설정되면, 연결된 모든 것의 상태(LOW 또는 HIGH)를 읽을 수 있습니다.

    ESP32의 핀을 HC-SR501 센서의 OUTPUT 핀에 연결함으로써, ESP32 코드를 사용하여 OUTPUT 핀의 값을 읽고, 그 후에 움직임을 추론할 수 있습니다.

HC-SR501 모션 센서와 ESP32 간의 배선도

USB 케이블의 전원 공급을 포함한 배선도

ESP32 Motion Sensor Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

5V 어댑터로부터의 전원 공급을 포함한 배선도

ESP32 Motion Sensor Wiring Diagram with power adapter

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

초기 설정

Detection Range Adjuster Fully screw it in the clockwise direction.
Time Delay Adjuster Fully screw it in the anti-clockwise direction.
Repeat Trigger Selector Put jumper like the below image.
ESP32 motion sensor initial setting

움직임 센서 프로그래밍 방법

pinMode() 함수를 사용하여 ESP32의 핀을 디지털 입력 모드로 구성하세요.

pinMode(PIN_TO_SENSOR, INPUT);

digitalRead() 함수를 사용하여 센서의 OUTPUT 핀 상태를 읽으세요.

pinStateCurrent = digitalRead(PIN_TO_SENSOR);

움직임 시작 감지 (핀의 상태가 LOW에서 HIGH로 변경)

pinStatePrevious = pinStateCurrent; // 이전 상태 저장 pinStateCurrent = digitalRead(PIN_TO_SENSOR); // 새 상태 읽기 if (pinStatePrevious == LOW && pinStateCurrent == HIGH) { // 핀 상태 변경: LOW -> HIGH Serial.println("Motion detected!"); }

움직임 정지 감지 (핀 상태가 HIGH에서 LOW로 변경)

pinStatePrevious = pinStateCurrent; // 이전 상태 저장 pinStateCurrent = digitalRead(PIN_TO_SENSOR); // 새로운 상태 읽기 if (pinStatePrevious == HIGH && pinStateCurrent == LOW) { // 핀 상태 변경: HIGH -> LOW Serial.println("Motion stopped!"); }

ESP32 코드

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-motion-sensor */ const int PIN_TO_SENSOR = 19; // GPIO19 핀이 센서의 출력 핀에 연결됨 int pinStateCurrent = LOW; // 현재 핀 상태 int pinStatePrevious = LOW; // 이전 핀 상태 void setup() { Serial.begin(9600); // 직렬 통신 초기화 pinMode(PIN_TO_SENSOR, INPUT); // 센서의 출력 핀에서 값을 읽기 위해 ESP32 핀을 입력 모드로 설정 } void loop() { pinStatePrevious = pinStateCurrent; // 이전 상태 저장 pinStateCurrent = digitalRead(PIN_TO_SENSOR); // 새 상태 읽기 if (pinStatePrevious == LOW && pinStateCurrent == HIGH) { // 핀 상태 변경: LOW -> HIGH Serial.println("Motion detected!"); // TODO: 여기서 경보, 빛을 켜거나 장치를 활성화하세요... } else if (pinStatePrevious == HIGH && pinStateCurrent == LOW) { // 핀 상태 변경: HIGH -> LOW Serial.println("Motion stopped!"); // TODO: 여기서 경보, 빛을 끄거나 장치를 비활성화하세요... } }

사용 방법

  • 이것이 ESP32를 처음 사용하는 경우, Arduino IDE에서 ESP32 환경 설정하는 방법을 참조하세요.
  • 위의 코드를 복사하여 Arduino IDE에 붙여넣으세요.
  • Arduino IDE에서 Upload 버튼을 클릭하여 ESP32 보드에 코드를 컴파일하고 업로드하세요.
  • Arduino IDE에서 시리얼 모니터를 엽니다.
How to open serial monitor on Arduino IDE
  • 센서 범위 앞으로 손을 움직이세요
  • 시리얼 모니터에서 출력을 확인하세요
COM6
Send
Motion detected! Motion stopped!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!