空気清浄機などに内蔵されている「ほこりセンサー」という電子部品があります。秋葉原でもあまり見かけない部品のように思いますが、ネット通販で購入できます。
部屋のほこりの量を可視化できたら面白そうだと思ったので、シャープのほこりセンサーGP2Y1026AU0Fを入手してRaspberry Piから動かしてみました。
機種選定
シャープのほこりセンサーは6種類あるようで、一番入手しやすそうなのがGP2Y1010AU0Fというアナログ出力のユニットです。しかし、私はRaspberry Piから使いたかったので、デジタル出力の方が都合が良い1という事情がありました。
そこでシャープのセンサーの中でデジタル出力のものを探しました。条件に合うセンサーユニットは下記の3つです。
- GP2Y1023AU0F
- GP2Y1026AU0F
- GP2Y1030AU0F
正直なところどれでも良かったのですが、探した中で一番安そうなGP2Y1026AU0Fを選びました。AliExpressで2個12ドルくらいでした。
外見
センサーの大きさは46mm x 36mm、高さ18mmくらいです。下の写真はRaspberry Pi Zeroと並べて撮ったものです。
Raspberry Piの準備
今回利用するGP2Y1026AU0FはUART接続になります。
Raspberry Piでは8番ピンと10番ピンがUARTに対応します。しかし、これらのピンは標準状態ではシリアルコンソール接続に使われているため、これを解除してUARTを有効にする必要があります。
具体的には下記の2ファイルを編集します。
# 下記のように、「console=serial0,115200」を削除
console=tty1 root=PARTUUID=xxxxxxxx-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
# ファイル末尾に下記を追加
[all]
enable_uart=1
これらの変更を行ってからOS再起動をするとGPIOからUART接続したデバイスの情報が取得できるようになります。パスは/dev/serial0
などになるはずです。
動作確認
動作確認に使ったデモプログラムはGitHub上で公開しています。
GP2Y1026AU0Fからは3本の線が出ているのですが、黒をGND、赤を5V電源に接続します。白は10番ピン(GPIO 15)に接続します。通電させるとすぐに測定が始まります。カタログスペック上は70msごとに情報が取れるようです。
動作結果
単に通電しただけの状態ではセンサーは無反応で、ほこり0の表示になっていました。
ほこりセンサーの真上でティッシュペーパーを揉んだり破いたりしてみると、次のようにセンサーが反応しました。
(略)
VoutH=0, VoutL=0, VrefH=0, VrefL=11, Vout=0mV, dustDensity=0ug/m3
VoutH=0, VoutL=0, VrefH=0, VrefL=11, Vout=0mV, dustDensity=0ug/m3
VoutH=0, VoutL=0, VrefH=0, VrefL=11, Vout=0mV, dustDensity=0ug/m3
VoutH=0, VoutL=158, VrefH=0, VrefL=11, Vout=771.484375mV, dustDensity=220.42410714285714ug/m3
VoutH=0, VoutL=158, VrefH=0, VrefL=11, Vout=771.484375mV, dustDensity=220.42410714285714ug/m3
VoutH=0, VoutL=158, VrefH=0, VrefL=11, Vout=771.484375mV, dustDensity=220.42410714285714ug/m3
(略)
ほこりを検出する機能自体は期待通り動いているようです。
(当然のような気はしますが)部屋のほこりの増減を測定するような用途にはエアフローの確保が必須のようです。ファンでも取り付けますかね…
参考URL
- ほこりセンサユニット|製品ラインアップ|電子デバイス/ディスプレイ:シャープ
- GP2Y1026AU0F SPECIFICATION.pdf
- Application Guide for Sharp GP2Y1026AU0F Dust Sensor · sharpsensoruser/sharp-sensor-demos Wiki
-
Raspberry Piにはアナログ入力ピンが無いので、別途ADコンバータやArduinoなどを準備する必要があり面倒です。 ↩