庭の水やりで身近なIoTを体験、自動水やりシステムの構築 〜水分センサーの取り付け〜:名刺サイズの超小型PC「ラズパイ」で遊ぶ(第40回)(2/2 ページ)
ラズパイを使って土中の水分量をもとにした水やりシステムを構築します。
土中が乾いているかどうかを測定する
ではSEN0193を使っていきましょう。ラズパイとの接続ですが、SPIを使います。以前I2Cでの接続について、大気の温度、湿度、気圧を測る「BME280」を例に解説したことがありますが、ラズパイと何かのデバイスをつなげて使うためにはこのI2Cと、今回紹介するSPIを通じてやりとりすることになります。
SPIはSerial Peripheral Interfaceの略で、I2Cのようにいくつものデバイスをぶら下げて使えますが、I2Cと違うのは「マスター」と「スレーブ」という形式でやりとりをすることです。ラズパイで使うときはもちろんラズパイがマスター、デバイスがスレーブです。そして以下の4線を通じてのやりとりとなります。
- クロック(SPI CLK、SCLK)
- チップ・セレクト(CS)
- マスター出力/スレーブ入力(MOSI)
- マスター入力/スレーブ出力(MISO)
ラズパイでは、SCLKはGPIO 11(23番ピン)、CSはGPIO 8(24番ピン)、MOSIはGPIO 10(19番ピン)、MISOはGPIO 9(21番ピン)です。
ではまずSEN0193とMCP3002、ラズパイをつなげていきましょう。MCP3002のピンアサインは以下の画像の通りですので、VDDを3.3Vに、DOUTをGPIO 9(21番ピン)に、DINをGPIO 10(19番ピン)に、CS/SHDNをGPIO 8(24番ピン)に、VssをGND(25番ピン)につなぎます。
そしてSEN0193ですが、赤、黒、青の3本の線が出ています。赤は3.3Vに、黒はGNDに、青はMCP3002のCH0(2番ピン)につなぎます。全てつないだ状態が以下の写真です。
つなぎ終わったらテストとして、以下のプログラムを走らせてみましょう。これはSEN0193で測定される値の上限と下限を見るためのものです。「spitest.py」のようにファイル名を付けておきましょう。
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import subprocess from gpiozero import MCP3002 Vref = 3.3 try: while True: sen0193 = MCP3002(channel=0) hum = round(sen0193.value * Vref * 100,2) print(str(hum)) time.sleep(1) except: KeyboardInterrupt subprocess.call('clear')
このプログラムを起動したら、SEN0193を水につけてみます。水につける限界ですが、チップなどがついている下に白線が引いてありますので、そこが限界線です。すると以下のような表示が出たかと思います。
$ python spitest.py 254.88 254.88 255.2 254.88 255.2 255.2 255.2 255.2 127.84 127.2 127.52 148.48 154.28 154.28 250.68 254.55 254.88 255.2 255.2 …………(以下無限ループ)
水につけていない状態の値が255、たっぷりと水につけた状態が127ということが分かります。そこで255に近ければ「Dry」、127に近ければ「VeryWet」と表示するようにしてみましょう。またこの中間点あたりであれば「Wet」と表示させることにします。
これを踏まえて以下のプログラムを作りました。GPIOの値ですが、以前解説したときは「RPi.GPIO」ライブラリを使いましたが、今回はGPIOを扱えるもうひとつのライブラリ「gpiozero」を使います。理由はMCP3002のライブラリが用意されているためです。なお、値の判定はif文を使って分岐させています。
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import subprocess from gpiozero import MCP3002 Vref = 3.3 # 値の最大値と最小値 dry = 270 water = 119 interval = (dry - water) / 3 wet = water + interval lbdry = dry - interval try: while True: pot = MCP3002(channel=0) hum = round(pot.value * Vref * 100,1) if (hum > water and hum < wet): print("very Wet") elif (hum > wet and hum < lbdry): print("Wet") elif (hum < dry and hum > lbdry): print("Dry") time.sleep(1) except: KeyboardInterrupt subprocess.call('clear')
これで土の中の状態が分かるようになりました。次回はLEDやLCD(液晶ディスプレイ)などを取り付けて、状態をもっと分かりやすくしてみます。
関連記事
- ラズパイで「Windows 10 on ARM64」を動かす(オーバークロック編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。今回はオーバークロックで快適動作を実現。 - ラズパイで「Windows 10 on ARM64」を動かす(インストール編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイで「Windows 10 on ARM64」を動かす(事前準備編)
ラズパイにARMプロセッサ向けの「Windows 10 on ARM64」をインストールしてみた。 - ラズパイ一体型キーボード「Raspberry Pi 400」レビュー 特例制度のWeb申請で“技適なし”を回避した
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」のレビューのファーストインプレッションをお届け。海外製品を日本国内で使うために気を付けるべきポイントも紹介。 - ラズパイ一体型キーボード「Raspberry Pi 400」の性能は? ベンチマークテストで従来モデルと比べた
かつての“マイコン”を思わせるラズパイ一体型キーボード「Raspberry Pi 400」でベンチマークテストを実施。その実力とは? - ラズパイで気温と湿度を測定、LINEで通知を受け取る 〜前編〜
今回は温湿度センサーモジュールとラズパイを組み合わせ、LINEと連携させる方法を紹介します。 - ラズパイを無線LANルーター化する 〜アクセスポイント編〜
家庭内で無線LANルータを使っている人は多いかと思います。今回はそのルーター機能をラズパイに持たせて、ラズパイを使った無線LANルーターの構築方法についてご紹介します。 - 本格的な撮影が楽しめる公式カメラモジュール「Raspberry Pi High Quality Camera」を試す
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。Raspberry Pi公式のカメラとして本格的な撮影が楽しめる「Raspberry Pi High Quality Camera」を紹介します。 - ラズパイで新型コロナウイルス解析に参加する 〜Ubuntu Serverの構築編〜
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。今回はラズパイで。 - ラズパイでスマートスピーカーを作る 「アレクサ!あしたの天気は?」 〜ソフトウェア準備編〜
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。今回は米Amazonが開発したAIアシスタント「Alexa」をラズパイで使えるようにしてみます。 - これが“らずキャン△”だ! キャンプ場で役立つ「気温・湿度・気圧センサー」の作り方
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。まずはキャンプ場で気温、湿度、気圧を測れるデバイスを作ってみます。 - ラズパイで「YouTube」と「Amazon プライムビデオ」を見る
小さなマイクロコンピュータ「Raspberry Pi」(通称ラズパイ)で作る、自分だけのガジェット。音楽や動画のメディアサーバ化するために入れたOS「OSMC」で、YouTubeやAmazon プライムビデオなどを楽しんでみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.