2015年9月24日木曜日

RaspberryPiでラズベリー栽培 I2Cセンサハブ(仮名

I2Cセンサハブなるものを作ってみた。

  • 最高4つまでのアナログセンサを、I2Cデバイスにできる。
  • SMBus準拠(準拠とは言っていない)、BME280と同様にRaspPi側からレジスタアクセスしてデータが読める。
  • Vrefを設定できるので、LM35のようなVref1.1Vで使うセンサとか、水分土壌センサのような、Vref=5Vで使うセンサとかを一緒にできる。
  • スリープモードで、ADCをしていないアナログセンサの電源を自動で落とす。
  • センサ電源を立ち上げたあとVoが落ち着くのに時間がかかるセンサ用に、ディレイを設定できる


機能を盛り込んだせいで、便利なのか不便なのか分からないものが出来てしまった。

今更気づいたんですけど、ArduinoってPCにつながってなくても動くんですね。(´・ω・`)
PCから書き込んだあと、RaspPiの5V端子とArduinoの5V端子を繋いで、PCなしで動くようになった。(あれ、ひょっとしてAtmelStudioいらなくない??)
写真はRaspPi ModelBでテスト中のI2Cハブです。

下にスケッチとスクリプトを置いておきます。自己責任でご自由にお使いください。
(GitHubにうpしておこうかしら。誰かがもっと使いやすくしてくれるかもしれないし)

なお、使用しているFlash領域は4.8kByte(14%)なので、ATmega88、ATmega168にも移植できると思います。(AtmelStudioで書き直せばATmega48も可能?)

●Arduino スケッチ



● RaspPi側のスクリプト
A0ポートに土壌水分センサ、A1に日照センサ(NJL7502L)、A2にLM35DZをつけた状態で
次のスクリプトを実行するとADCの値が読めます。

#!/bin/bash
sudo i2cset -y 1 0x50 0x00 0x03
sudo i2cset -y 1 0x50 0x04 0x13
sudo i2cset -y 1 0x50 0x08 0x13
sleep 0.2
echo A0
sudo i2cget -y 1 0x50 0x02
sudo i2cget -y 1 0x50 0x03
echo A1
sudo i2cget -y 1 0x50 0x06
sudo i2cget -y 1 0x50 0x07
echo A2
sudo i2cget -y 1 0x50 0x0A
sudo i2cget -y 1 0x50 0x0B

●接続
RaspberryPi側の、GPIO2(SDA1)、GPIO3(SCL1)、GNDを、
Arduino側のA4(SDA)、A5(SCL)、GNDに接続する
5Vは、ArduinoのUSBポートを使わないときに接続してください。(大丈夫だと思うけど)
写真はModelBですが、 ModelB+、Pi2も同じです。
5V  5V  GND
3V3 SDA SCL

●Arduino側 センサとの接続

私が動作を確認したものは、
土壌水分センサ http://akizukidenshi.com/catalog/g/gM-07047/
温度センサ LM35DZ http://akizukidenshi.com/catalog/g/gI-00116/
日照センサ NJL7502L http://akizukidenshi.com/catalog/g/gI-02325/
です。

A0,A1、A2、A3をそれぞれのセンサのVoutと接続
ArduinoのGNDを、それぞれのセンサのGNDと接続
センサのVddは、初めて使うときは、Arduinoの5Vと接続してください。(センサの仕様に従ってください。)
動作確認ができたら、ディジタルピンに繋ぎかえてください。(電流を気にしないのであれば5VのままでOK)
Digital11 A0に繋いだセンサの電源
Digital10  A1
Digital09  A2
Digital08  A3
注)Digitalピンは、5Vから多少ドロップしていると思います。正確に5Vじゃなきゃ困る!な人は使わないようにしましょう。
注2)Digitalピンは、LEDくらいならふつうにドライブできますので、殆どのセンサは接続可能だと思います。40mA以上流れるセンサとかを接続したい場合は、直接電源に繋ぐか、ソリッドステートリレーを使うようにしてください。
日照センサの回路図(まだFritzingを使いこなせてない)
後日、R1=10kΩにしました。

0 件のコメント:

コメントを投稿