공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
문 센서에 관하여
핀배열
문 센서는 두 가지 구성 요소를 포함합니다:
두 핀이 있는 한 개의 리드 스위치
한 개의 자석
일반 스위치/버튼과 마찬가지로, 리드 스위치의 두 핀을 구분할 필요가 없습니다.
작동 원리
자석은 문/창문(움직이는 부분)에 부착되어 있고, 리드 스위치는 문틀(고정된 부분)에 부착되어 있습니다. 문이 닫혔을 때 이 두 구성 요소는 접촉 상태입니다.
자석이 리드 스위치에 가까울 때, 리드 스위치 회로가 닫힙니다.
자석이 리드 스위치에서 멀어질 때, 리드 스위치 회로가 열립니다.
※ 주의:
리드 스위치 자체는 핀에 LOW나 HIGH를 출력하지 않습니다. 단지 닫히거나 열린 상태일 뿐입니다. 핀을 아두이노에 어떻게 연결하느냐에 따라 핀의 값은 LOW, HIGH, 또는 부동 값(예측할 수 없는 값)이 될 수 있습니다. 부동 값을 피하려면, 아두이노 핀에 풀업 또는 풀다운 저항을 반드시 사용해야 합니다.
리드 스위치의 한 핀을 GND에 연결하고, 리드 스위치의 다른 핀을 풀업 저항(내부 또는 외부)이 있는 아두이노의 입력 핀에 연결하면:
자석이 리드 스위치에 가까워지면 아두이노의 입력 핀 값은 LOW입니다.
자석이 리드 스위치에서 멀어지면 아두이노의 입력 핀 값은 HIGH입니다.
그래서:
문이 어떤 상태인지 확인하기 위해서는 아두이노 입력 핀의 상태를 확인하면 됩니다:
상태가 LOW이면 문이 닫혀 있습니다
상태가 HIGH이면 문이 열려 있습니다
문 열림/문 닫힘 이벤트를 감지하려면 아두이노 입력 핀의 상태 변화를 감지할 수 있습니다:
/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-door-sensor */constint DOOR_SENSOR_PIN = 13; // 아두이노 핀이 문 센서의 핀에 연결되어 있음int doorState;voidsetup() {Serial.begin(9600); // 직렬 시작pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP); // 아두이노 핀을 입력 풀업 모드로 설정}voidloop() { doorState = digitalRead(DOOR_SENSOR_PIN); // 상태 읽기if (doorState == HIGH) {Serial.println("The door is open"); } else {Serial.println("The door is closed"); }}
사용 방법
위의 코드를 복사하고 Arduino IDE로 열기
아두이노 IDE에서 Upload 버튼을 클릭하여 코드를 아두이노에 업로드
자석을 리드 스위치에 가깝게 이동한 다음, 리드 스위치에서 멀어지게 이동하세요.
시리얼 모니터에서 결과를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The door is open
The door is open
The door is closed
The door is closed
The door is closed
The door is closed
The door is closed
The door is open
The door is open
Ln 11, Col 1
Arduino Uno on COM15
2
아두이노 코드 - 문 여는 것과 닫는 것 감지하기
/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-door-sensor */constint DOOR_SENSOR_PIN = 13; // Arduino 핀이 문 센서의 핀에 연결됨int currentDoorState; // 문 센서의 현재 상태int lastDoorState; // 문 센서의 이전 상태voidsetup() {Serial.begin(9600); // 시리얼 초기화pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP); // 아두이노 핀을 입력 풀업 모드로 설정 currentDoorState = digitalRead(DOOR_SENSOR_PIN); // 상태 읽기}voidloop() { lastDoorState = currentDoorState; // 마지막 상태 저장 currentDoorState = digitalRead(DOOR_SENSOR_PIN); // 새 상태 읽기if (lastDoorState == LOW && currentDoorState == HIGH) { // 상태 변경: LOW -> HIGHSerial.println("The door-opening event is detected");// 할 일: 알람, 불빛 켜기 또는 알림 보내기... }elseif (lastDoorState == HIGH && currentDoorState == LOW) { // 상태 변경: HIGH -> LOWSerial.println("The door-closing event is detected");// 할 일: 알람, 불빛 끄기 또는 알림 보내기... }}
위의 코드를 복사하고 Arduino IDE로 열기
코드를 Arduino에 업로드하려면 Arduino IDE에서 Upload 버튼을 클릭하세요.
자석을 리드 스위치에 가깝게 이동시킨 다음, 리드 스위치에서 멀어지게 이동하세요.
시리얼 모니터에서 결과를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The door-closing event is detected
The door-opening event is detected
Ln 11, Col 1
Arduino Uno on COM15
2
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
아래 동영상 데모는 아래 코드를 사용합니다. 동영상은 Arduino Uno R4를 보여주지만 Arduino Uno R3에서도 동일하게 작동합니다:
/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-door-sensor */#define DOOR_SENSOR_PIN 2#define RED_LED_PIN 5#define BUZZER_PIN 6constunsignedlong BLINK_INTERVAL = 200;unsignedlong previousMillis = 0;bool alarmState = false;void setAlarmState(uint8_t state){if(state){tone(BUZZER_PIN, 2000);digitalWrite(RED_LED_PIN, LOW); } else{noTone(BUZZER_PIN);digitalWrite(RED_LED_PIN, HIGH); }}voidsetup() {Serial.begin(9600); pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP);pinMode(RED_LED_PIN, OUTPUT);pinMode(BUZZER_PIN, OUTPUT);digitalWrite(RED_LED_PIN, HIGH);noTone(BUZZER_PIN);}voidloop() {int doorState = digitalRead(DOOR_SENSOR_PIN);if (doorState == HIGH) {Serial.println("The door is open"); } else {Serial.println("The door is closed"); }// Door openif (doorState == HIGH) {unsignedlong currentMillis = millis();if (currentMillis - previousMillis >= BLINK_INTERVAL) { previousMillis = currentMillis; alarmState = !alarmState; setAlarmState(alarmState); } }// Door closedelse {noTone(BUZZER_PIN);digitalWrite(RED_LED_PIN, HIGH); alarmState = false; }}