水位センサーXKC-Y25とオープンコレクタ入力

 水位センサーについてはUECS Piで肥料管理機を作る③で触れました。今回はXKC-Y25という非接触式液体レベルセンサを入手しましたので検証結果を報告します。

非接触式液体レベルセンサー XKC-Y25-V(左)とXKC-Y25-PNP(右)

このセンサーを使用すると下の図のように水槽の壁面に貼り付けて液体に接触せずに水位を検知出来ます。(金属の水槽はだめ) 機械式に比べて設置が簡単だし、水漏れ、腐食の心配もないので便利だと思います。

XKC-Y25取付例 データシートより
ネットショップの商品説明https://ja.aliexpress.com/item/32623722632.html

さて、XKC-Y25ですがネットで検索すると3種類あることがわかります。XKC-Y25-V、PNP、NPNです。(データシートのT12VはVではないかと思います) 詳しい説明が書いていませんので今回は2種類(VとPNP)を買って試してみました。ポイントはオープンコレクタという接続方式で、PNPとかNPNとかのモデルの違いで差があるのかということです。

オープンコレクタって何?

簡単にいうとトランジスタを使ったスイッチ回路で、アウトプットがトランジスタのコレクタに接続されているのでそのような名称です。

詳しくはこちらを参照→オープンコレクタとは?接続方法とNPNとPNPの違いについてhttps://ana-dig.com/open_collector/ これは概念図であり、実際のセンサーの回路とは異なります

トランジスタは、上の図でB(ベース)に電圧がかかるとC(コレクタ)とE(エミッタ)が接続された(スイッチが入った)状態になります。スイッチが入った状態のとき、NPN型ではOUTの端子はGNDと同じ電位になり、PNP型ではVccと同じ電位になります。OUTをRaspberry PiなどのGPIOに接続すればセンサーのスイッチがオンになっているのかオフになっているのかがわかるという仕組みです。

XKC-Y25-PNPの場合

PNP型からテストしてみましょう。ケーブルは4本あり、VCCには電源5V~12Vを入力します。(T12Vのデータシートでは5~24Vになっている?)  Raspberry Piでは5V電源に接続すればいいでしょう。MODEは、水を検知したときにオンにするかオフにするかのモード切替で、VCCかGNDのどちらかに接続します。PNP型では、オンの状態でOUTはVCCと同じ電圧(つまり5V)になります。
XKC-Y25のケーブル

OUTの電圧が5VなのでRaspberry PiのGPIOに接続するには、3.3V以下に落とす必要があります。
 <GPIO入力仕様>
  ・電圧:Low 0~1.19V, High 1.34~3.3V
  ・電流:0.5mA以下推奨(数十kΩのプルアップ/ダウン抵抗)

下の図で、5Vの入力電圧が3Vになるはずです。(ちなみにGPIOに流れる電流は5V÷20KΩで0.25mAの想定)

5Vを3VにしてGPIOに入力する分圧回路(ピン1がVCC、ピン2がOUTに相当する)

ブレッドボードに配線して試してみましょう。上の写真はXKC-Y25-Vがオフの状態で、電圧計は0Vです。下の写真は樹脂製の容器に水を入れて近づけ、オンになった状態です。センサーのLEDが点灯し、電圧計は3Vになっています。想定通り動いたようです。
ブレッドボードに配線したところ。XKC-Y25-Vのケーブル赤(本体は茶)はVCCで5V、黄色はOUT、青はGND、黒はMODEで5Vに接続(センサーが水を検知したときOUTに電圧が出る)。Raspberry Pi Zero Wのピン4(5V)とピン6(Ground)をブレッドボードの電源線に接続。ピン16(GPIO4)を分圧抵抗(20KΩと30KΩ)の中間に接続。電源はUSB電源をブレッドボードに配線して5Vを給電している。上の写真がXKC-Y25がオフの状態。下の写真は水を入れた容器に近づけてオンになった状態。

UECS Piの設定画面です。デジタル入力(DIN)センサ画面で設定します。ブレッドボードに配線したGPIO4をINPUTにします。REGISTANCEはオフにします。分圧抵抗でGNDにプルダウンされていますし、プルアップまたはプルダウンを指定するとRaspberry Pi内部の抵抗が接続されて分圧抵抗に影響するのでオフに設定したほうがいいです。
UECS PIのデジタル入力(DIN)センサ設定画面とトップ画面でセンサーを表示した

XKC-Y25-Vの場合

前項と同じ回路にXKC-Y25-Vを接続してみるとセンサーがオンの時、GPIOへの電圧は2.4Vぐらいになります。このままでもGPIOは1.34V以上でONと判定しますからこのままでも使えるのですが、3Vを出すためにはどうしたらいいかを考えてみます。

原因はXKC-Y25-VはNPN型であることのようです。オープンコレクタの説明の項に示した回路で、NPN出力ではセンサー回路がオンの時にGNDに接続されると説明しましたが、オフの時はVccにもGNDにも接続されず不定(宙ぶらりん)の状態になります。XKC-Y25-Vの仕様ではVCCと同じ電圧を出力することになっているので、センサーの内部回路でOUTは抵抗を挟んでVCCに接続(プルアップ)されています。試してはいませんが、XKC-Y25-NPNを使用する場合はセンサーの外側でプルアップしてやる必要があると思います。(注意)XKC-Y25-VでOUTをGPIOに分圧抵抗を入れずに直接接続するとGPIOに5Vの電圧がかかり、Raspberry Piを壊すかもしれません。

ネットショップの商品説明https://ja.aliexpress.com/item/32623722632.htmlより。左がXKC-Y25-V、右がNPNと思われる。ショップの説明では左を「高低出力インターフェース」と表現している。

つまり、PNP型で使った分圧回路の20KΩと30KΩの抵抗が(20KΩ+R)と30KΩになって、GPIOへの電圧が下がるのです。計ってみるとRは15KΩぐらいです。3Vの電圧を出力するには、分圧回路のR1を10KΩ、R2を40KΩにすれば約3Vの電圧になるはずです。ブレッドボードに配線してみました。オンのとき約3Vの電圧が出ています。

XKC-Y25-Vを配線したところ。OUTとGNDの間に10KΩと40KΩの抵抗を接続し、中間点からGPIOに入力した。上がオフの時で0V。下がオンの時で3Vの電圧が出力された。

おわりに

XKC-Y25のPNP、V、NPNのどれを選んだらよいのか、アプリケーションによりますが、GPIOに入力するにはNPNが良かったのかもしれません。PNPとVは、OUTの電圧がVCCの電圧と同じになりますが、NPNであればマイコンの入力希望の電圧に設定できるからです。Raspberry PiであればGPIOにプルアップ設定すれば、分圧抵抗はいらないはずです。機会があったら試してみたいと思います。

また、お気づきの通りこれは中国製なので、納期に余裕があって勇気があるなら中国のネットショップの方が結構安く買えます。ただし、価格変動とか品切れとかが気になるところです。入手できるものを使えるように準備しておくのが重要かなと思ってます。

*「UECS Pi」はアルスプラウト株式会社が提供する汎用DIY環境制御ソフトウェアです。https://www.arsprout.co.jp/products/others/uecs-pi/

*「UECS」は農業用のセンサー機器や制御機器用の通信・動作の共通仕様です。UECS研究会が公開しています。https://www.uecs.jp/outline/outline-index

関連リンク:EzITコンサルティング www.ezitc.dev


コメント

このブログの人気の投稿

Arsprout Piを使ってみた③ ーファームウエアのカストマイズ UECS Piとの相違点ー

Arsprout Piを使ってみた② ー構成定義を中心にUECS Piとの違いを考えるー

Arsprout Piを使ってみた① ーUECS Piからの変更点を中心にー