Raspberry Pi トライ日記

Raspberry Pi トライ日記

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

自分の部屋の温度をロギングしてみました。

2014-03-02 22:00:54 | 日記

温度センサー(MCP9700)とADコンバータ(MCP3002)で部屋の温度を5分ごとに測定し、Raspberry Pi上のハードディスクに記録するシステムを作りました。Raspberry piにSAMBAを導入し、windows7から温度データを記録したtxtファイルを読み取れるようにしました。 また、タブレットとRaspberry piをVPN接続し、外出先から部屋の温度をチェックできるようにしました(^^)。

→ VPN接続方法はこちらを見てくださいね。http://blog.goo.ne.jp/fdfpy/e/171c6b863527c12f87b0dac80dd3b973

 真冬でも部屋の温度が10℃を切ることがないようです。自分の家のマンションは暖かいようですね。

 

 

手順1  回路配線


 

(図1)に倣って回路配線を行ってください。簡単にいいますとアナログ温度センサーからの出力電圧をAD変換し、SPI通信にてRaspberry Piに転送するという構成になっています。簡単ですね^^。

 

(図1) 回路図

 

手順2  SPI通信


SPI通信を行うためには、Raspberry PiにSPIドライバをインストールする必要があります。SPIドライバのインストール方法はこちらのサイトをご覧ください。

http://www.pwv.co.jp/~take/TakeWiki/index.php?raspberrypi%2FSPI%E3%82%92%E8%A9%A6%E3%81%99

 

(1)SPI通信の方式(MCP3002の仕様書より取り出したものです。)

I2C形式と異なり、SPIは通信に4線が必要です。   入力信号 : CS , Din , SCLK , 出力信号 : Dout  

 

(図2)

 

 

(2)SPI通信を行うプログラム(Pythonで記述しています。)

ファイル名:spy.py


import spidev
import datetime
import locale
import time

i=0         #繰り返しを制御する変数
d0=0     #MCP3002から出力されたAD変換結果
v0=0     #MCP3002に入力されたアナログ電圧
t0=0      #室内の温度
d1=0     #日時,時刻を記憶する。


spi = spidev.SpiDev()
spi.open(0,0)
f=open("/home/pi/share/tmp1.txt","w")
f.close()

while i        # read SPI data from MCP3002 chip
        def get_adc(channel):
 
                if ((channel > 1) or (channel < 0)):    #channelは0 or 1のみをとります。
                        return -1
               

                r = spi.xfer2([1,(2+channel)<<6,0])      #(*1)を参照  

                ret = ((r[1]&31) << 6) + (r[2] >> 2)    #(*2) を参照  
                return ret
        i=i+1

        d0=get_adc(0)                                     #AD変換値です。
        v0=get_adc(0)*3.3/1024                            #MCP3002に入力されたアナログ電圧です。
        t0=(get_adc(0)*3.3/1024-0.5)/0.01                 #室内の温度を計算しています。
        d1=datetime.datetime.today()                      #データが取得された時刻を表示します。

        print 'ADC=%s'  % (d0)
        print 'VOL=%s'  % (v0)                            #input voltage
        print 'TEMP=%s' % (t0)                            #temperature
        print 'd == %s : %s\n' % (d1, type(d1))           #time now
        f=open("/home/pi/share/tmp1.txt","a")             #データを書き込むファイルを追加モードで開きます。
        f.write('ADC=%s   '  % (d0))
        f.write('VOL=%s   '  % (v0))
        f.write('TEMP=%s   '  % (t0))
        f.write('d == %s : %s\n   ' % (d1, type(d1)))
        f.close()                                         #ファイルを閉じます。
        time.sleep(300)                                 #5分ほど待ちます。


 

ファイル名 temp.py


 

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(25,GPIO.OUT)

GPIO.output(25,GPIO.HIGH)

import spi

GPIO.cleanup()


 ☆ 注釈 ☆

(*1)

spi.xfer2[1,2<<6,0] の意味

Rasp Pi → MCP3002  方向に   00000001 11000000 00000000   を送信します。(送信)

MCP3002 → Rasp Pi   方向に   aaaaaaaa bbbbbbbb cccccccc   を送信します。(返信)

#a,b,cは0 or 1です。 r[0]=aaaaaaaa , r[1]=bbbbbbbb , r[2]=cccccccc となります。

(*2)
 r=aaaaaaaa bbbbbbbb cccccccc  (☆)   

(図2)のSPI通信の通信形式にしたがうと、(☆)の赤の下線で示した10bitが必要な値(AD変換値)となります。 必要な部分のみを抜き出し、変数retを計算しています。

 

 ☆ 実行結果 ☆

 

 temp.pyを実行し、実行時にspi.pyを読み込みます。 室温の温度は17.998℃と表示されました。

 

 上記プログラムを作成するのに下記3つのサイトを参考にさせていただきました。

https://sites.google.com/a/joekamphaus.net/raspberry-pi-spi-interface-to-mcp3002/

http://www.pwv.co.jp/~take/TakeWiki/index.php?raspberrypi%2FSPI%E3%82%92%E8%A9%A6%E3%81%99

http://avr.gawakaru.jp/archives/tag/raspberry-pi-2

 

 

ジャンル:
ウェブログ
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« USBテレビチューナー | トップ | 液晶(M018C7735SPI)  »
最近の画像もっと見る

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL
  • 30日以上前の記事に対するトラックバックは受け取らないよう設定されております。
  • 送信元の記事内容が半角英数のみのトラックバックは受け取らないよう設定されております。
  • このブログへのリンクがない記事からのトラックバックは受け取らないよう設定されております。
  • ※ブログ管理者のみ、編集画面で設定の変更が可能です。