ソーシャル目覚まし

長いので完成図から入ります。

そして本文。

twitterでフォローしている人の界隈では、applim以来「ソーシャル目覚まし」が時々話題に上がります。
(applimは、スマートフォンアプリを用いたマーケティングのコンテストです。)
「ソーシャル目覚まし」を簡単に言えば「インターネットを通じて友達に朝起こしてもらおう」というものです。
たぶん。

面白いアイデアなので作ってみようと思いました。
それでいて、このホームページの読者の方にも作れるように解説をしつつ記録したいと思います。

が、ここで重要なことに気が付きます。
スマートフォンを持っていないのでした。

ということで、リアル目覚ましをソーシャル化することにしました。

ちょうど良いところに壊れた目覚まし時計がありました。
正確には、以前分解してみたら直せなくなったですが。

あとは、インターネットにつなげたいので、パソコンが欲しい。

目覚まし時計は壊れてても良いけど、パソコンは壊れたやつじゃだめです。

ちゃんと生きているパソコンにLinuxをインストールします。
ハードウェアを制御したいのでLinuxが楽だと思います。
Windowsは変な制限が色々と生じます。

経験的に相性が良いので、Ubuntuをインストールします。

どんなものを作るかといえば、twitterで自分宛てに
「@katty0324 起きてください~」
みたいなメンションが送られてきたとしましょう。

すると、パソコンがそれを自動でキャッチします。
そして、目覚ましを鳴らしちゃうという仕組みです。

たぶん楽しいと思います。

require_once('./twitteroauth.php');require_once('./OAuth.php');define('COMSUMER_KEY', 'xxxxx');define('COMSUMER_SECRET', 'xxxxx');define('ACCESS_TOKEN', 'xxxxx');define('ACCESS_TOKEN_SECRET', 'xxxxx');$to = new TwitterOAuth(COMSUMER_KEY, COMSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);$mentions = json_decode($to->OAuthRequest("https://twitter.com/statuses/mentions.json", "GET", array()));

まずは、こんな感じで、PHPを利用してtwitter APIから自分宛てのメンションを取得します。
(インクルードしているファイルはライブラリなのでWEBで入手できます。)
OAuth認証になって少し面倒になりましたが、それでも数行のプログラムで取得できます。

取得結果をブラウザに表示してみると、こんな感じ。
かなり色々な情報をまとめて返してくれるので、厄介っぽく見えますが処理は簡単です。

$time = strtotime($mentions[0]->created_at);$text = $mentions[0]->text;echo( (time() - 5*60 < $time) && (preg_match("/起きて/", $text)>=1) );

まずは最新のメンションの発言時刻と本文を取得します。
5分以内のツイートで、かつ「起きて」という言葉が含まれているかを調べることにします。

このスクリプトをWEBにアップロードします。
たとえば、http://twi.linear-art.com/alerm/にアップします。

このページを開くと、「1」が表示されたり、されなかったりします。
自分のことを起こそうとしている人がいる時に、「1」が表示されます。

そうこうしているうちにUbuntuがインストールできたようです。
必要なソフトをインストールします。

sudo apt-get install gcc

言わずと知れた、Cコンパイラ、これだけ。
目覚まし時計の制御は、C言語で行います。

#include #include #include int main(){  if( ioperm( 0x378, 3, 1 ) )    return -1;  outb( 0x01, 0x378 );  sleep(5);  outb( 0x00, 0x378 );  return 0;}

こんな感じで、ハードウェアにアクセスするプログラムを書きます。

最近ではすっかり見なくなった、このパラレルポートという端子。
この25ピンに関するメモリにアクセスして、ビット単位で書き換えることができます。
機種によって異なる場合もありますが、そのメモリのアドレスが0x378です。

そこに、0x01を書き込んだり、0x00を書き込んだりしています。
0x01は、2進数だと0b00000001ですね。
つまり、最下位ビットだけ1にするような書き込みを行います。

そして、パラレルポートの端子の25番ピンにGND配線、2番ピンに信号配線を引きます。

すると、こんな具合で、LEDを光らせたり消したりすることができます。
上のプログラムでは、5秒光って消えます。
LEDには抵抗をお忘れなく!

このあたりについては、以前に少し詳しく書きました。
パラレルポートの制御」をご覧ください。

ところで、パラレルポートの出力は、目覚ましを鳴らすほどのパワーを持っていません。
そこで、登場するのが、トランジスタです。

写真は、たまたま家にあった2SK2186というnチャネルのMOSです。
今回はMOSFETを使いましたが、バイポーラでもなんら問題ないです。

かっこよく言えばモータードライバー回路なんですが、ただのMOSスイッチです。
一応、逆起電力対策のダイオードを入れておきます。

電源は、家庭にあるテキトーなACアダプタをぶった切るか、電池を使いましょう。
このアダプタは2A流せるデキル子ということで、ロボット作りの時に使っていたやつです。
(「モーターの制御(4)」を参照してください)

これをモーターの回路につなけば、モーターが回ったり止まったりします。

while truedo  wget -O /home/katty/twitter.dat http://twi.linear-art.com/alerm/  read enabled < /home/katty/twitter.dat    if [ "$enabled" = "1" ]; then    /home/katty/a.out  fi  sleep 300done

クライアントサイドのプログラムは、シェルスクリプトにしま
す。

さきほどWEBにアップしたページにアクセスして内容を取得。
取得した内容が「1」、つまり誰かが「起きて」と言っている時に、Cで書いたプログラムa.outを実行します。
つまり、LEDが5秒間点灯するようになります。

最後に5分間スリープして、繰り返し、無限ループします。
本来ここはcronで自動的に定期実行してほしかったのですが、うまくいかなかったので断念。

ここまでできたら後は簡単。

さっきまでモーターで実験していたところを、目覚まし時計のベルにつなぎかえます。
目覚ましのベルもモーターには違いないので、当然そのまま動作します。

ちなみに、ジリリリリリーって鳴る目覚まし時計の中身は、この写真のようになっているようです。
良く見ると、モーターの回転部分に金属片が付いています。
モーターの回転によって、それがベルに当たると音が鳴る、という仕組みです。

あとは、LEDに繋いでいたパソコンからの信号線をモータードライバに繋げばいいのですが。
パラレルポートの信号レベルが少し低くなってしまっているので、バッファーを入れます。

使うのは、ただのロジックICです。
74LS08というインバータが6個入っているICを使いました。
そのうちのインバータ2つを縦続に繋げばバッファです。

というわけで、完成!
@katty0324宛てに「起きて」と送ると、目覚ましが鳴ります。
(でも、うるさいので電源は切っておきます。)

目覚ましに限らず、色々な使い道があると思うので、皆さんもぜひ作ってみてください。
家にあるものでできて、半田ごてを使わなくても作れましたので、たぶん簡単です。

要素技術に関しては、「電子工学」カテゴリをご覧ください。
ほとんど全て以前に習得した技術の組み合わせなので、当時まとめたものの方が分かりやすいかもしれません。

コメント

タイトルとURLをコピーしました