ESP32 모션 센서

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

준비물

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow 쿠팡 | 아마존
1×(또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide 쿠팡 | 아마존
1×(또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide 아마존
1×(또는) ESP32 Uno-form board 아마존
1×(또는) ESP32 S3 Uno-form board 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×HC-SR501 모션 센서 쿠팡 | 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(옵션) DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) Breakout Expansion Board for ESP32 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

HC-SR501 모션 센서에 대하여

hc-sr501 모션 센서

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

HC-SR501 모션 센서 핀배열

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

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

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

    hc-sr501 모션 센서 사용법 핀아웃

    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 모션 센서 연결 배선도

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

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

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

ESP32 모션 센서 연결 배선도 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 모션 센서 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를 처음 사용하는 경우, ESP32 - 소프트웨어 설치을 참조하세요.
  • 위의 코드를 복사하여 Arduino IDE에 붙여넣으세요.
  • Arduino IDE에서 Upload 버튼을 클릭하여 ESP32 보드에 코드를 컴파일하고 업로드하세요.
  • Arduino IDE에서 시리얼 모니터를 엽니다.
how to open serial monitor on 아두이노 ide
  • 센서 범위 앞으로 손을 움직이세요
  • 시리얼 모니터에서 출력을 확인하세요
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Motion detected! Motion stopped!
Ln 11, Col 1
ESP32 Dev Module on COM15
2

동영상

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