Let's play 般若心経

研究日記です。

センサの左右を判別する方法

10/3(火) 久しぶりの研究日記 鬱です

抵抗を使用する方法

コントローラにはセンサを2つまでつけることができますが、センサの種類だけがわかって左右どちらについたのかはわからないのです。

ぷちコンに応募したときは、照度センサと温度センサだったら照度が左で温度が右、のようにI2Cアドレスが大きい方が右みたいにしてました。なので、動画では左右逆にならないようにセンサを付け替えています。


これの解決方法として、センサとコントローラを接続するピンを5ピンに増やします。(VIN, GND, SDA, SCL, 抵抗)

コントローラ側で左右に違う値の抵抗を用意し、センサ側にもセンサごとに違う値の抵抗を用意します。接続したときはこの抵抗の和を通る電流をアナログピンで読み取ります。

この方法の欠点としては組み合わせを考えるのが大変なこと、アナログピンの読み取り精度が悪いと誤認すること(これはI2Cアドレスが分かるのである程度リカバリ出来る)、センサを作るのが大変になることです。
抵抗をたくさん用意する必要が出てきますし、組み合わせを作るのに抵抗の並列接続とかやりたくないです。

ソフトウェアI2Cを使用する方法

ArduinoやESP32には、ハードウェアI2CというデフォルトでSDA, SCLに割り当てられたピンがあると思います。それとは別のピンをI2Cで利用できるようにしたものをソフトウェアI2Cと言います。

ソフトウェアI2CはハードウェアI2Cより応答速度が遅いですが、この記事によると誤差みたいです。

よって、ソフトウェアI2Cを左、ハードウェアI2Cを右、のようにすれば解決です。I2Cを使う意味があまりなくなっていますが、気にしません。

明日は実際にソフトウェアI2Cを使ってみます。ハードウェアI2Cと同時に使えるのかも疑問です。