Raspberry Pi でADC MCP3002 を使ってみる
Raspberry Piはデジタルセンサーだと、GPIO等で値を取得する事ができるが、アナログセンサーは、そのままでは値を取得する事ができない。
ADCでデジタルに変換した後、値を取得する必要がある。
今回、10ビット2ch ADコンバータ MCP3002 を以下から入手したので、使ってみる事にした。
10ビット2ch ADコンバータ MCP3002−I/P: 半導体 秋月電子通商 電子部品 ネット通販
データシートは以下の通り。
http://akizukidenshi.com/download/ds/microchip/mcp3002.pdf
データシートを抜粋すると、ザックリ
のような感じ。
いきなりアナログセンサーの値を変換しても、正解が解らないので、
こんな感じで変換してみる事にした。MCP3002は、Vddと入力CHのGNDが共通なので、多分、V1の値は計測できないと思う。なので、V1を計測する時は、V1とV2を入れ替えて継続する事にする。
ブレッドボードで構築。
Raspberry PiはデフォルトだとSPIが無効になっているので
/etc/modprobe.d/raspi-blacklist.conf
を編集(その前に raspi-config でspiを有効にする必要がありました。raspi3だと blacklist の編集も同時に行なってくれるようです)。
# blacklist spi and i2c by default (many users don't need them) # blacklist spi-bcm2708 # blacklist i2c-bcm2708
そして再起動。
$ ls -l /dev/spi* crw------- 1 root root 153, 0 Jan 1 1970 /dev/spidev0.0 crw------- 1 root root 153, 1 Jan 1 1970 /dev/spidev0.1
デバイスが存在している事を確認。今回は、
はてな
を参考にして、rubyで組んでみる事にした。
sudo apt-get install ruby ruby1.9.1-dev sudo gem install wiringpi pi_piper
でインストールして、プログラムは、以下のような感じで。
require 'pi_piper' PiPiper::Spi.begin do |spi| # # +----+----+----+----+----+----+----+----+ +-+-+-+-+-+-+-+-+ # | X | 1 |SGL/|ODD |MSBF|X |X |X | |X|X|X|X|X|X|X|X| # | | |DIFF|SIGN| | | | | | | | | | | | | | # +----+----+----+----+----+----+----+----+ +-+-+-+-+-+-+-+-+ # SGL/DIFF: Single End = 1 / Differential = 0 # ODD SIGN: CH0 = 0 / CH1 = 1 # raw = spi.write [0x68, 0] printf("%02x %02x -> %d\n", raw[0], raw[1], (raw[0] * 256 + raw[1]) & 0x3FF) end
実行結果は、
正解は 1.1Vと2.2Vなので、合格点で良いかな。