著者:米田 聡
小型コンピュータボード「Raspberry Pi」(ラズパイ)向けにさまざまな拡張ボードが発売されています。その拡張ボードとラズパイを組み合わせれば、ラズパイでいろいろなことが簡単に試せます。第12回は、電流を測定するクランプメーターを搭載する拡張基板を扱います。
シェルスクリプトマガジン Vol.79は以下のリンク先でご購入できます。
図6 本連載で作成したサンプルプログラム(sample.py)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
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) |