あなたとコンビに

#ファミリーマート!!!
ファミマっていいと思うんですよ。
なぜかって？
・何度も聞きたくなる入店音
・緑色のいかしたカラーリング
・覚えやすい入店音
・合宿免許ワオや帝京平成大学など、耳障りのいいラジオ
・近所
・入店音
・Tポイント
**・人の心を癒す究極の入店音**

そういうことだと思うんですよ。
それに尽きると思うんです。
ファミマといえば入店音なんですよ。
*①ファミマ　＝　入店音*

あと、ファミマって便利ですよね。
食料もあるし、飲料もあるし、お酒もあるし、おでんもあるし、明るいし、あったかいし、人がいるし、もう挙げるときりがないですよね。
*②ファミマ　＝　便利*

つまり、式①②より、
*入店音　＝　便利*
であることが証明されました。

そこで僕は思いました。
家で入店音が鳴ったら。。。
家　＝　入店音　＝　便利
**家　＝　便利**

よし、やろう。

#やりたいこと
センサーで人を検知して、音を出す。

#用意するもの
・[arduino uno](https://www.switch-science.com/catalog/789/)
・[ジャンパーワイヤー6本くらい](http://akizukidenshi.com/catalog/g/gC-05371/)
・[圧電スピーカー](http://akizukidenshi.com/catalog/g/gP-01251/)
・[赤外線障害物検知センサーモジュール](http://osoyoo.com/ja/2015/04/28/infrared-obstacle-avoidance-sensor-project/)
・パソコン（arduino ide入れてね）
・家を便利にしたいという情熱

#構成
なんと僕ですね、arduino本体と、[osoyooさんのセンサーモジュールキット](http://osoyoo.com/ja/2015/03/11/osoyoo-sensor-modules-kit-for-arduino/)を持っているのですよ。（前職での頂き物です。本当にありがとうございます。ちゃんと使ってます。）
そして、その中に[赤外線障害物検知センサーモジュール](http://osoyoo.com/ja/2015/04/28/infrared-obstacle-avoidance-sensor-project/)も含まれてまして、これを使った構成でやります。

[このページ](http://osoyoo.com/ja/2015/04/28/infrared-obstacle-avoidance-sensor-project/)に書いてあるイラストのLEDが刺さってるところをブザーに変更すれば完成です。
念の為、僕が組んだ構成の写真貼っときますが、まあほぼ一緒です。

![a.jpg](https://qiita-image-store.s3.amazonaws.com/0/212804/c199241c-fa5d-1de8-cf87-12b5778a6719.jpeg)
![b.jpg](https://qiita-image-store.s3.amazonaws.com/0/212804/fdde928f-bb7f-3a67-fbee-a51c0d05eceb.jpeg)


#プログラム
ほぼほぼ、ググってサンプルで出てくるコードです。
ちょっと組み合わせて、メロディーのとこ改修したくらいです。
僕でできるから猿でもできます。

```c++:sensor.ino
int buzzer = 13;
int sensor = 3;
int sibu = 250;
int nibu = 500;
int val;

void setup() {
  pinMode(buzzer, OUTPUT);
  pinMode(sensor, INPUT);
}

void loop() {
  val = digitalRead(sensor);
  if(val == LOW)
  {
    ToneDelay(buzzer, 369, sibu);//ファ#
    ToneDelay(buzzer, 293, sibu);//レ
    ToneDelay(buzzer, 220, sibu);//ラ
    ToneDelay(buzzer, 293, sibu);//レ
    ToneDelay(buzzer, 329, sibu);//ミ
    ToneDelay(buzzer, 440, nibu);//ラ
    ToneDelay(buzzer, 440, sibu);//ラ
    ToneDelay(buzzer, 329, sibu);//ミ
    ToneDelay(buzzer, 369, sibu);//ファ#
    ToneDelay(buzzer, 329, sibu);//ミ
    ToneDelay(buzzer, 220, sibu);//ラ
    ToneDelay(buzzer, 293, nibu);//レ
  }
}
void ToneDelay(int pin, int frequency, int duration)
{
tone(pin, frequency, duration);
delay(duration);
}
```

toneメソッドだけ軽く説明します。
第二引数　→　周波数
第三引数　→　音の長さ
となっています。

なので、出したい音の周波数がわかればそれを第二引数に入れてあげます。
[このサイト](https://tomari.org/main/java/oto.html)が便利。
一応arduino内部のライブラリにも、音階ごとにdefineが切ってありますが、あれはドレミじゃなくて、なんか国際式な表記（アルファベット）で名前ついてるので、僕にはさっぱりわからなかったので周波数直打ちしました。

そして第三引数はdurationなので、発生する音の長さです。
ちなみにこれはオプション引数であり、指定しなければNoTone()を呼ぶまで鳴り続けます。
で、これ実際使ってみて気づいたのですが、tone自体にはdelay処理が含まれていないのです。
なので、toneで発生させたい音の長さ分、その直後に自分でdelayしてあげないと、tone処理が連続で呼ばれて最初の１音しか鳴りません。（tone実行中の別のtoneの呼び出しは無視されるため）
なので、僕は呼び出しクラスをラッピングしてあげました。

#結果
できた。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">家をファミマにした。 <a href="https://t.co/PVT7Gd6QxP">pic.twitter.com/PVT7Gd6QxP</a></p>&mdash; あーたろ (@kotarotaro_A) <a href="https://twitter.com/kotarotaro_A/status/1069956795051831298?ref_src=twsrc%5Etfw">2018年12月4日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ドアの前に置いてみた。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ちなみにドアに反応させるとこうなるので、もう完全にファミマ。 <a href="https://t.co/92ytVNxDh4">pic.twitter.com/92ytVNxDh4</a></p>&mdash; あーたろ (@kotarotaro_A) <a href="https://twitter.com/kotarotaro_A/status/1069969774636081152?ref_src=twsrc%5Etfw">2018年12月4日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ただ、赤外線センサーが結構な近距離じゃないと反応しないっぽいので、入店（入室？）した人に直に反応させるのは難しそうでした。

##メリット
・特にない
##デメリット
・うるせえ
・ドアを開ける時にぶつけないように慎重に開ける必要がありめんどくさい
・蹴り飛ばさないように足元に注意して歩く必要がありめんどくさい

#まとめ
以上でした。
くだらない茶番に付き合っていただいき、本当にありがとうございます。
[谷ゼミの落書き帳](https://qiita.com/advent-calendar/2018/drawing_pad_from_tani_seminar)７日目をいただきました。

電子工作は手軽で楽しく遊べるのでおすすめです。
電子部品単体だと安く購入できますしね。
ぜひ、皆さんも自宅を便利にしてみてください。