[Arduino]部屋の灯りが消えたら自動でGet Wildを再生してGet Wild退勤する

https://twitter.com/kozeni_shkt/status/709743397196541953
http://www.b-ch.com/ttl/index.php?ttl_c=467
[[iOS]部屋の灯りが消えたら自動でGet Wildを再生してGet Wild退勤する](http://qiita.com/oubakiou/items/b9b78b00906415d056b2)

一般のご家庭やオフィスにあったArduinoを使ってやってみました。
![full.jpg](https://qiita-image-store.s3.amazonaws.com/0/20572/31586425-bc75-e688-8e6d-0590768c9265.jpeg)

## やりたいこと
 - ある程度暗くなったらGet Wildを再生する
 - 再生が始まったら、明るさの変化は無視する
 - しばらくしたら、また明るさの変化に反応するようにする(翌日再セットアップしなくてもよくする)
 - LEDを取り付け、だんだん暗くすることでエンディング感を出す

## 用意した物
 - [Arduinoをはじめようキット](https://www.switch-science.com/catalog/181/)  Arduino UnoとLEDと抵抗とCdS(光センサ)が入っています。
 - [MP3プレイヤーシールド](https://www.switch-science.com/catalog/2624/ "MP3プレイヤーシールド")
 - [Arduinoシールド用ピンソケットのセット(R3対応)](https://www.switch-science.com/catalog/995/ "Arduinoシールド用ピンソケットのセット(R3対応)")
 - microSDHC 4GBのものがあったので使いました。GetWildしか入れないので10MBくらいあればいいですが、他には何も入れないでください。
 - スピーカー ステレオミニジャック出力があるのでそこにアンプ付きスピーカーをつなぐ方がいいと思います。

## 作り方
 1. [MP3プレイヤーシールド](https://www.switch-science.com/catalog/2624/ "MP3プレイヤーシールド")に [Arduinoシールド用ピンソケットのセット(R3対応)](https://www.switch-science.com/catalog/995/ "Arduinoシールド用ピンソケットのセット(R3対応)")をはんだ付けします。
 2. LEDに330Ωの抵抗(オレンジオレンジ茶金)をはんだ付けします。LEDには向きがありますが、抵抗はどちらに付けてもいいです。
 3. CdSに10kΩの抵抗(茶黒赤金)をはんだ付けします。CdSには向きがないので安心してください。

はんだ付けはこれだけです。

## 接続
 - Arduino UnoにMP3プレイヤーシールドを差し込みます。
 - LEDのカソード側([参考](https://ja.wikipedia.org/wiki/%E7%99%BA%E5%85%89%E3%83%80%E3%82%A4%E3%82%AA%E3%83%BC%E3%83%89#/media/File:%2B-_of_Led.svg))をGNDに、アノード側を5番ピンに差し込みます。![led.jpg](https://qiita-image-store.s3.amazonaws.com/0/20572/45f9233e-f812-cd19-a5a1-8bc9207606d1.jpeg)
 - CdSをGNDとA0に、抵抗をA4に差し込みます。![cds.jpg](https://qiita-image-store.s3.amazonaws.com/0/20572/8cf5f2ff-e793-1e81-2d41-57744755027e.jpeg)

 - GetWild.mp3が入ったmicroSDをMP3プレイヤーシールドに差し込みます。

## スケッチ
[Sparkfun-MP3-Player-Shield-Arduino-Library](https://github.com/madsci1016/Sparkfun-MP3-Player-Shield-Arduino-Library "Sparkfun-MP3-Player-Shield-Arduino-Library")を使っているので、ダウンロードしてインストールしてください。

```cpp:getwild.ino

#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>

SdFat sd;
SFEMP3Shield MP3player;

int lightValue = 0;
int mode = 0;
int ledValue = 0;
int intervalTime = 0;

int ledPin = 5;
int lightPin = A0;
int lightGND = 18;

void getWildandtough() {
  MP3player.playTrack(1);
}

// the setup function runs once when you press reset or power the board
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(lightGND, OUTPUT);

  digitalWrite(lightGND, HIGH);
  Serial.begin(9600);

  sd.begin(SD_SEL, SPI_HALF_SPEED);
  MP3player.begin();
}

// the loop function runs over and over again forever
void loop() {
  lightValue = analogRead(lightPin);

  Serial.println(lightValue);
  Serial.println(ledValue);
  // 暗さが950を超えたら再生モードに移る
  if (lightValue > 950 && mode == 0) {
    mode = 1;
    ledValue = 255;
    getWildandtough();
  }
  // 再生モード時、だんだんLEDを暗くする
  if (mode == 1) {
    analogWrite(ledPin, ledValue);
    if (ledValue > 0) {
      ledValue -= 10;
    } else {
      ledValue = 0;
    }
    intervalTime += 1;
  }
  delay(1000);
  // 再生開始から300秒経ったら通常モードに戻る
  if (intervalTime > 300) {
    intervalTime = 0;
    mode = 0;
  }
}
```

## 最後に
 - getWildandtough()を読むとわかるように、microSDに入っている1曲目を再生しますので、GetWild以外を入れないことを強くお勧めします。
 - LEDを印象深く光らせられたかなと思ったら、MP3プレイヤーシールドに電源LEDが載っていて結構明るく光るので、あまり意味なかったです。
 - LEDが無理に曲がっていて5番ピンにつながっているのは、MP3プレイヤーシールドが使わなくてPWMが使えるのが5番ピンくらいしかなかったからです。
 - [MP3プレイヤーシールド](https://www.switch-science.com/catalog/2624/ "MP3プレイヤーシールド")の回路図をざっと見た感じ、[ESP-WROOM-02 Arduino互換ボード](https://www.switch-science.com/catalog/2620/ "ESP-WROOM-02 Arduino互換ボード")などの3.3V系Arduino互換ボードでも動作するんじゃないかと思います。ただ5V端子から5V(せめて3.3V)が出ないボードはだめそう。