릴레이 모듈: 2채널 중 1채널 사용. VCC → 5V, IN1 → 아두이노 핀 8 (임의 변경 가능).
중요: 액티브 로우/하이 확인. 내 모듈은 액티브 로우(LOW 신호에 릴레이 ON). 확인법: VCC/GND 연결 후 IN 핀을 5V에 연결 → 아무 반응 없으면 액티브 로우, GND 연결 시 작동하면 확인 완료. 차이점 설명 참조.
램프 연결 (⚠ 고전압 주의)
램프 한 선은 벽면 플러그 직결, 다른 선은 중간에 절단해 한쪽은 릴레이 NO1 (Normally Open), 다른 쪽은 COM1에 연결 후 플러그로.
최종 회로도 (램프 단순화):
코드 동작:
초음파 센서로 거리 측정
문 앞 통과 감지
조명 상태 토글
초음파 센서 값 읽기 및 노이즈 제거
라이브러리 예제로 거리 읽기 테스트. sonar.ping_cm() 또는 sonar.ping_inch()로 cm/inch 단위 거리 획득. 핀 설정과 최대 측정 거리 지정.
문제: 초음파 센서가 간헐적으로 잘못된 거리(노이즈) 반환 → 조명 의도치 않은 깜빡임 유발.
해결: 여러 번 읽어 평균 내거나 중앙값 필터(median filter) 사용. 여러 읽기값 정렬 후 중간값 선택으로 노이즈 제거. NewPing 라이브러리에 sonar.ping_median(읽기횟수) 함수 내장 (최대 512회). 반환값은 에코 시간(μs)이므로 sonar.convert_cm() 또는 sonar.convert_in()으로 변환.
또 다른 함정: 센서 앞 장애물 없으면 0 반환. 이를 MAX_DISTANCE로 치환해 불필요한 토글 방지. 최종 읽기 함수:
통과 감지 로직
초음파 센서가 문 너비의 절반 정도인 임계 거리(critical_distance_cms) 미만 읽으면 사람 통과로 판단. 단, 사람 정지 시에는 반응하지 않고 통과 완료(거리 > 임계값) 시에만 상태 토글.
축하합니다! 완료입니다. 비주얼 스튜디오 프로젝트 전체 첨부 (라이브러리 소폭 수정: 가변 길이 배열 → 동적 할당, 문서화 추가).