背景
ホビーユースの基板ではセンサーと基板間の通信にI2Cを使ったものがあります。I2Cは手軽で良いのですが、本来は基板内やボックス内での通信を念頭に置いたもので、数メートルのI2Cケーブルを引き回すというのは本来の使い方とは異なるようです。
ただ、それでも使いたい場合もあると思います。近くになにもノイズ源がなければ、2mくらいまではあまり問題なく通信できると思いますが、例えば最近流行りのIoT用途だと、機器周辺の温湿度などを計測することもあり、機器の動力線などノイズ源が近くに通ってると一発でノイズが乗ります。その場合の対策を考えてみました。
ちなみに使った基板はSeeed社が開発しソラコムが販売するWio LTE JP Version
センサーはSHT35(温度・湿度)とBMP280(気圧)です。いずれもI2Cで通信します。
ノイズ源の対策
まずはノイズを発生している動力線は強力なノイズ源となります。いろいろ調べているとアルミや銅がノイズを遮断する機能があるとわかりました。ちなみに、このアルミをアースする必要性ですが、アースするとかなり強力なノイズ遮断能力を発揮しますが、アースしなくても結構遮断してくれます。
これで動力線の、信号線と近くなる付近を巻いて、そこからノイズが出ないようにします。
この時点で効果が感じられ、I2Cの線が50cm程度であればノイズが乗ることなく通信できました。ただ2mとか5mとかになると、やっぱりノイズが乗りました。
ちなみにアルミテープで巻いた後は上から絶縁テープで巻いてアルミが表面に出ないようにしておかないと、最悪、基板や端子などに触れてショートするかもしれませんのでご注意ください。
上の写真は、アルミテープで巻いた上から途中まで絶縁テープを巻いたところ。
信号線の対策
私は基板にSeeed社が開発したWio LTEを使っていました。これはGroveという規格?のコネクタになっており、ネットで購入できるものは50cmか20cmでした。これを今までは4芯の信号線を使って延長していました。
しかしノイズが乗ってセンサーとの通信が途切れたりするため、なにかノイズに強い線が無いか探していたところ、LANケーブル、とくにカテゴリー6AのLANケーブルが強いということがわかりました。さっそく近くの100満ボルトに行ってかったものがこちら。
ご覧の通り、2本づつ4組ある線がそれぞれアルミでシールドしてあり、さらに外側を銅でシールドしてあります。
これの両端を切ってGroveの線にハンダ付けしました。つなぐ線はどういう組み合わせでもいいのですが、両端が同じ組み合わせになるようにします。ちなみにこれ、写真で見ると所々ヒゲが出てますね...
注意点として、必ずストレートケーブルを買ってください。クロスだと最悪基板かセンサーが壊れると思います。
訂正: ケーブルのクロス・ストレートは特に気にしなくても大丈夫です。 @n2naokunさん、コメントいただきありがとうございます!
ハンダに関しては不慣れだったので、こちらのサイトでやり方を勉強してからやりました。
ハンダで配線同士を接続する方法
スリーブがあればいいのですが、なかったので絶縁テープで巻いてインシュロックで固定しました。
この写真はインシュロック固定前ですが。
これ使ってみたところ、5m以下であれば先ほどのアルミテープでノイズ対策した動力線の近くを通っても問題なく通信できました。10mは無理だったので、まあ5m以下でやってみるのがいいかと思います。1,2mならかなりノイズに強いと思います。