趣味の電子工作で、以前はパーツを集めてゼロから作っていました。最近では動作に必要なモジュール基板を購入し、それらを配線して出来上がりみたいな感じになっています。ゼロから作る事って殆どありません。
最近作ったのは電流計(データーロガー)です。とある省エネ型の電子回路で、数秒間隔で起動し作業が終わったらスリープに入り電力を消費しないもの。稼働・スリープを繰り返すので電流はパルス状。この回路の平均消費電流を正確に計測するとなると非常に大変で。とりあえず容量の分かっているバッテリーで稼働させ、終了後のフル充電量で推測しています。
これだと精度が低いので銅の電気分解(?)を利用した銅クーロメーター(1クーロンで 0.3294mg の銅が析出)を作ってみようかと思った事も。
1クーロン → 1アンペア秒 なので、例えば平均電流が 50mA の回路を 14時間稼働させると 0.05A*3600sec*14hr → 2520クーロンになり、銅クーロメーターだと陰極板の銅が 2520クーロン*0.3294mg → 0.8301g重くなることになります。できそうだな〜と思っても、私が使っている秤の最小単位は 0.01g。電極の銅板は数十グラムでミリグラムの重量変化を計測。自宅じゃ無理ですな、となった訳です。
以前はGRAPHTEC社の GL200 を使っていたのですが、これ一番早いサンプリングが 0.1秒なんです。これじゃパルス状の電流変化には無理。しかも14時間連続ならサンプリング数は50万以上になってしまいます。
そんな訳で電流計を自作する事に(前振りが長いな〜)。で電流計に使おうと思ったモジュールは INA219 です。
これが完成した電流計になります。サンプリング周波数は 310Hz で5秒間の最大・平均.最小値を5秒間隔でSDカードに保存します。ローパスフィルターでナイキスト周波数の 150Hz まで落としての計測です。電源にはダイソーのモバイルバッテリーから取り外した 10000mAh の Li-Po バッテリーを積んでいるので1週間程度は連続計測できそう(ゴメン、まだ前振りでした)。
写真の破線赤丸部分がINA219電流センサーモジュールで秋月電子から購入した物。なかなか便利でもう何個かあっても良いよな〜と思うような物。でも一個千円は..... という事でいつもの中華製。Amazon で検索したら5個 電流センサーモジュール GY-INA219 が見つかりました。5個で ¥2201 は安いです。早速注文。
届いた物なんですが、 I2C に反応しないものが1個に、計測値がデタラメな物が3枚、残り1枚は計測値が全く動かない物(これもデタラメになるか!)。で、5枚とも全部不良品でした。
気になったのが I2C に反応しない物。ひょっとして I2C アドレスが違っているのでは。と思い I2cScanner で調べて見る事に。
秋月電子から購入した物
I2C Scanner
Scanning...
I2C device found at address 0x40 !
done
Amazon から購入した物
I2C Scanner
Scanning...
I2C device found at address 0x20 !
I2C device found at address 0x40 !
I2C device found at address 0x60 !
done
なんと I2C アドレスが3個もあります。やっぱり変でした。 I2cScanner を見ると書き込み側のアドレスを送っているだけのようです。なら読み込みは?
I2C スキャナー、なかなか面白いですね。でも使う度にブレットボードに組み上げるのも面倒。という事で専用の I2C スキャナーを作ってしまう事に。
ようやく本題に入ります。I2C スキャナーはそう頻繁に使うものでもありません。またスケッチも ArduinoIDE の Wire サンプルにあり、ブレットボードに数分で組み上げる事ができます。なので I2C スキャン専用機は有れば便利だが、無くてもそう困らない程度の物と言うことを最初にお話ししておきます。
● I2C スキャナーの回路図
パーツ箱を見たら ATtiny85 が目にとまったので、これを使う事に。使う度に iMac に接続するのも面倒なので SSD1306 OLED のディスプレイにスキャン結果を表示させて見ましょう。 SSD1306 OLED は I2C デバイスなので同じ I2C バスでスキャンしたら SSD1306 のアドレスも表示してしまいます。そこで I2C バスを計測結果の表示用とスキャン用の2系統に分ける事にしました。計測結果の表示用に使う SSD1306 は ssd1306xled ライブラリーを使って動作させ、スキャン側の I2C バスは SoftI2C ライブラリーを使う事に。
これが回路図になります。ディスプレー側の I2C バスには PB0(SDA), PB2(SCL) を使用し。スキャン側の I2C には PB4(SDA), PB3(SCL) を使っています。後は、いつでもプログラムを変更できるよう ICSP を取り付けています。スキャン側の I2C の端子に関してですが、手持ちの I2C モジュールを調べたら、電源・グランド・SDA・SCL の並びに3種類ある事が判りました。そこで電源 Vcc とGND の切り替えと SDA と SCL を切り替えるスイッチを取り付けています。
● I2C スキャナーの配線図
これが配線図になります。秋月電子の片面ガラスコンポジット・ユニバーサル基板 Cタイプ に丁度収まるようにしています。バッテリーの充電モジュールは基板の裏側に取り付けています。
ICSP に AVR ISP MKII を接続すると電源オフでもプログラマー側から電源が供給され接続しっぱなしでも動作します。プログラム開発に便利。回路の消費電流は 10mA 弱です。
● I2C スキャナーの完成品
これが完成品になります。文字もレーザーで彫刻しているので、いつものケースより進化しています。
表示しているスキャン結果は中華製リアルタイムクロック(DS3231) モジュールの I2C アドレスになります。DS3231 のアドレスは 0x68 で、0x57 は同じ基板に乗っているシリアル EEPROM(AT24C32) のアドレスになります。先に紹介した I2cScanner は書き込みアドレスだけのスキャンですが、今回は Read と Write の両方をスキャンしています。
● 動作不良モジュールのスキャン結果
これが不良品 INA219 モジュールのスキャン結果です。表示を見ると Write だけしかありません。Read には応答してくれないモジュールのようです。本来は 0x40 の一つだけなのですが。3つアドレスがある時点で.....
発売元に資料を送ったのですが1週間経っても音沙汰無し。コリャ返品だな!
以上
P.S.
今回作った I2C スキャン専用機ですが。 ICSP から別のスケッチを書き込んで遊んでいます。I2C スキャンなんて普段は使いませんからね! まるで ATTiny85 版の M5Stack です。
P.S.2
不思議な事。スキャンする I2C バスでモジュールから GND 線を外しても正常な結果(アドレス)が帰って来ます。Vcc, SDA, SCL が接続されているので、SDA か SCL のどれかから GND に回り込んでいるんでしょうね( DS3231 モジュールだと一瞬だけ LED が点灯するので)。
P.S.3
モジュールのパワーラインに容量の大きいセラコンが取り付けられているとブラウンアウトリセットがかかり再起動。いちいち再スキャンボタンを押さなくてもスキャンしてくれるのはラッキーです。そういえば 2.7V の BOR フューズ掛かっていたままでした。
P.S.4
スキャン用 I2C バス、切り替えスイッチを間違えると電源が逆接続になってしまいます。心配なので Vcc に 100mA のポリスイッチを取り付けて見ました(回路図&配線図の緑丸部分)。これで少しは安心。