7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

谷ゼミの落書き帳Advent Calendar 2018

Day 7

あなたとコンビに

Last updated at Posted at 2018-12-06

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

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

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

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

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

よし、やろう。

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

#用意するもの
arduino uno
ジャンパーワイヤー6本くらい
圧電スピーカー
赤外線障害物検知センサーモジュール
・パソコン(arduino ide入れてね)
・家を便利にしたいという情熱

#構成
なんと僕ですね、arduino本体と、osoyooさんのセンサーモジュールキットを持っているのですよ。(前職での頂き物です。本当にありがとうございます。ちゃんと使ってます。)
そして、その中に赤外線障害物検知センサーモジュールも含まれてまして、これを使った構成でやります。

このページに書いてあるイラストのLEDが刺さってるところをブザーに変更すれば完成です。
念の為、僕が組んだ構成の写真貼っときますが、まあほぼ一緒です。

a.jpg
b.jpg

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

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メソッドだけ軽く説明します。
第二引数 → 周波数
第三引数 → 音の長さ
となっています。

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

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

#結果
できた。

ドアの前に置いてみた。

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

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

#まとめ
以上でした。
くだらない茶番に付き合っていただいき、本当にありがとうございます。
谷ゼミの落書き帳7日目をいただきました。

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

7
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?