아두이노 우노 R4 모션 센서 서보 모터

우리는 배우게 될 것입니다:

준비물

1×Arduino UNO R4 WiFi or Arduino UNO R4 Minima
1×(또는) DIYables STEM V4 IoT, Compatible with Arduino Uno R4 WiFi 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×HC-SR501 모션 센서 쿠팡 | 아마존
1×서보 모터 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino UNO R4 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 전원 분배기 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Arduino Uno R4 WiFi Compatible Boards

서보 모터 및 모션 센서에 대하여

서보 모터와 모션 센서(핀 연결, 기능 및 프로그래밍 방법)에 익숙하지 않다면 아래의 튜토리얼을 참조하세요.

선연결

아두이노 우노 R4 모션 센서 서보 모터 배선도

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

프로젝트를 오래 실행하거나 케이스 안에 넣을 경우, 전선을 나사로 고정하는 것이 좋습니다. Arduino UNO R4에 Proto Screw Terminal Block Shield 또는 Screw Shield V2를 추가하기만 하면 됩니다. Screw Shield V2를 사용하면 다음과 같습니다:

아두이노 우노 R4 모션 센서 서보 모터 배선도 (screw shield v2)

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

Arduino Uno R4와 기타 부품에 전원을 공급하는 가장 효과적인 방법을 확인하시려면, 아래 링크를 참조하세요: 아두이노 우노 R4 전원 공급 방법.

초기 설정

Time Delay AdjusterScrew it in anti-clockwise direction fully.
Detection Range AdjusterScrew it in clockwise direction fully.
Repeat Trigger SelectorPut jumper as shown on the image.
아두이노 모션 센서 초기 설정

Arduino UNO R4 코드 - 모션 센서로 서보 모터 제어

/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-motion-sensor-servo-motor */ #include <Servo.h> #define MOTION_SENSOR_PIN 2 // The Arduino Uno R4 pin connected to motion sensor's pin #define SERVO_PIN 9 // The Arduino Uno R4 pin connected to servo motor's pin Servo servo; // create servo object to control a servo // variables will change: int angle = 0; // the current angle of servo motor int prev_motion_state; // the previous state of motion sensor int motion_state; // the current state of motion sensor void setup() { Serial.begin(9600); // initialize serial pinMode(MOTION_SENSOR_PIN, INPUT); // set arduino pin to input mode servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(angle); motion_state = digitalRead(MOTION_SENSOR_PIN); } void loop() { prev_motion_state = motion_state; // save the last state motion_state = digitalRead(MOTION_SENSOR_PIN); // read new state if (motion_state == LOW && prev_motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); servo.write(90); } else if (motion_state == HIGH && prev_motion_state == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); servo.write(0); } }

자세한 사용 방법

다음 지침을 단계별로 따르세요:

  • Arduino Uno R4 WiFi/Minima를 처음 사용하는 경우, 아두이노 우노 R4 - 소프트웨어 설치을 참조하세요.
  • 제공된 다이어그램에 따라 부품을 연결하세요.
  • USB 케이블을 사용하여 Arduino Uno R4 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Arduino IDE를 실행하세요.
  • 적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택하세요.
  • USB 케이블을 사용하여 Arduino UNO R4를 컴퓨터에 연결하세요.
  • Arduino IDE를 시작하고 올바른 보드와 포트를 선택하세요.
  • 제공된 코드를 Arduino IDE에 붙여넣으세요.
  • Arduino IDE에서 Upload 버튼을 눌러 코드를 Arduino UNO R4에 전송하세요.
  • 센서 앞에서 손을 흔들어 보세요.
  • 서보 모터가 반응하는 것을 지켜보세요.

동영상

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

아래는 HC-SR501 모션 센서를 Arduino UNO R4와 함께 사용하는 방법을 보여주는 단계별 비디오 튜토리얼입니다. 영상 마지막에는 아래 코드로 서보와 부저를 이용한 자동 문 열림 시스템을 만드는 방법이 나옵니다:

#include <Servo.h> #define SENSOR_PIN 2 // The Arduino UNO R4 connected to the output pin of the motion sensor #define SERVO_PIN 5 #define BUZZER_PIN 6 Servo servo; int motion_state = LOW; // Initialize current pin state to LOW int prev_motion_state = LOW; // Initialize previous pin state to LOW void setup() { Serial.begin(9600); // Start serial communication at 9600 baud rate pinMode(SENSOR_PIN, INPUT); // Configure pin 2 as an input for the sensor pinMode(BUZZER_PIN, OUTPUT); // Configure the buzzer pin as output servo.attach(SERVO_PIN); servo.write(0); noTone(BUZZER_PIN); } void beep() { for (int i = 0; i < 2; i++) { tone(BUZZER_PIN, 5000); delay(100); noTone(BUZZER_PIN); delay(100); } } void loop() { prev_motion_state = motion_state; // Assign the current pin state to the previous pin state for comparison motion_state = digitalRead(SENSOR_PIN); // Read the current state from the sensor output // Check for transition from LOW to HIGH which indicates motion detected if (prev_motion_state == LOW && motion_state == HIGH) { Serial.println("Motion detected!"); // Print message when motion is detected servo.write(180); beep(); // Optional: Additional actions when motion is detected } // Check for transition from HIGH to LOW which indicates motion has stopped else if (prev_motion_state == HIGH && motion_state == LOW) { Serial.println("Motion stopped!"); // Print message when motion has stopped servo.write(0); beep(); // Optional: Additional actions when motion stops } }