今回は、前回に引き続き土壌水分量を自動で取得する装置の作り方を紹介していきます。
準備編をまだ読んでいない方はこちらからどうぞ。
今回の記事は構築編になります。
土壌水分センサーとラズベリーパイの接続方法とラズベリーパイでの制御プログラムの書き方を説明していきます。
一見難しそうな内容ですが、初心者の方でもわかるように手順を公開しますし、プログラムをやったことがない人でもコピペで作れるようにしておりますので、ぜひ挑戦してみてください。
土壌水分センサーとラズベリーパイを接続する
ではまずは土壌水分センサーとラズベリーパイを接続していきましょう。
今回使用する土壌水分センサーは準備編でも紹介した、こちらのセンサーになります。
こちらが手に入らない場合は「YL-69」というセンサーであれば大丈夫です。
その他必要な電子部品は以下になります。
・ブレッドボード
・ジャンパーワイヤー(使うのはオス-メスとオス-オスのみ)
・A/Dコンバーター
接続方法
ここからは電子工作になります。
しかし、難しいはんだ付けなどは不要です。
コードを決められた場所に挿すだけなので、電子工作をしたことがない人もぜひ苦手意識を持たずに進めていただければと思います。
今回はこのような配線を作っていきます。
難しそうですがなんてことはないです。この色の通りに線をつなぐだけです。
では1つずつやっていきましょう。
まずはブレッドボードにA/Dコンバーター(MCP3002)を挿しましょう。
このように真ん中の溝をまたぐように挿します。
10~13番のところに挿しておくと以降の手順が分かりやすくなります。
ではつづいて、土壌水分センサーとブレッドボードをジャンパーワイヤ(オス―メス)でつないでいきます。
土壌水分センサー側は「VCC」「GND」「DO」「AO」という端子が出ていると思いますが、以下のようにつないでいきます。
VCC(オレンジ)⇒7番
GND(黒)⇒16番
DO⇒使用しない
AO(青)⇒11番
わかりやすく色を書いていますが色によって機能が変わるわけではないの他の色を使っても大丈夫です。
次はラズベリーパイとブレッドボードをジャンパーワイヤ(オス―メス)でつないでいきます。
ラズベリーパイにはこのように40個のピンがあります。
見た目上は番号が付いていないのでわかりにくいですが、上の画像ような番号が割り当てられています。
それぞれに意味があるのですが、今回は特に気にせず指定の番号のピンに挿していってください。
私はこれが苦手でよく間違えるので気を付けてください。
こちらの画像の番号の色に合わせてジャンパーワイヤを挿していきます。
間違えがないか何度も確認してくださいね
ブレッドボード側はこのようにつなぎます。
jの列は以下の通りです。
オレンジ⇒7番
白⇒11番
紫⇒12番
青⇒13番
黒⇒16番
少し離れてeの列は以下の通りです。
茶色⇒1番
ここまでくれば電子工作はあと少しです。
ブレッドボード内の配線を少し追加しましょう。
写真だとわかりずらいのでイラストで確認してください。①~④の配線をジャンパーワイヤ(オスーオス)で追加します。
つなぐのは以下の4つです。
①茶色 d1⇔d10
②黄色 e7⇔f7
③黄色 g7⇔g10
④黒 d13⇔d16
ここまでできたら配線作業は完了です。
土壌水分センサーからデータを取得するプログラムを書く
次にラズベリーパイで土壌水分センサーからデータを取得するプログラムを書いていきます。
プログラム経験がない人でも大丈夫なように手順を丁寧に説明していくのでご安心ください。
ではさっそくラズベリーパイを起動しましょう。
必要な部品のインストール
まずはプログラムを動かすのに必要な部品のインストールから始めますので、画面左上の黒い四角のアイコンを押してください。
すると、このような黒い画面が立ち上がると思います。
ここにコマンドを打っていきます。
最初にA/DコンバータとのSPI通信をするためのドライバをインストールします。
こちらコマンドを黒い画面にコピペして、エンターキーを押して実行しましょう。
sudo apt-get install python-spidev
VNC Viewerを使っていれば パソコンからラズベリーパイにコピペもできちゃいます。
すると以下のように表示されると思います。
私の環境ではすでに最新バージョンがインストールされていました。
続いて、土壌水分センサーからの情報を扱うために必要な部品をインストールします。
同じように以下のコマンドを実行しましょう。
pip3 install adafruit-blinka
インストールのバーなどが何個か表示されると思いますが、最後に「Successfully」と表示されていればインストール成功です。
次はA/Dコンバータを使用するための部品のインストールです。
もう慣れましたね。以下のコマンドを実行しましょう。
pip3 install adafruit-circuitpython-mcp3xxx
こちらもいろいろとインストールの情報がでますが、最後に「Successfully」と表示されれば成功です。
これで前準備は完了ですが、念のためラズベリーパイでSPI通信が有効になっているかを確認しておきましょう。
以下のコマンドを打ちます。
ls -l /dev/spi*
このように表示されれば問題なしです。
プログラムを書いて実行する
まずはプログラムファイルを作っていきましょう。
画面左上のフォルダアイコンをクリックしてください。
するとフォルダが立ち上がります。
このあたりの見た目はWindowsに似ているのでわかりやすいですね。
このフォルダにプログラムファイルを作っていきます。
別のフォルダに移動してファイルを作ってしまいますと、今後の操作がずれてきますので、慣れていない方は開いたフォルダ内(/home/pi)の中にプログラムファイルを作ってください。
プログラムファイルといっても特別なことはありません。
フォルダ内で右クリックをして「New File」を選択してください。
土壌水分を計るプログラムなので「soil-moisture.py」としましょう。
この「.py」を付けることでこのファイルがPython(パイソン)という言語のプログラムファイルですよ、と示すことができます。
OKボタンを押すと、フォルダ内に「soil-moisture.py」というファイルができあがります。
こちらのファイルを右クリックして「アプリケーションで開く」を選択しましょう。
すると、いくつか選択できるアプリケーションがあると思いますが、今回はPythonプログラム作成用の「Thonny Python IDE」というアプリケーションを選択して、OKボタンを押してください。
「Thonny Python IDE」で先ほどの「soil-moisture.py」が開かれます。
もちろんまだ空っぽのファイルですが、こちらにプログラムを記述していきます。
記述する内容は以下になります。
import busio
import digitalio
import board
import time
import RPi.GPIO as GPIO
import adafruit_mcp3xxx.mcp3002 as MCP
from adafruit_mcp3xxx.analog_in import AnalogIn
pin = 22
#出力用関数
def output_fromGPIO(pin, output):
GPIO.output(pin, output)
time.sleep(0.1)
GPIO.setup(pin, GPIO.OUT)
#spiバスの作成
spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
#チップセレクト(cs)の作成
cs = digitalio.DigitalInOut(board.CE0)
#mcpオブジェクトの作成
mcp = MCP.MCP3002(spi, cs)
#mcpのpin0にアナログインプットチャネルを作成
chan = AnalogIn(mcp, MCP.P0)
#土壌水分センサーを起動
output_fromGPIO(pin,1)
try:
while True:
print('Raw ADC Value: ', chan.value)
print('ADC Voltage: ' + str(chan.voltage) + 'V')
if chan.value != -1:
break;
time.sleep(1)
except KeyboardInterrupt:
pass
#土壌水分センサーを停止
output_fromGPIO(pin,0)
こちらを「soil-moisture.py」にコピペしましょう。
VNC Viewerでのコピペがうまくいかない方は、ラズベリーパイのWeb Browserを使えばネット検索はできますので、こちらのサイトを検索してコピペしましょう。
プログラムファイルを記載したら、 「Thonny Python IDE」の上部にある「Run」のアイコンをクリックしましょう。プログラムが動き出します。
下部(Shell)に「%Run soil-moisture.py」と表示され、「Raw ADC Value」と「ADC Voltage」の内容が以下のように表示されれば成功です。
お疲れさまでした。
これで土壌水分センサーを動かして値を取ることができました。
まとめ
構築編はここまでです。
今回うまくいかなかった方は、もう一度配線を見直してみてください。
プログラムの実行時にエラーが出る方はエラーの内容をググると答えが見つかるかもしれません。
さて、次はいよいよ実践編!
プログラムを定期的に実行して、記録していく方法をご説明します。
これまで通り初心者の方でもできるように丁寧な説明を心掛けていきますのでご安心ください。
では、実践編へどうぞ。
コメント