読者です 読者をやめる 読者になる 読者になる

マサルの備忘録

ハイオク仕様のトルクフルな備忘録

Arduinoで作った常夜灯的なアレ(通称アレ)の仕様をユーザーフィードバックに基いて変更してみた

スポンサーリンク

ユーザーの声が直接聞けるっていいですね。
前回まで。
masaru.hateblo.jp

最近のアレの様子

f:id:domomasarudesu:20150320000326j:plain

結局こんな感じで基板むき出しのまま。
ですが、実はかなり重宝しています。

夜のおむつ交換などで大活躍

生理現象には太刀打ちできません。
ただ、部屋全体を明るくしてしまうと目を覚ましてしまうし・・・的なシチュエーションで役立っています。ただ、最近ユーザーの一部(嫁)から

「もうすこし点灯時間を長くできないの?」

という市場の声を尊重し、仕様変更をしてみました。
動作を検知してからLEDを点灯する時間を30秒から5分に延長。
おむつ交換作業はそんなに体を動かさないのと、交換も結構時間がかかるため、とりあえず5分くらいに設定。

結局こんな感じ

static int sLed = 12;
static int sPir = 2;
static int sCdsPower = 3;
static int sCdsRead = 7;
static int sPirPower = 4;
boolean isPirRunning = false;
boolean isLedOn = false;

void setup(){
  pinMode(sLed, OUTPUT);
  pinMode(sPir, INPUT);
  pinMode(sCdsPower, OUTPUT);
  pinMode(sPirPower, OUTPUT);
}

void loop(){
  if(isDark() || isLedOn){
    turnOnPir();
    if(detectedMotion()){
      turnOnLed();
      delay(300000);
    }
    else{
      turnOffLed();
      delay(1000);
    }
  }
  else{
    turnOffPir();
    turnOffLed();
    delay(1000);
  }
}

boolean isDark(){
  int analogInput;

  digitalWrite(sCdsPower, HIGH);
  analogInput = analogRead(sCdsRead);
  digitalWrite(sCdsPower, LOW);

  if(analogInput < 600){
    return true;
  }
  else{
    return false;
  }
}

void turnOnPir(){
  if(isPirRunning){
    return;
  }

  isPirRunning = true;
  digitalWrite(sPirPower, HIGH);
  delay(10000);
}

void turnOffPir(){
  if(!isPirRunning){
    return;
  }

  isPirRunning = false;
  digitalWrite(sPirPower, LOW);
}

boolean detectedMotion(){
  if(!isPirRunning){
    return false;
  }

  int value = digitalRead(sPir);

  if(value == HIGH){
    return true;
  }
  else{
    return false;
  }  
}

void turnOnLed(){
  digitalWrite(sLed, HIGH);
  isLedOn = true;
}

void turnOffLed(){
  digitalWrite(sLed, LOW);
  isLedOn = false;
}