名刺サイズの超小型PC「ラズパイ」で遊ぶ(第40回)
庭の水やりで身近なIoTを体験、自動水やりシステムの構築 ~水分センサーの取り付け~(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')
spitest.py
このプログラムを起動したら、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
…………(以下無限ループ)
spitest.pyを動かしたときの表示
水につけていない状態の値が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')
spitokutei.py
これで土の中の状態が分かるようになりました。次回はLEDやLCD(液晶ディスプレイ)などを取り付けて、状態をもっと分かりやすくしてみます。
Copyright © ITmedia, Inc. All Rights Reserved.
名刺サイズの超小型PC「ラズパイ」で遊ぶ
今やスマートフォンアプリで何でも完結できてしまう時代。しかし、一から自分の手でデバイスを作り上げ、試行錯誤しながらアイデアを具現化する楽しさは格別です。この連載では、テーマや用途にあわせてマイクロコンピュータ(マイコン)と呼ばれる名刺サイズの超小型PC「Raspberry Pi」(通称ラズパイ)の活用方法から具体的な工作手順までを紹介します。
この記事の著者
関連記事
こんなメディアも見られています
ITmedia NEWSに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
SpecialPR
本日の新着記事
アクセスランキング
-
1
LINE、着せかえ表示問題を謝罪 希望者に返金へ
-
2
FANZA、成人向けAI創作・公開サービス「FANZAスタジオ」発表 先行体験は8月24日から
-
3
スマート給餌器で38時間の障害、ペットがご飯食べられず 飼い主の苦情殺到 「旅行中なのに」「猫が死んじゃう」
-
4
法務省、「ラヴ上等」とのタイアップ中止 「当初の意図を全うすることが難しい」
-
5
目指すは、日本発IPで海外売上20兆円 経産省が新戦略を発表 「ものがたり大国5カ年計画」
-
6
Anthropic、8月末にもIPO申請書類を公開か 調達額はSpaceXの過去最大に匹敵と米報道
-
7
終了発表の縦読み漫画「comico」――元重課金ユーザーが振り返る「いつしか開かなくなった」理由
-
8
生成AI画像で“架空の女性”に成り済まして政治投稿か 立憲栃木県連の男性党員 一部報道
-
9
「朝食を抜くと頭が働かない」はホント? 食べた人と食べてない人の認知能力を比較、3000人以上を調査
-
10
中国の動画サイト「bilibili」にグローバル版アプリ 日本でも配信開始 まずはAndroidから
ITmedia NEWS SNS
インフォメーション
注目情報をチェック
ITmediaNEWSをフォロー
あなたにおすすめの記事PR