Thinking Different




 

 

화장실에 사용하기 위해서 방향제 디스펜서를 구매하였습니다.

 

 

 

올센느 자동분사 방향제 화장실 실내 사무실 업소용 향수 향캔 디스펜서 (버튼 분사 가능) 심플,

현재 별점 4.6점, 리뷰 456개를 가진 올센느 자동분사 방향제 화장실 실내 사무실 업소용 향수 향캔 디스펜서 (버튼 분사 가능) 심플, 4.향캔만 3개 묶..., 1개! 지금 쿠팡에서 더 저렴하고 다양한 실

www.coupang.com

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

 

기본적인 제품의 기능은 아래와 같이 분사간격 시간에 따른 자동 분사 기능밖에 존재하지 않았습니다.

 

이렇게 되면 불필요한 내용물 소모와 지나친 분사로 인해 좁은 화장실 공간에는 오히려 공기가 탁해질 수 있으리라 생각 되었습니다.

 

 

 

 

화장실에 사람이 들어갈때만 인체감지를 하여 작동되도록 하고 싶어서 아두이노와 인체감지센서를 사용하여 개조를 진행하게 되었습니다.

 

 

 

 

 

사용된 보드 및 센서

아두이노 프로 미니 L9110S 모터 드라이버 인체감지센서

 

 

 

 

 

아두이노 프로 미니 ATMEGA328P 3.3V/8M 호환보드 - 액세서리 | 쿠팡

쿠팡에서 아두이노 프로 미니 ATMEGA328P 3.3V/8M 호환보드 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 액세서리 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

 

아두이노 L9110s 소형 모터드라이버 2채널 - 변환젠더 | 쿠팡

쿠팡에서 아두이노 L9110s 소형 모터드라이버 2채널 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 변환젠더 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

 

[파츠키츠] 인체감지 센서 모듈 HC-SR501 적외선 모션 감지 아두이노호환 직부등 현관등 - CPU | 쿠팡

쿠팡에서 [파츠키츠] 인체감지 센서 모듈 HC-SR501 적외선 모션 감지 아두이노호환 직부등 현관등 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 CPU 제품도 바로 쿠팡에서 확인할 수 있습

www.coupang.com

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

 

 

아두이노 회로 배선도

 

 

 

 

 

회로 구성 기능 설명

 

인체 감지 센서를 활용하여 인체가 감지되면 최초 1회 spray 분사를 진행합니다. 그 후 30분 동안 작동되지 않습니다.

30분이 지나면 다시 인체감지가 되면 1회 분사가 됩니다. 또한 전면 버튼을 활용하여 spray 분사기능을 수동으로 할 수 있도록 하였습니다.

 

 

 

 

 

디스펜서 외형 및 구조 배치

 

회로를 제거하고 전면에 홀을 뚫고 인체감지센서를 배치하였습니다.

 

보드 회로 배치
dc 전원코드 어뎁터

 

 

 

 

아두이노 코드

#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();
  }
}