😽

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

2020/09/28に公開

Zennのお試しでQiitaの記事 https://qiita.com/Shinichi-Ohki/items/1edbe910c8659b20b3fd を転載しました。

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

一般のご家庭やオフィスにあったArduinoを使ってやってみました。

やりたいこと

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

用意した物

作り方

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

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

接続

  • Arduino UnoにMP3プレイヤーシールドを差し込みます。

  • LEDのカソード側(参考)をGNDに、アノード側を5番ピンに差し込みます。

  • CdSをGNDとA0に、抵抗をA4に差し込みます。

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

スケッチ

Sparkfun-MP3-Player-Shield-Arduino-Libraryを使っているので、ダウンロードしてインストールしてください。


#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プレイヤーシールドの回路図をざっと見た感じ、ESP-WROOM-02 Arduino互換ボードなどの3.3V系Arduino互換ボードでも動作するんじゃないかと思います。ただ5V端子から5V(せめて3.3V)が出ないボードはだめそう。

Discussion