SPIによるADC(Analog-Digital Converter)の接続

コメントをどうぞ


ラズベリーパイによるディジタル入出力について,

こじ研さんのページ(Raspberry Pi応用編)

が非常に参考になった。例題を順々に実行することで,勉強になった。

ただ,「SPIによるADCの接続」について,SPI通信がうまくいかなかった。カーネルのバージョンの問題なのか原因は不明。
他に,BCM2835 libraryを用いる方法も試みたが,やはりうまくいかない。

cat /proc/version
Linux version 4.1.13-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease)

いろいろ試みた結果,PythonからSPIデバイスを操作するためのpy-spidevを用いた方法でうまくいった。

参考にしたページ

  • Qiita 「Raspberry PiのPythonからTMP36のアナログ温度センサとMCP3008のADコンバータを使う」
  • Analogue Sensors On The Raspberry Pi Using An MCP3008

接続の構成

  • Raspberry Pi 2 model B
  • MCP3208(12 bit ADC)
  • LM35DZ(温度センサ)

配線は,以下のようにした。

上記の参考ページのプログラムは,10bitのADCであるため,12bitに変更したプログラムを以下のように作成した。

import spidev
import time
import os

spi = spidev.SpiDev()
spi.open(0,0)

def ReadChannel(channel):

adc = spi.xfer2([(0x07 if (channel & 0x04) else 0x06), (channel & 0x03) << 6, 0])
data = ((adc[1] & 0x0f) << 8 ) | adc[2]
return data

def ConvertVolts(data,places):

volts = (data * 3.3) / float(4095)
volts = round(volts,places)
return volts

def ConvertTemp(data,places):

temp = ((data * 3.3)/float(4095)*100)
temp = round(temp,places)
return temp

temp_channel = 0

delay = 5

while True:

temp_level = ReadChannel(temp_channel)
temp_volts = ConvertVolts(temp_level,3)
temp = ConvertTemp(temp_level,2)
print “——————————-”
print(“Temp : {} ({}V) {}degC “.format(temp_level,temp_volts,temp))

time.sleep(delay)

spi.xfer2では,3バイトの信号を送信する。こじ研さんのページが詳しかった。

000001,SD,D2, D1,D0,000000,  00000000

SDはシングルエンド・差動の選択,D2D1D0はチャネルの選択。

本プログラムを実行した結果は,以下のようになった。

MCP3208,LM35DZの出力結果

MCP3208,LM35DZの出力結果

ラズベリーパイにSSHでリモート接続

コメントをどうぞ


Raspberry pi 2 model Bを購入。
ディスプレイやキーボードを接続して使用するのは面倒なのでWindowsから,SSHでリモート接続する設定を行った。
「うしこlog」さんのページ(ラズベリーパイにSSHでリモート接続)の通りに作業を進めれば,うまくできた。
備忘録として,概要を記す。


ルーターで固定IPを割り当て

ラズベリーパイのMACアドレスとサブネットマスクを調べる。
ラズベリーパイのTerminalで,
 ifconfig
と入力。
Windowsを使って,ルータから固定IPアドレスをラズベリーパイに割り当てる。
ブラウザを立ち上げて,「192.168.10.1」にアクセス(このアドレスはルータによって変わる)。

DHCP固定割当

図1  固定IPアドレスを割り当て

図のように,詳細設定から「DHCP固定割当設定」に入り,先ほど調べたラズベリーパイのMACアドレスを登録し,IPアドレスを設定する。ここでは,「192.168.10.8」とした。

 


ラズベリーパイでネットワーク設定

ラズベリーパイのTerminalで,
sudo nano /etc/network/interfaces
と入力し,

manual -> static
address 192.168.10.8 (図1で設定したIP)
netmask 255.255.255.0
gateway 192.168.10.1

と変更および追記する。そして,
sudo reboot
で再起動。


SSHでリモート操作

フリーソフトであるTeraTermを用いる。ラズベリーパイに割り当てたIPアドレスにSSHでアクセスする。
ユーザー名とパスワードを入力すると,無事,リモートログインできる。

teraterm_capture

図2  TeraTermの接続画面


ラズベリーパイにGUIでリモート接続する方法

  1. Windowsに,VNC-Viewerをインストールする(ダウンロードしたexeファイルを都度実行する)。
  2. ラズベリーパイに,tightVNCをインストールする。
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install tightvcnserver
  3. tightVNCを実行する。
    Terminalで「tightvncserver」または「vncserver」と入力。初回は通信のためのパスワードを設定する。そして,「New ‘X’ desktop is raspberrypi: 」の後の番号を確認する。
  4. VNC-Viewerを起動する。
    IPアドレスと,tightVNCでの番号を指定する。
VNCserver_capture

図3  TeraTermとVNC-Viewerの設定画面