Outline
raspberryPiを使ってアナログ入力を取得するために
ADDA変換モジュールADS1115を使って値を取得する。
Output
Hardware setup
Raspberry-pi | 配線 | ADS1115 |
---|---|---|
01 3.3V | <-> | VIN |
03 5V | <-> | SDA |
05 5V | <-> | SCL |
09 GND | <-> | GND |
A0:チャンネル0 | ||
A1:チャンネル1 | ||
A2:チャンネル2 | ||
A3:チャンネル3 |
※ADコンバータは
A0、A1、A2、A3の4チャンネルの電圧を測定(SingleEnded)と、
A0-A1、A2-A3間の2チャンネルで差動を測定する(Differentianl)がある
Software setup
install
sudo pip3 install adafruit-circuitpython-ads1x15
sudo pip install adafruit-ads1x15
ディレクトリ構成 Github
home/
├ adafruit_ads1x15\
│ └ ads1x15 #ライブラリ
└ ads1115_example.py #exampleコードを複数チャンネル入力対応に改変
code
ads1115_example.py
import time
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
# Create the I2C bus
i2c = busio.I2C(board.SCL, board.SDA)
# Create the ADC object using the I2C bus
ads = ADS.ADS1115(i2c)
# Create single-ended input on channel 0
chan0 = AnalogIn(ads, ADS.P0)
chan1 = AnalogIn(ads, ADS.P1)
chan2 = AnalogIn(ads, ADS.P2)
chan3 = AnalogIn(ads, ADS.P3)
print("{:>5}\t{:>5}".format("raw", "v"))
try:
while True:
print("cahn0: {:>5}\t{:>5.3f}".format(chan0.value, chan0.voltage))
print("cahn1: {:>5}\t{:>5.3f}".format(chan1.value, chan1.voltage))
print("cahn2: {:>5}\t{:>5.3f}".format(chan2.value, chan2.voltage))
print("cahn3: {:>5}\t{:>5.3f}".format(chan3.value, chan3.voltage))
print("")
time.sleep(0.5)
except KeyboardInterrupt:
pass
参考 ゲインの設定
詳細はデータシートを参照
GAIN | 電圧 |
---|---|
2/3 | ±6.144 |
1 | ±4.096 |
2 | ±2.048 |
4 | ±1.024 |
8 | ±0.512 |
16 | ±0.256 |
※APIを使ったゲイン設定も存在するようなのでそちらを使用するとシンプル。
「ゲイン1」の時の、「受信データ1単位」の電圧を計算します
「ゲイン1」の範囲はプラス・マイナス 4.096なので、8.192になります
RANGE = 4.096 * 2
ADS1115は上記範囲を16bit(65536)で表すので、上記範囲を65536で割ると、ADSのデータ「1」につき、電圧は0.000125[V]になります。
8.192/65536=0.000125
run
python3 ads1115_example.py
結果
ads1115_example.pyの出力
cahn0: 26380 3.297
cahn1: 13202 1.650
cahn2: 4823 0.605
cahn3: 4817 0.604
各チャンネルの出力が確認できました。
以上