水位センサをArduinoで動かします。
目次:
今回の目的
ELEGOOのチュートリアル「水位検出検知器」をチュートリアル通りに動かします。
※チュートリアルの文章(PDF日本語版含む)もスケッチもELEGOOのサイトから無料でダウンロードできました。
水位検出検知器(水位センサ)
呼びにくいので以降「水位センサ」と呼びます。
降水量、水位、水漏れの検知に使えるセンサモジュールです。
外部端子は3本。シルク表記は「S」、「+」、「-」。
基板表面には2組各5本の銅箔パターンが10本。互い違いに敷かれております(図1-(1))。
1組は電源側、もう1組がセンサ側。空中では開放となるこの2組は、水に浸かることで浸かった分だけ低い抵抗値で導通します。
表面実装の部品はLEDと抵抗と、、、3端子のトランジスタでしょうか。
ネット上で見つけたおそらく同等品?であろう回路図を見ると、浸けた水がNPNトランジスタのゲート抵抗(開放⇔可変)となるコレクタ接地の固定バイアス回路(固定?表現に自信ありません)のようです。
(上記回路図?は、GOOGLEで「Liquid-Level-Sensor-Schematic pdf」で検索して見つかりました。興味ある方はご覧ください)
理解通りであれば次のような動きです。
水に沈めていく→水が可変抵抗として働き、ゲート抵抗が下がる→ゲート電流が大きくなる→トランジスタの働きにより、エミッタ電流が大きくなる→エミッタ抵抗両端の電位差が大きくなる→エミッタ(センサ出力)の対GND電位が上がる
裏面には「Water Sensor」とシルク印字されております。直訳して「水センサ」と呼んだ方がより正しいのでしょうか(短いですし 図1-(2))。
チュートリアルに製品仕様が記載されておりました。和訳します。
【製品仕様】
1.動作電圧:DC5V
2.動作電流:20mA未満
3.センサータイプ:アナログ
4.検出領域:40mmx16mm
5.動作温度:10~30℃
6.出力電圧:0~4.2V
器材接続
水位センサの「S」、「+」、「-」をArduinoのA0、5V、GNDにつなぎます。
シリアルモニタに水位測定結果を出力するため、USBはパソコンに接続します。
スケッチ
オリジナルのものを少し変えました。ライブラリ読み込みも無い短いスケッチです。
int val_old; // 変数「val_old」を定義
char printB[128]; // 文字列用に行列「printB」を定義
void setup() {
Serial.begin(9600); // シリアルポートを9,600bpsで開く
}
void loop() { // 以下延々と繰り返す
int val=analogRead(0); // 変数「val」にセンサ出力読み取り値を代入
if(((val_old - val) > 10) || ((val - val_old) > 10){; // 変数「val」,「val_old」の差が10を超える場合、以下を実行する
sprintf(printB,"ADC%d level is %d\n",0,val); // 行列「printB」に変数「val」を含めた文面を代入
Serial.print(printB); // 行列「pirntB」をシリアル出力
val_old=val; // 変数「val_old」に変数「val」の値を代入
}
}
測定自体は連続しており、水位センサからArduinoが受け取り続けADC(Analog Digital Converter)を働かせ続けておりますが、シリアル出力は直前の出力値から差分10を超える測定値が出てきた場合に再出力する、という流れです。
動作
カップに注いだ水道水に水位センサを浸して引き上げました。
水に浸し始めてシリアル出力開始、深く浸すほど測定値は大きくなりました。ただし、水から引き揚げきった後でも、しばらく測定値20以下に下がりませんでした。基板表面が濡れたままだったからでしょう。
所感
スケッチも回路の動作もわかりやすいのはありがたい限りです。モジュールに専用ICが実装されていてその中身がほとんどの機能を担うブラックボックスになっている、ということもありません。
こうしてディスクリートで構成するわかりやすい回路で機能が実現しているのは、電子回路への理解が乏しい身としては少し希望が持てます。
0 件のコメント:
コメントを投稿