-- ソーシャル目覚まし (2010/11/14 07:41) - 2612PV

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



そして本文。

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 <stdio.h>
#include <unistd.h>
#include <sys/io.h>

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 true
do
  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 300
done


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

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

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



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

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

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



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

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



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

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

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

-- 参考文献

-- 関連項目
モーターの制御
パラレルポートの制御
パラレルポートの制御(2)
家庭用100V電源の制御
モーターの制御(2)
モーターの制御(3)
モーターの制御(4)
Ubuntu
バッファの必要性
モーターの制御(5)
twitter bot
つい、投票。

名前
コメント
更新情報
コメント「Johnf318さん」(2015/11/30 06:26)
コメント「もちもちさん」(2015/10/15 01:25)
コメント「しもさんさん」(2014/07/11 12:57)
コメント「ljilchさん」(2014/06/28 02:40)
コメント「ledogoさん」(2013/06/25 23:11)
コメント「tcrwefcxtjさん」(2013/06/25 21:00)
コメント「gihjfldrwさん」(2013/06/23 08:07)
コメント「yfaewyqviさん」(2013/06/23 03:12)
コメント「Papan3世さん」(2013/05/09 11:48)
コメント「Papan3世さん」(2013/05/09 11:46)
コメント「Papan3世さん」(2013/05/09 11:45)
コメント「Papan3世さん」(2013/05/09 11:40)
コメント「Papan3世さん」(2013/05/09 11:37)
コメント「さん」(2013/04/21 01:57)
コメント「上田朋哉さん」(2013/04/08 02:43)
コメント「syazaqxさん」(2013/02/14 11:36)
コメント「seqdspさん」(2012/11/08 02:34)
コメント「kzghepさん」(2012/11/03 21:45)
コメント「さん」(2012/10/16 08:05)
コメント「yflpfhftbvpさん」(2012/07/21 14:51)
コメント「szodydさん」(2012/06/22 15:38)
コメント「nkhkajuttzさん」(2012/06/20 03:23)
コメント「jjomlllxさん」(2012/02/13 12:34)
コメント「さん」(2011/10/28 14:11)
コメント「onmqdqobrpdさん」(2011/10/15 03:57)
コメント「さん」(2011/08/20 14:05)
コメント「さん」(2011/06/26 20:59)
コメント「bfixkuohhzoさん」(2011/06/10 00:04)
コメント「さん」(2011/05/24 13:47)
コメント「dyecrnさん」(2011/05/12 20:06)
コメント「atkyzmさん」(2011/03/02 07:59)
日記「新年を迎えまして(4)[1446]」 (2011/01/23 00:17)
電子工学「TwitCrew[1763]」 (2011/01/02 06:22)
コメント「かってぃさん」(2010/12/07 15:49)
コメント「通りすがりさん」(2010/12/02 23:37)
電子工学「ソーシャル目覚まし[2612]」 (2010/11/14 07:41)
その他「自己紹介[6920]」 (2010/10/16 01:36)
コメント「かってぃさん」(2010/10/15 02:03)
コメント「えんぺらあさん」(2010/10/15 02:00)
電子工学「性格の木[1533]」 (2010/10/15 01:43)
PR

プロフィール
名前: かってぃ
職業: 学生、性別: 男性、年齢: 22歳、住所: 横浜市
理系用語
コンテンツ
トップページ
自己紹介
電子工学

料理
勉強
日記
ノート
自転車
その他
本棚
一言メモ
電子回路コレクション
ヘッドホンアンプのまとめ
リンク
三度の飯とエレクトロン
choilog
TwitCrew
Questo
Ropi.me
studylog
つい、投票。
tvtw - ツイッターでテレビ実況
理系用語
理系用語bot on twitter

ぷよぷよ!!クエスト 攻略
気ままでいたいがあんまり気ままではない感じのブログ
魚料理と簡単レシピ
素晴らしき哉,電気工学的人生!
アンチ・バベルの塔
大学生ブログランキング