아두이노 나노 ESP32 - 모션 센서 | Arduino Nano ESP32 - Motion Sensor

이 튜토리얼은 Arduino Nano ESP32를 HC-SR501 모션 센서와 함께 사용하는 방법에 대한 지침을 제공합니다. 자세히는, 우리는 다음을 배우게 됩니다:

준비물

1×Arduino Nano ESP32 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 Adapter for Arduino Nano 쿠팡 | 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 센서에 의해 감지될 수 있습니다.

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

    인간의 존재 감지

    센서 자체는 인간의 존재를 직접 감지하지 않습니다. 센서는 단지 움직임을 감지할 뿐입니다. 그리고 움직임 감지 시 인간의 존재는 추론됩니다.

    • 움직임이 감지되면 사람이 있습니다
    • 움직임이 감지되지 않으면 사람이 없습니다

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

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

    아두이노 나노 ESP32 및 HC-SR501 모션 센서

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

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

HC-SR501 모션 센서와 아두이노 나노 ESP32 간의 배선도

아두이노 나노 ESP32 보드를 USB 포트를 통해 전원을 공급할 때의 배선도.

Arduino Nano ESP32 Motion Sensor Wiring Diagram

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

아두이노 나노 ESP32 보드를 Vin 핀을 통해 전원을 공급할 때의 배선도.

Arduino Nano ESP32 Motion Sensor Wiring Diagram with external 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.
Arduino Nano ESP32 motion sensor initial setting

모션 센서를 프로그래밍하는 방법

pinMode() 함수를 사용하여 ESP32의 핀을 디지털 입력 모드로 설정합니다.

pinMode(PIN_TO_SENSOR, INPUT);

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

motion_state = digitalRead(PIN_TO_SENSOR);
  • 모션 시작 감지 (핀 상태가 LOW에서 HIGH로 변경)
prev_motion_state = motion_state; // 이전 상태 저장 motion_state = digitalRead(PIN_TO_SENSOR); // 새 상태 읽기 if (prev_motion_state == LOW && motion_state == HIGH) { // 핀 상태 변경: 저전압 -> 고전압 Serial.println("Motion detected!"); }

모션 중지 감지 (핀의 상태가 HIGH에서 LOW로 변경됨)

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

아두이노 나노 ESP32 코드

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

사용 방법

  • 아두이노 나노 ESP32를 처음 사용하는 경우, 아두이노 IDE에서 아두이노 나노 ESP32 환경 설정하는 방법을 보려면 여기를 참조하세요.
  • 위의 코드를 복사하여 아두이노 IDE에 붙여넣으세요.
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 아두이노 나노 ESP32 보드에 코드를 컴파일하고 업로드하세요.
  • 아두이노 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!