初版作成 2016.10
最終修正 2018.1
Raspberry Pi はデジタル入出力はできるのですが、 アナログ入力ができません。ラズベリーパイにアナログ電圧を 入力する方法について、調べてみました。
AD 変換用 IC については このサイト で 色々と紹介されています。
ラズパイと AD 変換用 IC の接続は 「I2C 接続」「SPI 接続」「bit 数 + α の個数の線で接続」 の 3 種類があるようです。
私のサイトの ここ の 「AD コンバータの使用」の項で MCP3002 という 2ch 10bit SPI 接続の AD コンバータの使い方を紹介しています。
普段、使い慣れているマイコンがある場合、 それを使うという方法があります。
ラズパイと Arduino の接続方法として「シリアル接続」「I2C 接続」 があります。
I2C 接続して使う方法は このサイト や このサイト で紹介されています。
I2C 接続には 4 本の線が必要なので、 少し面倒です。シリアル接続なら USB ケーブルで接続するだけで済みます。 USB ケーブルで接続すると、ついでに電源も供給できます。
シリアル接続して使う場合、以下のような感じでよいでしょう。
Arduino 側プログラム
Raspberry Pi 側サンプルプログラム
シリアル通信をする場合に、ややこしいのが行末のデリミタ です。改行記号を表すコードはシステムによって CR (0x0d), LF (0x0a), CR + LF と 3 種類あります。 送信側と受信側で不一致があると、 うまく動作しない恐れがあります。
自分だけが使うシステムの場合、私は CR や LF のような 目に見えない文字は使わず、デリミタ(行末を表す文字)として「$」の ような目に見える文字を使っています。 以下のような感じです。
Arduino 側プログラム
Raspberry Pi 側サンプルプログラム
以下のように接続します。
Pi Tx −−−−−−−−−−> PIC Rx +−−−− PIC Tx | 10k | Pi Rx <−−−−+ | 20k | Pi Gnd −−−−+−−−− PIC GndPIC (5V系) の出力を Raspberry Pi (3.3V系) に 入力すると、ラズパイが壊れる可能性が高いので、 抵抗で分圧しています。ラズパイの Rx 端子は 50k の プルアップ抵抗が入っているので、分圧用 抵抗は上記の値以上に大きくすると、 信号がうまく伝達されない可能性が高いです。 100k と 200k ではダメです。
ラズベリーパイ 3 で Tx, Rx 端子 を使うには
/boot/config.txt
の末尾に
dtoverlay=pi3-miniuart-bt
と付加する必要があります。
ラズパイ側のサンプルプログラムは これ です。
PIC マイコン用に私が作ったプログラムが以下です。 アナログ入力以外に、デジタルの入出力機能も持っています。
16F873A 用のアセンブラ版は、安価な C コンパイラの 存在を知らなかった 2009.10 に作ったものです。 今となっては「16F873A を持っていて、このコードを無修正ですぐ動かしたい」 場合以外は価値はありません。
16F886 用 C 言語版は安価なコンパイラである ソースブースト社のコンパイラを 購入した 2009.12 に作りました。 今は MPLAB-X に無償の C コンパイラが付属しています。 MPLAB-X でコンパイルするには、 以下の点を変更する必要があります。