![]()
10.Arduinoで色々なセンサーを使う (2025.6.23)
RasPiでは様々な種類のセンサーを接続してテストしてきました。同じように、Arduinoでもそうしたセンサーを使えるようにしたいと思います。センサーデータを収集するだけなら、OS上で動作するRasPiよりも制御用マイコンに特化したArduinoの方が適していると思われます。
ArduinoでLCDに文字を表示するテストは既に行いましたので、ここではセンサーを接続してデータを取得し、LCDに表示するテストを行います。LCDでI2C通信を実践しましたから、まずはセンサー類もI2C通信を使うものをピックアップしました。RasPiで実験した照度センサー、気圧センサー、風向計を、今度はArduinoでテストします。LCDを除いてRasPi同様に電源に3.3Vを使用するセンサーには、SCAとSDAもこれに準じたレベルにする必要があることから、レベル変換基板を間に入れます。実際には複数のI2C用ケーブルを接続できるように、RasPiで紹介した変換基板を乗せた実験用基板を使いました。

LCDは始めにテストに共通の表示を行い、3秒後に本来のセンサーデータを表示します。プログラムを見れば基本的なLCDの表示方法が分かるので、これを参考にご自身で必要な表示を実現してみて下さい。

照度センサーについては、「8.LCDモジュールを使う」で扱った時はRasPiへもデータを送りましたが、今回はLCDへの表示のみを行います。照度センサーユニットがGY-30やGY-302は電源電圧が3~5Vの範囲で使えるため、Arduinoでの応用時は5V電源を供給した上で、SCLとSDAも変換基板無しでそのまま接続できます。
●照度センサー(BH1750FVI)テスト
次は気圧センサーのBMP180です。このセンサーは気圧以外に温度や標高等複数の環境データが得られます。その中でLCDへの表示は温度と大気圧のみとしました(データ自体は全てを取得)。LCDに表示される2種類の値を読み取り易くするために、各表示時間を5秒としています。データの変数部を置き換えれば、今回使用しない他のデータもLCDに表示できます。BMP180の電源電圧は1.8~3.6Vのため、一般的には3.3Vで使用する必要があります。5Vでは使用できないため注意して下さい。SCL、SDAも変換基板を使い3.3V側に接続します。
●気圧センサー(BMP180)テスト
風向計はI/OエキスパンダーIC(MCP23017)を使い、風向計に設置したリードスイッチを通して風向データを読み込みます。プログラムではポートAを全て入力に設定し、PA0~PA7の値を1秒毎にチェックして、"L"の値のポートを検出します。ポート番号の順に風向計を右回りに対応させ、PA0を"N(北風)"、PA1を"NE(北東風)"・・・PA7を"NW(北西風)"のように割り当てています。MCP23017の電源電圧は1.8~5.5Vの範囲で使えるため、Arduinoでの応用時は5V電源を供給した上で、SCLとSDAも変換基板無しでそのまま接続できます。
●風向計テスト
ここまでI2Cを使うセンサーを扱いましたが、続いてはGPIOポートへ直接入力するタイプのセンサーとして、人感センサー(HC-SR05)、雨滴センサー、風速計をテストします。
まずは人感センサーからです。これは人が発する赤外線(熱源)の動きを捉えます。Arduinoはデジタル入出力に使えるピンを備えます。ピンは2~13までありますが、中には別の用途に割り当てられているピンもあります。人感センサーは"H"か"L"の判別が付けば良いのでどのピンでも大丈夫ですが、ここではデジタルピン4に接続します。HC-SR501は電源部にレギュレータが入っていて、内部で3.3Vに降圧しています。そのため電源電圧は4.5~20Vと広範囲で使えます。逆に3.3Vの低電圧では使えないため、一般的には電源に5Vを供給します。
●人感センサー(HC-SR501)テスト
雨滴センサーは雨によって濡れることで、検出用基板のパターン間の抵抗が下がる原理を使用したセンサーです。単純なため雨水を検出するのは簡単ですが、乾かないと雨が止んだことを検出できない欠点もあります。あくまでも簡易的なセンサーと考えた方が良いでしょう。センサー出力はArduinoのデジタルピン5に接続します。
●雨滴センサーテスト
風速計は風で回転するスリットを使い、フォトセンサーでパルス信号を読み取ります。一定時間のパルスをカウントすることで、風速に換算することができますが、テストプログラムでは1秒間のパルスのカウント値のみを表示します。パルス検出には割り込みを使います。Arduinoで割り込みに使えるのはデジタルピンの2と3です。そこで風速計のフォトセンサー出力はデジタルピン2に接続します。
●風速計テスト
更に入出力ピンを使うセンサーとして超音波センサー(HC-SR04)を実験します。このセンサーは目玉を2個並べたような特異な形をしています。一方が超音波発信器、もう一方が超音波受信器となっていて、発信器から出た超音波が対象物に当たって戻って来るのを受信器で検知します。そして発信と受信の時間差から対象物までの距離を計算します。HC-SR04の電源電圧は5Vで、Arduinoにはそのまま接続して使えます。信号は発信用のトリガー(出力)と受信用のエコー(入力)の2つで、前者をデジタルピン6(出力に設定)、後者をデジタルピン7(入力に設定)に接続します。
●超音波センサー(HC-SR04)テスト
前に大気用の温度/湿度センサーとしてDHT11を実験しましたが、今回は温度センサーの一種で防水型のDS18B20をテストしてみます。これはインターフェースに1-Wireを使うもので、Arduinoでも専用のライブラリが用意されています。信号線を共通化することで複数のセンサーを並列接続できる便利なものです。このテストプログラムは複数のセンサー読取りに対応していて、2個、3個とセンサー数を増やしていってもそのまま使用できます。
●防水型温度センサー(DS18B20)テスト
センサーの中には土壌水分量センサーのようにアナログ値を出力するタイプがあります。この場合はAD変換を行ってデジタル値に変換する必要があります。RasPiではADコンバーター(MCP3002)を使ってアナログ-デジタル変換して読み込みました。Arduinoの場合はADコンバーターの機能を内蔵しているため、これを利用して計測できます。ArduinoのAD変換分解能は10bitで、性能的にはMCP3002と同等です。接続できるポートはアナログのA0~A5の6ポートあります。ただし、A4とA5はI2C通信でも使うため、両方を同時に使用することはできません。ADコンバーターを別途必要としないため、Arduinoではよりシンプルなハードウェアとなり、この辺りもArduinoが制御マイコンに特化している所以でもあります。
次のテストプログラムではアナログポートのA0に土壌水分量センサーの信号線を接続しています。これで手持ちのセンサーを確認したところ、空中に放置した場合では値が584(2.85V)で、水中に入れた場合は323(1.58V)になりました。便宜上、前者を水分量0%、後者を100%と考え、その間は値と水分量が比例すると考えることにします。
●土壌水分量センサーテスト
![]()