[ラズパイ] ADコンバータ(ADS1115)を使ってCdsから値(電圧)を取得する

 11月4日に、遊び検証用に中国・台湾発送の色々な部品(100円~300円程度)を注文しました。また一か月程放置されるのかなぁと思ったら、11日に届いたwめちゃ早くない?今回は航空便で来ていたので早かったのか?はたまた、通関がスムーズだったのか・・・

 それでは、その中の一つADコンバータを検証してみたい。ADコンバータの種類はいっぱいあるものの、スペックで参考にするところは分解能(ビット数)とチャンネル(AD変換するライン数)の差かなぁと思っています。今回は、ADS1115を選んだけども「16bitで4チャンネルが必要か?」と言われれば特に根拠はありませんw。しいて言うなら、I2C接続って点で楽かなと思った程度。

 スイッチサイエンスさんからも同じ感じのものが発売されている。信頼性と配達の速さから考えるとこちらを選ぶほうが賢明かもしれない。私は価格の安さのみに注目します!届いた品に早速ピンヘッダを取り付ける

 この商品、SDA、SCLにプルアップ抵抗が既についている。ラズパイは内部でプルアップされているので不要であることから、除去しているブログもあった。

 まぁ、とりあえず、I2Cつないでみて認識するようなら、そのまま行くことにした。VDDに3.3V、GND、SCL、SDAを接続しI2Cで接続されているか確認する

よしっ問題ないっ!!。0x48で接続を確認したので、通信エラー云々はあるかもだけど、プルアップ抵抗はそのままで行こうと思う。

 ここまで、やって一体何のアナログ値を取得するのか?を考えてなかった。普通は「このアナログセンサーを使いたいからADCを導入しなきゃ~」なのに「ADCを使う為に、アナログ出力のものを探そう」という真逆発送!使わなくなった電子部品やゴミのような部品が入った箱をゴソゴソゴソゴソ・・・

Cdsセンサーぁぁ!!なんかきたねェww

何に使ってたのか、いつからそこに入ってたのかすらわからないけど、とりあえずあった。でもゴミ部品箱に入ってたのであやすぃ。ちゃんと動くのかまず動作確認。まずCdsのデータシートから10kΩ(明)~1MΩ(暗)で抵抗値が変化するとのこと。アナログ値では電圧の変化で取得するために分圧回路を組み電圧の変化が起こるようにする。

上のサイトを参考にして、下のサイトで計算してみる。

上のサイトで分圧抵抗値を計算。手持ちの抵抗が100kΩだったので100kΩで計算してみる

 参考サイトでは70kΩで分圧して接地側(R2)にCdsをつけているので、暗い時に電圧を出力する回路となっている。今回は明るい時に3V付近。暗い時に0V付近で出力させてみたい。R1にCdsを付けて、R2に抵抗(100kΩ)を設定した。計算上で0.3V(暗)~3.0V(明)で電圧が変化するみたい。実際にブレッドボード上で組んでやってみた。

室内の照明で2.3-2.5V。Cdsにキャップをかぶせると0.02V、LEDの懐中電灯をピンポイントで照射すると3.0Vとなった。

秋月さんのデータシートをみたけど

 明抵抗・暗抵抗の測定にはしっかりとした条件があるみたいで、正確に10ルクスを出力できる機器がない以上、正確な数値はわからないけど、室内の明るさの範囲で抵抗値が変化すればいいこととした。照度換算する場合とかは、型番をしっかりと特定する必要があるよね。

 やっとADコンバータの出番。このADコンバータを使うにあたり、今回は最初からライブラリを使っていこうと思うw。けっして、INA260の時みたいに途中でめんどくさくなったわけではないっ!!このライブラリは、とても便利だったから、是非使ったほうがよさげ。

古いライブラリもあったが利用は勧められないと書いてあったので、こちらの新しいほうのライブラリを使っていく。まずは、

でインストールを行う。

 接続は、I2C接続(VDD=3.3V,SCL、SDA、GND)とラズパイ。ADコンバータのA0に、先ほど電圧を測定したVOUTを接続、GNDも接続する。このADコンバータはA0、A1、A2、A3の4チャンネルの電圧を測定(SingleEnded)と、A0-A1、A2-A3間の2チャンネルで差動を測定する(Differentianl)があり、今回はSingleEndedユースなので、サンプルコードのままでいい。

 Usage Example Single Endedのサンプルコードを実行する(examplesの中にも入っている)。すると、出力にアナログの生データと計算され電圧が0.5秒毎にでる。

これで当初の目的は達しているんだけど、このADコンバータはGAINが設定されていて

GAIN 電圧
2/3 ±6.144
1 ±4.096
2 ±2.048
4 ±1.024
8 ±0.512
16 ±0.256

 上の通りにGAINの設定値で扱える電圧の範囲が違う(精度が違う)みたいで、ライブラリにあるexamplesのads1x15_gain_example.pyを実行してみるとわかるらしいので、部屋の明るさを変えながら測定してみた。

 左から、2/3、1、2、4、8、16のGAIN設定に対応した値である。GAINが大きくなる度、精度は上がり測れる電圧の範囲は狭まるので、3.3Vの入力電圧で計測する今回のケースはGAIN=1でよいことになる。ちなみにGAIN値を設定しなければデフォルト値は1とのこと。例えば、5Vの入力電圧で出力も4Vを超えるようなときは、2/3にしたほうが良いのかな。

 とりあえずは、Cds・ADCを使って、部屋の明るさの変化を取得することができた。