2014年4月27日日曜日

電子レンジの寿命、無理やりキャビネットにビルトイン(1)

1994年9月、米国赴任時に購入した シャープの電子レンジの調子が最近おかしい。
数カ月前に庫内照明用電球が切れたため、交換。そして先週日曜日に電源が入らなくなった。カバーを開けフューズを調べると切れている。とりあえずは町のDo-It-Best で換えのフューズを購入し、急場をしのぐ。それに最近天板がやけに熱くなる。このまま使い続けるのは危険と判断し、amazon.com に新しい電子レンジを注文。プライム会員でもないのに、電子レンジの配送はUPS で金曜日には到着。早い早い!


左が今まで使用していたシャープの電子レンジ。 右が今回購入したパナソニックの電子レンジ
シャープの電子レンジ、裏の製造年月日を見ると1994年4月、ちょうど20年、よく働いてくれました。今回はシャープではなくパナソニックの電子レンジにした。パナソニックの電子レンジはターンテーブルが1周/10秒 で回転するのが気に入っている。それにしても今度の電子レンジ、思ったよりもデカイ!ちょっとデカすぎる。このままではカウンタートップが狭くなってしまう。出力は同じなのだが、1.6cubic feet よりも 2.2 cubic feet の方が安かったので、大は小を兼ねると思って、大きい方にしてしまった。大きいほうが安い事にちょっと納得。


40年前のオーブン。一度も使ったことがなく、ただの棚、このオーブンを外して、ここに電子レンジをビルトインしよう! パナソニック純正トリムキットでビルトインするのが正攻法だが、このトリムキットは電子レンジ本体と同じ値段。ちょっと高すぎる。しかたがないので自前で無理やりビルトイン!


このオーブン、何も固定されていなくて、引っ張ったら外れた。


開口部はジグソーで切ったようでストレートになっていない。トリマーできれいに削る。

この電子レンジは左側面から空気を取り入れ、庫内を通って、右後ろから排気、排熱している。


電子レンジ左側の壁に穴を開ける。


キャビネット上の壁にも穴を開け。


キャビネット上の壁から空気を取り入れ、壁を通って電子レンジ左サイドへ
排熱は電子レンジ後ろから棚の後方へ排出する。


古いオーブンの電源はガレージ工房用に移設したため、新たに床下から、電子レンジ用の電源を確保。
上段棚、電子レンジ枠ピッタリのトリムをオーク材で施工。

とりあえず電子レンジを設置。キャビネットに合う、ステインが無いためフィニッシュは来週に持ち越し。

2014年4月26日土曜日

Raspberry pi で Hydroponic に挑戦 (5) MinipH I2C pH interface から Rawデータ取得

今日は MinipH I2C pH Interface board をRaspberry pi に繋いで pH のRaw データを取得することを目指す。このボードを使用した Arduino のサンプルプログラムはネット上にあるのだが、Raspberry pi、Python 上で使用するサンプルプログラムが見つからない。そこでこのボードで使用している A/Dコンバータ MCP3211 を使用したPython のサンプルプログラムを探してみるが、これも全く見つからない。困ったなぁ。自力でコードを書かなければ・・・・・・・
3枚のインターフェースボードを入手したのだが、そのうちの2枚が同じアドレスのため一つのI2Cバス上では2枚までしか使用できない。とりあえずは2枚のインターフェースボードを使用することにし、残りの一枚は別のアドレスのボードに交換してもらうよう製作者に依頼する。


2枚のボードを繋ぐ。

このインターフェースボードは I2C プロトコルでRaspberry pi と通信を行う。Raspberry pi はすでに I2C セットアップを済ませてあるので、sudo i2cdetect -y 1 とタイプし、2枚のボードのアドレスが認識されることを確認する。


アドレスは 0x4c と 0x4e

Raspbian には SMBus (System Management Bus) という I2Cのサブセット通信プロトコルが用意されているので、このプロトコルを使用して I2C 機器と通信を行う。
1枚のボードに pHプローブシュミレータを繋ぎ、 pH を 4,7,10 と変化させて、データを読み取るSMBusコマンドをいくつか試してみる。データは取得できるのだが、どれもpH の変化に対応していない。困ったなぁ。
そこで、A/Dコンバータ MCP3211 のデータシートSMBus Protocol Summary を見比べてみる。すると MCP3211 の12bit データは Upper Data Byte、Lower Data byte の順に送り出されるのに対して、 SMBus プロトコルで i2c_smbus_read_word_data() はLower Data byte、 Upper Data byte の順に読み込まれることになっている。それなら i2c_smbus_read_word_data() でデーターを読み、その 16bit データーの上位バイトと下位バイトを入れ替えれば良いはずだ。そこで ネット上にある バイトを入れ替えるプログラムを参考に Python でコードを書いてみる。


############################################################
#                                                          #
#    Read pH data from 2 MinipH I2C pH interface boards   #
#                                                          #
############################################################

import smbus
import time

bus = smbus.SMBus(1)
pH_address = [0x4c, 0x4e]

def readRawpH(address):
    raw_word= bus.read_word_data(address, 1)
    swapped_word = swap_bytes(raw_word)
    
    return swapped_word

def swap_bytes(word):
    byte_low = word & 0x00FF
    byte_high = (word & 0xFF00) >> 8
    swapped_high = byte_low << 8
    swapped_word = swapped_high + byte_high

    return swapped_word   

while True:
    for ad_index in range(len(pH_address)):
        i = 0
        raw_ph = 0
        while i < 100:
            raw_ph += readRawpH(pH_address[ad_index])
            time.sleep(0.01)
            i += 1
        raw_ph = raw_ph / 100
        print'Sensor#%d: %d,' % (ad_index,raw_ph), 
    time.sleep(1)
    print



このプログラムを走らせてみると、


pH4の時 Rawデータ は約1000、 pH7で約2000、pH10で約3000 となった。pH0 で 0, pH14 で 4095(12bit) とすればおおよそ合っているようだ。

2014年4月20日日曜日

Raspberry pi で Hydroponic に挑戦 (4) DS18B20 温度センサー

さて、いよいよ Hydroponic に使用する温度センサーをRaspberry pi に繋いでみよう。今回使用するのは DS18B20 という デジタル温度センサー、 1-Wire バスを使用して Raspberry pi と通信する。このセンサー一つ一つに固有の64bit コードが書き込まれているので、一つのバスに幾つもの温度センサーを繋ぐことができるのだ。
Arduino では 別にこのセンサーアドレスを調べるプログラムをインストールしなければならなかったが、Raspbian には すでにこの1-Wire 温度センサーのデーターを読み込むライブラリが用意されているので、Adafruit's Raspberry Pi Lesson 11. DS18B20 Temperature Sensing に従って、3本のセンサーをBread board に繋ぎ、アドレスを調べる。



000005cd2b5e、000005cd67f7、000005cd2b5e が3本のセンサーのアドレス。
22625(22.625℃)が センサー000005cd2b5e の温度。

Lesson 11 に従って、 Python 上でプログラミング。このプログラムは Root 権限がないと動かない。パパチャックは Raspbian に付属の IDLE という Python 開発環境 でプログラミング しているのだが、 デスクトップ上の IDLE アイコンをダブルクリックして起動すると、Root権限が無いためこのプログラムは動かない。
そこで、Raspbian デスクトップから LXTerminal を起動し、sudo idle とタイプして IDLE にRoot権限を与えて起動する必要がある。
Lesson 11 のプログラムは一つのセンサーから温度データーを読むプログラムなので、それを 先ほど取得したセンサーアドレスを使用して3つのセンサーから同時に温度データーを読み込むように改良。

以下がプログラムコード

#######################################################
#                                                     #
#    Read Temperature data from 3 DS18B20 sensors     #
#                                                     #
#######################################################

import os
import time

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

device_address = ['000005cd2b5e', '000005cd67f7', '000005cda0da'] #Sensor addresses
device_prefix = '/sys/bus/w1/devices/28-'
device_suffix = '/w1_slave'

def read_temp_raw(address_index):
    device_file = device_prefix + device_address[address_index] + device_suffix
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines

def read_temp(adrs_index):
    lines = read_temp_raw(adrs_index)
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw(adrs_index)
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        #temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c
 
while True:
    for ad_index in range(len(device_address)):
        print'Sensor#%d: %05.2f C,' % (ad_index, read_temp(ad_index)),
    time.sleep(1)
    print


2014年4月19日土曜日

Raspberry pi で Hydroponic に挑戦 (3) GPIOセットアップ、LEDコントロール


Raspberry pi がただの小さくて安いLinux コンピューターではないのが、このGPIO端子。

GPIO とは General-purpose input/output のこと。この端子を介してリアル・ワールドとコンピューターワールドが繋がるのだ。マイクロコントローラである Arduino には アナログ入力端子もあったが、Raspberry pi ではデジタル入出力端子のみ。 アナログ値を扱うには ADコンバーターを介して 繋ぐことになる。
Adafruit's Raspberry Pi Lesson 4. GPIO Setup に従って、GPIO とI2C のセットアップ。

Raspberry pi のpi はPython のpi。 このGPIO端子にアクセスする様々なライブラリーはPython というスクリプト言語で簡単に利用できるため、はじめて Python に挑戦してみる。
プログラミングの第一歩といえば ”Hello World" と画面に表示するプログラムだが、このGPIOプログラミングの第一歩はやはり LEDを点滅させるプログラムでしょう。 Google で そのようなPython プログラムを探す。
Third Eye Visions というWeb site に手頃なプログラムコードを見つけ、これを試してみる。(GPIO端子7番はあとで 温度センサーに使用するため、11番端子に変更。)




LED が光った!

2014年4月13日日曜日

Raspberry pi で Hydroponic に挑戦 (2) Raspberry pi のセットアップ

今日は Raspberry pi に OS をインストールし、Windows PCから Raspberry pi にリモートアクセスできるようにする。 Raspberry pi は ハードディスクのかわりに SDカード を使用するため、引き出しにあった8GBのTranscend を使用する。(4GB以上を推奨)以下は Windows PC を使用した Rasberry pi のセットアップ。
まずは Raspberry pi 用のOS Raspberianをダウンロード。 最新の RASPBERIAN Debian Wheezy のZIP ファイルをダウンロードし、そのZIP ファイルを解凍してImage ファイルを得る。
次に Win32 Disk Imager exe ファイルをダウンロード。exeファイルをダブルクリックして Win32 Disk Imager をインストール。
SD カードを Windows PC のカードリーダに挿入。SD カードは念のため FAT32 でフォーマット。Win32 Disk Imager を Run as Administrator として起動。Device として先ほど挿入したSD カードを選択。Image file として先ほど解凍したRaspberian を選択。 Write ボタンを押して、SDカードに Raspberian をインストール。これでSDカードの準備が完了。

Raspberry pi には Windows PCからリモートアクセスして使用する予定のため、ディスプレーやキーボードなどの入出力装置は必要ないのだが、リモートアクセスできるようセットアップするため、最初だけ ディスプレー、キーボード、マウスが必要になる。我が家でRaspberry pi につなげるディスプレーはリビングルームにある テレビだけなので、このテレビにHDMIケーブルでRaspberry pi を繋ぐ。(AVレシーバ経由ではうまく繋がらない。ダイレクトにテレビに繋ぐこと。)キーボードとマウスはUSBジャックに繋ぐ。イーサネットケーブルもRaspberry pi に繋ぐ。
Raspberian をインストールした SDカードを Raspberry pi のSDカードソケットに挿入して、マイクロUSBジャックにパワーサプライをつなぐと Raspberry piの起動が始まる。



まずは設定画面が現れるので、Adafruit's Raspberry Pi Lesson 2 を参考に初期設定を済ませる。
重要なのは Expand root partition to fill SD card, Enable SSH server, Start desktop on boot を選択。その他 Keyboard と Locale を設定して reboot。


Rasberian のデスクトップ!

LX terminal を開いて sudo ifconfig とタイプ。 Raspberry pi のIPアドレス をノートに書き留める。

この先 Raspberry pi には入出力装置は必要ないので、 sudo shutdown -h now とタイプし、 Raspberry pi を終了。 Power以外のLEDランプが全て消えたら、パワーサプライ、ディスプレイ、キーボード、マウス を取り外し、Raspberry pi はネットワークケーブルとパワーサプライだけを繋ぐ。

次は Adafruit's Raspberry Pi Lesson 6. Using SSH を参考に SSH でWindows PCから Raspberry pi にアクセスできるように設定。Putty の代わりに Bitvise SSH Client をダウンロードして Windows PC にインストール。
Bitvise SSH Client を起動、先ほどノートに書き留めた IPアドレスを入力。User name は pi、Password は raspberry (Raspberry pi の初期設定で パスワードを変更した場合はそのパスワード)を入力。 SSH で Raspberry pi のターミナルにリモートアクセスできる。

Adafruit's Raspberry Pi Lesson 7. Remote Control with VNC を参考に VNC (Virtual Network Connection) で Raspberry pi に デスクトップにWindows PCからアクセスできるようにする。
まずは Raspberry pi に VNC サーバーソフトをインストールする。SSHターミナルに 次のコマンドをタイプ
sudo apt-get update
sudo apt-get install tightvncserver
途中インストールするか聞いてくるので”Y"とタイプするとインストールが始まる。
インストールが終了したら、
vncserver :1
とタイプ、 VNCサーバーを起動する。
8文字以下のパスワードを新たに入力、 再入力する。

Real VNC から Windows 用 VNC client ソフトをダウンロードしてインストールする。
インストールしたVNC Viewer を起動。
VNC Server として Raspberry pi のIPアドレス:1 を入力、Connect ボタンをクリック、先ほどの8文字以下のパスワードを入力。

Rasberian のデスクトップがWindows PC 上に現れる!

最後はRaspberry pi 起動時に自動的に VNCサーバーが起動するように設定する。
Raspberian の LXterminal を起動。
$ cd /home/pi とタイプ。
$ cd .config で hidden config folder に移動。
$ mkdir autostart で autostart フォルダを作成。
$ cd autostart で autostart フォルダ内に移動。
$ nano tightvnc.desktop で テキストエディタ nano を起動、tightvnc.desktop という新しいファイルを作成。
以下のように タイプ。
[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false
Ctrl-X そして Y でtightvnc.desktop ファイルを保存。次回リブートすると自動的にVNCサーバー が起動する。

2014年4月12日土曜日

Raspberry pi で Hydroponic に挑戦 (1)

ママチャックが今年になってから急に Hydroponic Garden (水耕栽培)を始めると宣言。水耕栽培ではpH や水温などの管理が重要だということで、そのpH、温度 モニター& コントロールするシステムをパパチャックが作ることにした。 今まで このような電子工作は Arduino を 利用してきたが、今回はホームネットワーク上でリモートモニタリングできるようにしたい。将来は 外部から Tablet でモニターできるようにしたいなぁ。と夢は広がる。
Arduino は マイクロコントローラ なので、これに ネットワーク 機能を付け足すにはかなりの経費と労力が必要だ。そこで今回はじめて Raspberry pi を利用することにした。Raspberry pi は元々イギリス ケンブリッジ大学コンピューター研究所の 先生が 子供たちにコンピュータープログラミングを体験させるためのプラットフォームとして開発したクレジットカードサイズのコンピューター。CPU は700MHz のARMプロセッサで OSはLinux を使用する。RAMが 256MB、USBポートが一つ、EthernetポートのないModel A が $25-。512MBRAM, 2USBポート、 Ethernetポートの付いたModel Bが$35-と非常に安価だ。
今回は当然Model Bを使用する。Arizona 旅行に行く前にAmazon に発注。
旅行から帰るとその Raspberry pi が 届いていた。

左が Kindle Paperwhite。 Raspberry pi User Guide 2nd edition (¥902) 日本のAmazon のほうが安かったよ。


Raspberry pi を箱から取り出す。

Raspberry pi 以外に pH電極(約$8/個)、デジタル温度プローブ(約$2/個)MinipH I2C pH interface ボード (約$18/個)も購入。さぁ、うまくいくかなぁ?

ソファベッドの組み立て

Phonix の IKEA で購入したSofa Bed "LYCKSELE" を組み立てたよ。
















完成!

2014年4月11日金曜日

春休みキャンプ(8)Los Alamos へ



午前6時キャンプ場を後にし、ロスアラモスへ。
いつもは州間道I-10 号線を利用した南回りでロスアラモスへ帰るのだが、今回は暖かいので、Tucson から Holbrook へ下道で北上。


途中 Miami のFry'sへ寄り道し、 軽油を満タンにする。今回も$250のAmazon ギフトカードで 軽油が $1/ガロン 引き。34ガロン入ったので34ドル得した。
更に北上。 突然雄大なキャニオンが目の前に。

上の画像をクリックして画像を拡大
Salt River Canyon 地図上で九十九折の道があったのはここだったのか。


Holbrrok 手前、砂漠の路肩で昼食。

Holbrook から 州間道 I-40号線で東へ。 今日は南西からの強い追い風。60 mile/hour で巡航しても燃費が悪くならなくて助かった。Albuqueruque 手前のトラックストップ内 Denny’sで夕食。 途中給油することなくLos Alamos に 午後8時20分到着。

2014年4月10日木曜日

春休みキャンプ(7) Kitt Peak National Observatory



春のツーソンは予想よりも暑いため、今日は少しでも涼みに Kitt Peak National Observatory へ行こう。Kitt Peak は ツーソンから南西へ車で約1時間半。 Tohono O'odham 居留区内にある 標高2000m超 のQuinlan 山の頂上にある 国立天文台だ。観光ガイドによれば日中に数回ガイドツアーがあるのでそれに参加しよう。一回目は午前10時30分から始まる。 キャンプ場を出発したのが午前8時45分、10時30分のツアーにぎりぎり間に合うかどうか?
高速道路に入るまで信号で停まったり、工事中などでなかなか進まない。ツーソンを抜けるのに遅れた分は Quinlan 山の上りで何とか挽回。

Kitt Peak National Observatory'

頂上の駐車場に 10時23分に到着。ふ~ぅ、なんとか間に合った。
ところがビジターセンターに行くと、一回目の太陽観測施設ツアーは午前10時だって。なんだ、急いで損したなぁ。

McMath-Pierce Solar Telescope は世界一大きな太陽観測望遠鏡

2回めのツアーは2.1m 反射望遠鏡のツアーで午前11時30分からだ。仕方がないそれに参加しよう。
それまでの間、McMath-Pierce Solar Telescope 脇の小さなドーム内で 一般客向けに太陽観測を体験させてくれていた。

Hαフィルタ付きの望遠鏡で太陽フレアを観測


McMath-Pierce Solar Telescope の観測室を外から見学。ここだけは日中観測中。


午前11時30分からの2.1m反射望遠鏡ツアーに参加。


奥に見えるのが2.1m反射望遠鏡のドーム


いよいよドームの中へ。


これが2.1m反射望遠鏡。
いくつかあるCCDセンサーのピクセルはたった800X800だって。
解像度よりも感度優先だよね。


ツアーが終わったら自分たちだけで対丘にある4m反射望遠鏡まで歩いて行く。


上の画像をクリックして画像を拡大
エレベーターでドーム下の展望階へ。 ガラス越しにパノラマ撮影


更に階段でもう一階上がると4m反射望遠鏡

頂上の気温は21℃。過ごしやすくもっと長居したかったが、お腹が空いてきたためKitt Peak を後にする。
今度来るときはお弁当持参しなければ。
帰りは途中で Saguaro National Park West に立ち寄り、 サボテンの花を鑑賞。 気温は35℃。パークレンジャーによれば今年は暖かく、 いつもより2週間早く Saguaro Cactus の花が咲き始めたとのこと。







Catalina 州立公園のSaguaro Cactus には蕾もついていなかったが、 この辺りでは蕾を付けたSaguaro Cactusがかなりある。Nature Trail でなんとか Saguaro Cactus の花 を発見。


キャンプ場へ戻り、 夕食は 朝からダッチオーブンに仕掛けた豚肉のサワークラウト煮。


食後地面に desert horned lizard を発見。

見事な保護色。昨日は落ちている木の皮と見間違えた。
首周りの角がカッコイイ