[아두이노] 46. 방향제 디스펜서 인체감지센서 개조 DIY
임베디드/아두이노2025. 5. 23. 21:13
화장실에 사용하기 위해서 방향제 디스펜서를 구매하였습니다.
기본적인 제품의 기능은 아래와 같이 분사간격 시간에 따른 자동 분사 기능밖에 존재하지 않았습니다.
이렇게 되면 불필요한 내용물 소모와 지나친 분사로 인해 좁은 화장실 공간에는 오히려 공기가 탁해질 수 있으리라 생각 되었습니다.
화장실에 사람이 들어갈때만 인체감지를 하여 작동되도록 하고 싶어서 아두이노와 인체감지센서를 사용하여 개조를 진행하게 되었습니다.
사용된 보드 및 센서
![]() |
![]() |
![]() |
아두이노 프로 미니 | L9110S 모터 드라이버 | 인체감지센서 |
아두이노 회로 배선도
회로 구성 기능 설명
인체 감지 센서를 활용하여 인체가 감지되면 최초 1회 spray 분사를 진행합니다. 그 후 30분 동안 작동되지 않습니다.
30분이 지나면 다시 인체감지가 되면 1회 분사가 됩니다. 또한 전면 버튼을 활용하여 spray 분사기능을 수동으로 할 수 있도록 하였습니다.
디스펜서 외형 및 구조 배치
회로를 제거하고 전면에 홀을 뚫고 인체감지센서를 배치하였습니다.
아두이노 코드
#define MOTOR_A A2
#define MOTOR_B A1
#define BUTTON 6 // 전면 버튼
#define HUMAN_SENSOR 9 // 인체감지센서
#define RELEASE_TIME (60 * 30) // 30분 설정
unsigned long beforeTime; // 이전 시간
static int nowTime = 0; // 현재 시간
void setup()
{
pinMode(MOTOR_A, OUTPUT);
pinMode(MOTOR_B, OUTPUT);
pinMode(BUTTON, INPUT);
pinMode(HUMAN_SENSOR, INPUT);
beforeTime = millis();
}
// 분사 함수
void spray()
{
analogWrite(MOTOR_A, 255);
analogWrite(MOTOR_B, 0);
delay(400);
analogWrite(MOTOR_B, 127);
analogWrite(MOTOR_A, 0);
}
void loop()
{
if(digitalRead(BUTTON) == HIGH)
spray();
// 인간 확인
if(digitalRead(HUMAN_SENSOR) == HIGH)
{
if(nowTime == 0)
{
spray();
nowTime = RELEASE_TIME;
}
}
if(millis()-beforeTime>=1000)
{
if(nowTime > 0)
nowTime--;
if(nowTime <= 0)
nowTime = 0;
beforeTime = millis();
}
}
'임베디드 > 아두이노' 카테고리의 다른 글
[아두이노] 45. 병아리 부화기 및 육추기 겸용 만들기 (13) 최종 소스코드 프로젝트 파일 첨부 (0) | 2024.05.31 |
---|---|
[아두이노] 44. 병아리 부화기 및 육추기 겸용 만들기 (12) EEPROM 저장 소스 코드 (0) | 2024.05.31 |
[아두이노] 43. 병아리 부화기 및 육추기 겸용 만들기 (11) 버튼 소스 코드 (0) | 2024.05.31 |
[아두이노] 42. 병아리 부화기 및 육추기 겸용 만들기 (10) 1602 I2C LCD 소스 코드 (0) | 2024.05.30 |
[아두이노] 41. 병아리 부화기 및 육추기 겸용 만들기 (9) 가습&팬 소스코드 (0) | 2024.05.30 |