先日書いたMCP3002でのアナログ入力方式で照度センシング基板を作った。
今回、片面基板の銅箔面に部品を載せる方法にした。両面基板は以前にも書いた様に、CNCで切削するには位置合わせが面倒なのだ。
多チャンネルが不要なら、MCP3002で作る方がかなりシンプルになる。
先日書いたMCP3002でのアナログ入力方式で照度センシング基板を作った。
今回、片面基板の銅箔面に部品を載せる方法にした。両面基板は以前にも書いた様に、CNCで切削するには位置合わせが面倒なのだ。
多チャンネルが不要なら、MCP3002で作る方がかなりシンプルになる。
Raspberry Piでのアナログ入力方法として、OpenStickを用いる例を先日書いたが、今回はA/D変換ICを用いる正統派の方法を試してみた。
使用したのは秋月電子で¥200のMCP3002。アナログ入力が2CHあり、SPIでRaspberry Piと接続する。
回路図
Raspberry Pi側の準備
こちらを参考に設定した。
お試し
次のスクリプトをspiread.pyという名前で作成。
#!/usr/bin/env python # _*_ coding: utf-8 _*_ import spidev import time CE=0 spi = spidev.SpiDev() spi.open(0,CE) while True: retspi = spi.xfer2([0x68,0x00]) value = (retspi[0]*256+retspi[1]) & 0x3ff print value time.sleep(1)
実行結果(可変抵抗でアナログ値を変化させながら実行した例)
$ ./spiread.py 0 0 128 292 489 1023 1023 1023
Raspberry PiのSPIはCE0とCE1端子を用いて2個のSPIデバイスを個別に使用できる。これをスクリプト中では変数CEで指定している。
spi.xfer2()に渡している0x68はMCP3002に対し、「シングルエンド動作」、「アナログ入力CH0を使用」、「MSPから出力」 を設定している。 変換結果は配列retspiに2バイトで入るので、連結して下位10ビットを取出した後、print文に渡している。
なおspi.xfe2()に渡す値0x68を0x78に変更するとCH1入力を使用する事になる。
OpenStick方式と比べると・・・