#はじめに
育てている盆栽の水やりのタイミングを見える化したかったので、ラズベリーパイ、ADコンバータ、土壌湿度センサーを使って、Rubyで土の中の水分を計測します
#電子部品
- Raspberry Pi 2 B
- ADコンバータ 秋月電子で購入
- 土壌湿度センサー aitendoで購入
*aitendoで購入したのはコンパレータモジュール(YL-38)と土壌湿度プローブ(YL-96)
*コンパレータモジュール(YL-38)にはデジタル出力が付いているが、数値の計測はできないみたいなので、アナログ出力を使って、ADコンバータを通して計測していく
#ラズベリーパイの環境
Raspbian GNU/Linux 8
ruby 2.1.5p273
#参考
#計測
##1.ラズベリーパイでSPI通信の準備
デフォルトだとラズベリーパイのSPI通信がオフになっているので、有効化する
sudo /usr/bin/raspi-config
設定画面を立ち上げて、「9 Advanced Options」を選択、その次のメニュー選択で「A6 SPI」を選択する
その後、再起動
再起動後、lsコマンドで確認する
/dev/spidev0.0と/dev/spidev0.1が表示されればOK
ls /dev/spi*
*参考などの他の情報にはブラックリストファイルを開き、spi-bcm2708を有効化すると書いてあるが、必要がなくなったみたい(raspberrypi.stackexchange.comや「spi_bcm2708' no such device」で検索)
##2.計測部品の接続
ブレットボード、ジャンパピンを使ってラズベリーパイ、ADコンバータ、土壌湿度センサーを接続していく。
接続はPI-IOとRaspberryPi GeekのGPIOピン配置を参考に接続していく
ADコンバータのCH0と土壌湿度センサーのアナログ出力を繋げる
##3.必要なgemのインストール
RubyでGPIOを操作するライブラリ「pi_piper」をインストールする
gem install pi_piper
##4.pi_piperを使ってセンサーの値を取得する
Raspberry Pi + ruby + pi_piper + MCP3208でSPI通信 / アナログ入力のコードを基にコーディングした
#!/usr/local/bin/ruby
require "pi_piper"
RESOLUTION_AT_12BIT = 0b111111111111.to_f.freeze
PiPiper::Spi.begin do |spi|
loop do
_, center, last = spi.write [0b00000110, 0b00000000, 0b00000000]
center = center & 0b00001111
center = center << 8
value = center + last
moist_value = RESOLUTION_AT_12BIT - value
puts "#{moist_value}"
sleep 0.1
end
end
pi_piperからGPIOを使おうとするとroot権限が必要なので、rootユーザで実行する
root@raspberrypi:/home/pi/work# ruby bonsai.rb
#水分が多いほど値が大きくなる
209.0
209.0
210.0
208.0
209.0
209.0
2.0
0.0
0.0
#その他
値の取得箇所のコードはもう少し勉強して検証したい。
また、盆栽は屋外にあるので、無線で値を取得したい。