トイレの電気は消しましょう(obnizを活用したIoTプロトタイプの作成)
アイデアだし
トレイの電気を消し忘れて常に娘に叱られるので消し忘れたら音がなる装置を作りたい!
-
トイレの電気はそもそもついてないか問題
- トイレの電気は用を足すときにはついている
- 小と大だとついている時間は異なる
- 電気が「ついたら鳴る」だと用を足している時ずっとなりっぱなしになる
- そんなせわしないトイレは困る
-
トイレの電気はそもそもついてないか問題
- 小を前提として電気がついてから30秒後に音が鳴るようにする
- 大を前提としたら小の場合トイレから離れてしまうので音が聞こえないので消し忘れる
プログラムをChatGTPに作ってもらう
- obnizを使っていること
- 照度センサーとスピーカーを使いたいこと
を前提にきいてみた。
const obniz = new Obniz("YOUR_OBNIZ_ID"); // Obniz_IDに自分のIDを入れます
obniz.onconnect = async function () {
// 照度センサーを利用
const photoresistor = obniz.wired("PhotoReflector", { anode: 0, cathode: 1 });
// スピーカーを利用
const speaker = obniz.wired("Speaker", { gnd: 2, signal: 3 });
// obnizディスプレイ(初期表示)
obniz.display.clear();
obniz.display.print('obniz Ready');
let lightDetected = false;
setInterval(async () => {
// 照度を取得
let lightLevel = await photoresistor.getWait();
// 照度をコンソールに表示
console.log('Light level:', lightLevel);
// 照度をobnizディスプレイに表示
obniz.display.clear();
obniz.display.print('Light level: ' + lightLevel);
// 照度が一定以上の場合
if (lightLevel > 700) { // 700は例としてのしきい値
if (!lightDetected) {
lightDetected = true;
// 30秒後に音を鳴らす
setTimeout(() => {
speaker.play(440); // 440Hzの音を鳴らす
setTimeout(() => {
speaker.stop();
}, 3000); // 3秒間音を鳴らす
}, 30000); // 30秒後に実行
}
} else {
lightDetected = false;
}
}, 1000); // 1000ミリ秒 = 1秒ごとに実行
}
ありがとう!GTPくん!!
ここで問題です。
プログラムが書けても、obnizの設定がわからん。
どこに刺すん???
はぁ!?!?!?!
GTPくんが教えてくれてたので、とりあえず言われたとおりに刺す。
使用するセンサーとピン接続
照度センサー(Photo Reflectorなど):
アノード(正極): 0
カソード(負極): 1
スピーカー:
GND(接地): 2
Signal(信号): 3
このコードを開発者コンソールに貼り付けて実行することで、照度センサーが一定の明るさを検出したときに30秒後にスピーカーが音を鳴らす動作を確認できます。
鳴らへんねんけど?😇
なにか足らない?
音が鳴らない。原因も分からない。なんでなんで?
ぐるぐると検索してたら、この記事発見!!
夕方になると夕焼け小焼けがなるらしい。
なんて素敵な!!
使っているセンサーも同じだと思うのでセンサーとかブレッドボードとかで設定してみる。
鳴らない
なんでなんで?😇
ここで"ものしりじいさん"投入
FFでいうと情報を教えてくれる人らしい。
FFせんから知らんけど😇
そもそも使ってるセンサー名が違っていたらしい。
// 照度センサーを利用
const photoresistor = obniz.wired("PhotoReflector", { anode: 0, cathode: 1 });
このセンサーじゃないですよっと。
それは分からなかったし、勝手に信じていたよbaby
使用しているセンサー名に修正してみた。
鳴らない
なんでなんで?😇
冒険は続く。
照度と刺す場所問題
ものしりじいさん「スピーカーどこ刺してますか?」
のりまき「1と2に刺してますよー」
ものしりじいさん「・・・コードに2と3って書いてるじゃろ?」
のりまき「ほんまや・・じいさん」
// スピーカーを利用
const speaker = obniz.wired("Speaker", { gnd: 2, signal: 3 });
刺す場所も指定してくれてるのも知らなかったよパトラッシュ🐶
// 照度が一定以上の場合
if (voltage > 2.5) { // 2.5Vは例としてのしきい値
if (!lightDetected) {
lightDetected = true;
ものしりじいさん「あとは照度かも。別のプログラムで照度の数値みてみたらよいかも。例って書いてるからそんなに出てないかも。」
のりまき「おかのした!」
照度と刺す場所指定を修正した。
無事に鳴った!!!
うれしい!!
照度の問題
デスク上では鳴ったけど、トイレで鳴らない。
照度だ!絶対照度。
トイレの照度を図って設定しなおしたら無事に鳴った!
めでたしめでたし
東京音頭作ってみた
とーきょーやくると の ると とその次の音階がまだ微妙・・・
これでファンだといえるのか!!!
音階はコチラ
だれか教えて!ちなヤク民!!
// 音階
const Key = {
"ド": 261.626,
"レ": 293.665,
"ミ": 329.628,
"ファ": 349.228,
"ファ2": 369.994,
"ソ": 391.995,
"ラ": 440.000,
"シ": 493.883,
"ド2": 523.251,
"レ2": 587.330,
"シ2":246.942,
};
// メロディシーケンス
const melody = [
{ note: "ソ", duration: 800 }, { note: "休止", duration: 100 },
{ note: "レ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ソ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ソ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ラ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ソ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ラ", duration: 300 }, { note: "休止", duration: 100 },
{ note: "ラ", duration: 300 }, { note: "休止", duration: 500 },
{ note: "ソ", duration: 800 }, { note: "休止", duration: 100 },
{ note: "レ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ソ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ソ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ラ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ソ", duration: 500 }, { note: "休止", duration: 100 },
{ note: "ラ", duration: 300 }, { note: "休止", duration: 100 },
{ note: "ラ", duration: 300 }, { note: "休止", duration: 500 },
];