睡眠妨害マシーンを作った話

平日の朝起きられないんですよね。寒いし眠いし何時間寝ても眠いし。

皆さんはいかがですか。

 

というわけで色々策を講じてみました。

 

①大音量目覚ましを買う

→鳴った瞬間止めてしまって布団に戻って二度寝を始める

②大音量目覚ましを遠い所に置く

→鳴った瞬間止めに行き布団に戻って二度寝を始める

③大音量目覚ましの近くに足つぼマットを置き痛みで目を覚ます

→足つぼマットを避けてなった瞬間に止めに行き布団に戻って二度寝を始める

④カーテンを開けて寝ることで日光で目を覚ます

→カーテンを開け忘れて寝ることが多く、冬なので朝はまだ暗い

 

すべて労働モチベのなさと眠さの前では無意味でしたとさ。

 

結局朝布団の中で微睡んでいる途中に、
(いくらフレックスとはいえこのままだと遅刻やんけ草草草草草草草草)
と跳ね起き朝飯も髪のセットも省略して駅まで全力ダッシュという日々を
3日連続で続けることになりました。

 

そんなある日にスマホの画面の明るさをMAXにして寝たところ、
一瞬意識が覚醒したときにスマホの画面の眩しさで目が覚めたんですよね。

 

部屋の照明を起きる時間になった途端にONすればいいんだ!天才!

と気付いたので色々調べてみました。

下記のサイトのように赤外線リモコンの制御は先駆者が沢山います。

deviceplus.jp

Arduinoは持っているので受光素子さえあれば再現できそうだという事で、

秋月電子で早速購入。

今日届いたのでブレッドボード上に実装し、プログラムも適当に組んで

照明(アイリスオーヤマ製)を付けることに成功しました。

 

参考にさせて頂いたサイト(ほぼここからのコピペプログラミングです)

jumbleat.com

hawksnowlog.blogspot.com

kyonta1022.hatenablog.com

 

ただArduinoにRTCの概念がないのでdelay(8時間のミリ秒換算)を入れ、

起きる時間の8時間前にArduinoのRESETを押さないといけないクソ仕様です。

誰かRTCのモジュールを買う意外にいい案があったら教えてください。

 

以下スケッチの供養

 

#include <IRremote.h>

IRsend irsend;
int khz = 38;
unsigned int ONOFFSignal[253]={2188, 812, 5592, 908, 1584, 436, 1548, 444, 552, 448, 548, 448, 544, 452, 544, 452, 540, 460, 536, 460, 536, 460, 1532, 464, 532, 464, 536, 460, 536, 464, 532, 464, 532, 464, 1528, 464, 1532, 464, 532, 464, 532, 464, 532, 464, 532, 468, 532, 464, 532, 464, 532, 464, 532, 468, 528, 468, 532, 464, 532, 464, 532, 464, 532, 468, 528, 468, 532, 464, 532, 464, 1528, 468, 528, 468, 1528, 464, 1528, 468, 528, 468, 1528, 468, 1524, 468, 528, 8920, 5536, 964, 1528, 468, 1528, 464, 532, 464, 532, 464, 532, 468, 528, 468, 528, 468, 532, 464, 532, 468, 1524, 468, 528, 468, 532, 464, 532, 468, 528, 468, 528, 468, 1528, 464, 1528, 468, 528, 468, 532, 464, 532, 464, 532, 468, 528, 468, 528, 468, 532, 464, 532, 468, 528, 468, 528, 468, 528, 468, 532, 464, 532, 464, 532, 468, 528, 468, 532, 464, 1528, 468, 528, 468, 1524, 468, 1528, 468, 528, 468, 1524, 468, 1528, 468, 528, 8936, 5520, 964, 1528, 468, 1524, 468, 528, 468, 532, 464, 532, 464, 532, 468, 528, 468, 528, 468, 532, 464, 1528, 468, 528, 468, 528, 468, 536, 460, 532, 468, 528, 468, 1528, 464, 1528, 468, 528, 468, 528, 468, 528, 468, 532, 464, 532, 468, 528, 468, 528, 468, 532, 464, 532, 468, 528, 468, 528, 468, 528, 468, 532, 464, 532, 468, 528, 468, 528, 468, 1528, 464, 532, 468, 1524, 468, 1528, 468, 528, 468, 1524, 468, 1528, 468, 528};
unsigned int MAXSignal[253] ={2144, 848, 5576, 932, 1556, 440, 1544, 448, 548, 452, 544, 452, 544, 452, 544, 452, 544, 456, 536, 460, 536, 460, 1532, 464, 532, 464, 532, 464, 532, 464, 532, 468, 532, 464, 1528, 468, 528, 468, 1524, 476, 520, 492, 508, 488, 508, 488, 508, 488, 508, 488, 508, 492, 508, 488, 508, 488, 508, 488, 508, 492, 508, 488, 508, 488, 508, 488, 508, 488, 1504, 492, 508, 488, 508, 488, 1504, 492, 1504, 488, 508, 492, 1500, 492, 1504, 488, 508, 8936, 5520, 964, 1528, 468, 1524, 468, 528, 468, 528, 468, 528, 468, 532, 464, 532, 468, 528, 468, 528, 468, 1528, 464, 532, 464, 532, 468, 528, 468, 532, 464, 532, 464, 1528, 468, 528, 468, 1528, 464, 532, 464, 532, 468, 528, 468, 532, 464, 532, 464, 532, 464, 532, 468, 528, 468, 532, 464, 532, 464, 532, 464, 532, 464, 532, 468, 532, 464, 1528, 468, 528, 468, 528, 468, 1528, 464, 1528, 468, 528, 468, 1528, 464, 1528, 468, 528, 8912, 5544, 940, 1552, 464, 1528, 468, 532, 464, 532, 464, 532, 464, 532, 464, 536, 464, 536, 460, 532, 464, 1528, 468, 532, 464, 532, 464, 532, 464, 532, 464, 532, 468, 1528, 464, 532, 464, 1528, 468, 532, 464, 532, 464, 532, 464, 532, 468, 532, 460, 536, 464, 532, 464, 532, 464, 532, 464, 536, 460, 536, 464, 532, 464, 532, 464, 536, 460, 1532, 464, 532, 464, 532, 464, 1532, 464, 1528, 464, 532, 464, 1532, 464, 1528, 464, 532};
unsigned long time;

void setup() {
Serial.begin(115200);
//attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);
}

void loop() {
delay(1000);
time = millis();
if(time > 28800000) {
irsend.sendRaw(MAXSignal, sizeof(MAXSignal) / sizeof(MAXSignal[0]), khz);
delay(1000);
irsend.sendRaw(ONOFFSignal, sizeof(ONOFFSignal) / sizeof(ONOFFSignal[0]), khz);
}