著者:米田 聡
小型コンピュータボード「Raspberry Pi」(ラズパイ)向けにさまざまな拡張ボードが発売されています。その拡張ボードとラズパイを組み合わせれば、ラズパイでいろいろなことが簡単に試せます。第12回は、電流を測定するクランプメーターを搭載する拡張基板を扱います。
シェルスクリプトマガジン Vol.79は以下のリンク先でご購入できます。![]()
![]()
図6 本連載で作成したサンプルプログラム(sample.py)
import time
import board
import math
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.ads1x15 import Mode
from adafruit_ads1x15.analog_in import AnalogIn
GAIN = 1
RATE = 860
i2c = busio.I2C(board.SCL, board.SDA, frequency=1000000)
ads = ADS.ADS1115(i2c, GAIN)
# 差動入力で初期化
in0 = AnalogIn(ads, ADS.P0, ADS.P1)
# 連続モードの設定
ads.mode = Mode.CONTINUOUS
ads.data_rate = RATE
SAMPLE_INTERVAL = 1.0 / ads.data_rate
# ADS1115のCONTINUOUSモードは初回読み取り実行後に設定が行われ
# 設定に2サンプリングクロックが必要になる
_ = in0.voltage # 設定用の空読み込み
value = 0.0
current_value = 0.0
sqrtI = 0.0
time_next_sample = time.monotonic() + SAMPLE_INTERVAL
for i in range(ads.data_rate):
while time.monotonic() < (time_next_sample):
pass
# 前回と同じ値が読み取られた場合は読み飛ばす
current_value = in0.voltage
while current_value == value:
current_value = in0.voltage
value = current_value
sqrtI += value * value
time_next_sample = time.monotonic() + SAMPLE_INTERVAL
# 電流値(RMS)の計算
ampere = math.sqrt(sqrtI/ads.data_rate) * 20.0
print(ampere)