Web屋の電子工作DIY:夜更かしテレビを罰金性にして、早起き生活を手に入れる①

  • 18
    Like
  • 2
    Comment

夜更かしテレビ罰金性

ちまたではIoTが流行ってるらしい。
Web&アプリ屋だけどハードウェアが楽しげすぎて、個人的にこんなDIYしてみることにしました。

以下の順番で記載中。

[目標]
 ・夜にテレビをだらだら観て、夜更かししてしまうのを防止する仕組みをつくる

[動作]
 ・設定した時間以降にテレビがついている場合に、自動的に電源OFF
 ・その後5分毎にチェック(するか、テレビがついたのを検知)して、
  ついてたらとにかくOFF
 ・どうしてもテレビが観たい場合、
  指定した貯金箱に500円を入れることで15分だけテレビを観ることができる
  (500円玉が手元になかったら、おとなしく寝ましょう)

[Myスペック]
 ・Webとアプリは作れる/サーバーもそれなりに触れる
 ・ハードはLチカしかやったことがない
 ・購入したもの
   - Arduino エントリーキット(Uno版)- Physical Computing Lab
   - RaspberryPi Model B+
 ・作成するまでにちらっと読んだIoT・電子工作関係の本
   - 絵で見て分かるIoT/センサの仕組みと活用
     まださらっとしか読めていないけれど、ちゃんと読みたい。
   - RaspberryPiで学ぶ電子工作
   - 実例で学ぶRaspberryPi電子工作
     試すまではやっていないけれど、さらっと読むだけでも勉強になる
   - 融けるデザイン
     実践としては関係ないけれど、IoTについて考えるのに読んでおいた方が良いと思う一冊。
     めちゃくちゃおもしろいのでおすすめです。
  ※ただ情報をゲットするにはGoogle検索がやっぱり偉かったのと、
   詳しい人から情報をもらうのが一番の早道かなという結論。。

構成を考える(1回目)

夜更かしテレビ罰金制度導入ツール.jpg

はい、もう完っ全にフィーリングで!
・TVのON/OFFの検知ってどうやって・・?
・RaspberryPiでアナログ情報をINするのが面倒そうだったので
 Arduinoから入力させるようにしてみたけど、使い方的にあってる?
・ブラウザで結果を表示するのって、ネットどうやって繋ぐの?
等々、この段階では疑問だらけなのですが、とりあえず一回やってみます。
以下2の部分を実装するための作業ログです。

Arduinoで光センサーを検知して、RaspberryPiで結果取得

手順としては、まずArduinoを動作させてからRaspberryPiでの取得に移行します。

前提知識を蓄える

ブレッドボードって何?とか抵抗どれ使えば良いの?とか、最初は分からないことだらけだったので、
上記で挙げたRaspberryPiで学ぶ電子工作の第3章まで(OSインストール〜Lチカ)を実践しました。

Arduinoで光センサーから値をとる

ブレッドボードの配線はこちらのとおりに繋ぎます。
Arduinoをダウンロードして、
ツール->ボードから繋いでいるArduinoの種類とポートを設定します。
ファイル -> スケッチの例 -> 03.Analog->AnalogInOutSerial
を開いてAnalog情報をどうやって取るかの例をみてみます。
コピーしていらなそうな所を削除した結果、コードはこんな感じに。

cds_test
const int analogInPin = A0;  
int sensorValue = 0;        

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

void loop() {
  // 取得
  sensorValue = analogRead(analogInPin);

  // 出力
  Serial.println(sensorValue);

  // 次にloop()を実行するまでの待機
  delay(600);
}

ファイルの左上にあるチェックボタンを押して確認
->右矢印ボタンを押して、Arduinoに命令を書き込みます。
ツール->シリアルモニタを立ち上げコードのsetup()で書き込んだ9600bpsに合わせると、
光センサーの値が出力されているのを確認できます。

MacとRaspberryPiを繋ぐ

モニタをいちいち出してくるのは面倒なので、
RaspberryPiはMacBookAirからSSHできるように設定します。
Lanケーブルを一本用意して、RaspberryPi<-Lan-Thunderbolt->Macと繋ぎます。
Macに戻ってシステム環境設定->共有を立ち上げて以下のように設定します。

スクリーンショット 2016-03-28 10.00.59.png

コンソールを立ち上げて、

$ grep OFFER /var/log/system.log

と打つと繋いだRaspberryPiのIPアドレスを取得できるのでメモして、

$ ssh pi@***

とすればログインできます。
RaspberryPiを終了するときには

$ sudo halt

で閉じることができます。便利。

RaspberryPiとArduinoを繋ぐ

USBケーブル(最初に書いたエントリーキットに入ってたのを使用)でシリアル通信させる方針です。
まず物理的にArduinoとRaspberryPiを繋ぎ、

$ dmesg

コマンドでArduinoのシリアルポートを確認しておきます。
RaspberryPiにSSHで入り、適当なところにファイルを作って以下を記載。

test.py
# -*- cording: utf-8 -*-
import serial
import time

ser = serial.Serial('/dev/ttyACM0(※ここにシリアルポート)', 9600)
time.sleep(2) # Arduinoのセットが終わるまでちょっと待つ1
line = ser.readline()
print line
ser.close()

$ python test.py

で実行すると、さっきArduino単体でシリアルモニタで確認した光センサーの値が
ちゃんと表示されていることを確認できます。

いったんまとめ

意外と目標があれば戦えそう・・?という感触です。
けれど詳しい人を捕まえる以上に効果がある方法はないです。。
もくもく会とかLT大会とかに参加するのも良いし、
Webサイトをお気に入りしとくとかTwitterとかFacebookとかで
日々情報を受信しておくのもびっくりなくらい刺激があります。

あと問題はデータを取得した後にどう処理して返していくかのところかなと思うので、
デザイン・機械学習・クラウドあたりの情報収集が役に立ちそう。
とりあえずこのまま進めて、反省しながら寄り道しまくりたいと思います。