永久の眠りにつきたい
睡眠不足が続くと、もう永遠に眠りたい衝動に駆られます。
そんなとき、こんなものを発見しました。
これ、アラームが鳴ったらスヌーズを押して、永久にスヌーズにする装置なんです。
衝撃的なのは、アラームをつけているのに、消すんです!!
私はこれをみた時に、 これだ! と思いました。
いわばこれは、己の意志とは関係なく、アラームが消されるわけですよね?つまり、誰が悪いわけではなく、ただそういう世界なだけなんです。これで起きなくても誰も責めることはできないはず!(それはない?)
つまり、「私自身は起きようとしている、だけど世界がそれを許してくれないならずっと寝ててもいいんじゃないか?」
私はそんな世界を目指しました。
やりたいこと
手元にあるものでできることを考えた結果、自動照明OFF装置を作ることにしました。
イメージとしては、朝起きて部屋の明かりをつけようとしたら、永遠に照明をOFFにする装置です。
OFFにされたらもう仕方がないですよね?
それはもう起きるな! 寝ろ!
ということです。
では、そんな世界を目指していざゆかん!
事前準備
必要部品
obniz
今回はその使いやすさから、こちらのボードを使用しました。
簡単にIotを構築することができるIot開発ボードです。Wi-Fiに接続すれば、Wi-Fi経由でのプログラムの書き込みができるなど、使いやすいです。
obnizの詳細はこちらからご覧ください:obnizとは | すべての人にIoT開発の機会を
サーボモーター
照明スイッチのOFFをするために使用します。
サーボモーターはこちらを使用しました:マイクロサーボ9g SG-90
光センサー
光で抵抗値が変わるもので、照明が点灯したことを検知するために使用します。
光センサーはこちらを使用しました:CdSセル 5mmタイプ
抵抗
光センサーの抵抗値が変化することを検知するために、必要な部品となります。
抵抗はこちらを使いました:カーボン抵抗(炭素皮膜抵抗) 1/2W330Ω (100本入)
使用する抵抗の抵抗値を大きく変えると、私の環境と設定する閾値が大きく変わりますので、そこだけ注意してください。
ブレッドボード
抵抗と、光センサー使って、照度を測定する回路を作ります。
ブレッドボードはこちらを使いました:ミニブレッドボード BB-601(白)
電源(モバイルバッテリー)
こちらは、obnizの電源を確保するために使用します。
PC等のUSBから給電できる場合はなくても大丈夫です。
obnizがType-Cケーブルなので、それに対応できるものをお使いください。
配線
全体としてはこんな形に配線します。
サーボモーター・光センサーとobnizの接続するピン番号を間違えると正常に動作しないので、プログラムコードに記載しているコメントと画像を照らし合わせて、接続してください。
温度センサとサーボモーターの挙動を確認!
光センサーの値からサーボモーターを動かすことができました!
いざゆかん!永久の眠りへ!!
まずはサーボモーターの取り付け!
無理やり感は否めないが、動けばよいんだ!!


永久の眠りへ!!
あれ?照明スイッチが押されて、、、ないぞ!
よくみたら、サーボモーターの力に貼り付けたテープが耐えきれなくて、うまく押すことができてない、、、
試行錯誤の末最後は力が全てだと悟る
ここから私はあらゆるテープの貼り方を考案しましたが、どれもうまくいきません。
手で押さえたらうまくいくのに!
試行錯誤した末、私は究極の結論に辿り着きました!
押さえつけました。
ちなみに、押さえつけているのは電子レンジです。
サーボモーターがなんかかわいそうに見えるのは気のせいです。彼は強い子です!
今度こそゆかん!永久の眠りへ!!
環境・ソースコード
- Node.js v16.16.0
- npm v8.11.0
- obniz v3.23.0
- Visual Studio Code v1.71.2
const Obniz = require('obniz');
// ここはお使いのobnizのIDにしてください。
const obniz = new Obniz('*******');
obniz.onconnect = async () => {
// 光センサーを使用するための処理
obniz.io7.output(true); // io7電圧を5Vに(電源+)
obniz.io9.output(false); // io9電圧を0Vに(電源−)
// サーボモータを利用 io0にGND,io1を電源(5V),io2にシグナルを設定する
const servo = obniz.wired("ServoMotor", {gnd:0, vcc:1, signal:2});
// サーボモーターの初期位置 接続する向きによりここは調整する必要がある
servo.angle(95.0);
// io8をアナログピンに(光センサーの値を取得)
obniz.ad8.start((voltage) => {
// センサーの値が変わるたびに実行される
console.log(`changed to ${voltage} v`);
if (voltage > 0.1){
// 電圧値が0.1Vを超えていたら明かりが付いていると判定する
// この値は、
// サーボを指定の角度まで動かす
servo.angle(120);
}
else {
// サーボを初期位置に戻す
servo.angle(95.0);
}
});
}
光センサーの閾値は環境により変わるので、ご自宅に合わせて設定してください。
最後に
これでもう朝、無理に起きる必要は無くなりました!
何せ、部屋が明かりをつけることを許してくれないんだから、もう寝るしかないですよね?
みなさんが私と同じ気持ちであることを願っています
ありがとうございました!