LoginSignup
10
15

More than 5 years have passed since last update.

[RaspberryPi][Ruby]ADコンバータ+土壌湿度センサー+Rubyで土壌の水分を計る

Last updated at Posted at 2016-03-26

はじめに

育てている盆栽の水やりのタイミングを見える化したかったので、ラズベリーパイ、ADコンバータ、土壌湿度センサーを使って、Rubyで土の中の水分を計測します

電子部品

*aitendoで購入したのはコンパレータモジュール(YL-38)と土壌湿度プローブ(YL-96)
*コンパレータモジュール(YL-38)にはデジタル出力が付いているが、数値の計測はできないみたいなので、アナログ出力を使って、ADコンバータを通して計測していく

ラズベリーパイの環境

Raspbian GNU/Linux 8
ruby 2.1.5p273

参考

計測

1.ラズベリーパイでSPI通信の準備

デフォルトだとラズベリーパイのSPI通信がオフになっているので、有効化する

cmd
sudo /usr/bin/raspi-config

設定画面を立ち上げて、「9 Advanced Options」を選択、その次のメニュー選択で「A6 SPI」を選択する
その後、再起動

再起動後、lsコマンドで確認する
/dev/spidev0.0と/dev/spidev0.1が表示されればOK

cmd
ls /dev/spi*

*参考などの他の情報にはブラックリストファイルを開き、spi-bcm2708を有効化すると書いてあるが、必要がなくなったみたい(raspberrypi.stackexchange.comや「spi_bcm2708' no such device」で検索)

2.計測部品の接続

ブレットボード、ジャンパピンを使ってラズベリーパイ、ADコンバータ、土壌湿度センサーを接続していく。
接続はPI-IORaspberryPi GeekのGPIOピン配置を参考に接続していく

mcp32081.png

GPIO_Pi2.png

ADコンバータのCH0と土壌湿度センサーのアナログ出力を繋げる

3.必要なgemのインストール

RubyでGPIOを操作するライブラリ「pi_piper」をインストールする

cmd
gem install pi_piper

4.pi_piperを使ってセンサーの値を取得する

Raspberry Pi + ruby + pi_piper + MCP3208でSPI通信 / アナログ入力のコードを基にコーディングした

ruby
#!/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ユーザで実行する

cmd
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

その他

値の取得箇所のコードはもう少し勉強して検証したい。
また、盆栽は屋外にあるので、無線で値を取得したい。

10
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
15