Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

育てている盆栽の水やりのタイミングを見える化したかったので、ラズベリーパイ、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

その他

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

jun1_0803
WEB系SE/PG。webサービスエンジニア。業務ではPHPを使ってますが、IoTと機械学習のためにpythonやrubyを勉強中
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした