2月 212023
 

ハードウェアの工作

それでは実験に使用するハードウェアの準備から始めましょう。 入手したムラタの土壌センサはSLT5006というモデルです。
SLT5006は電源が3V~6V、 消費電流は30mAtyp、50mAmaxでSerial(UART) データ信号はRxd, Txdのみで信号レベルは明記されていませんがTTLレベルか3.3VCMOSレベルで通信できそうです。
一方、 RS-SG61のシリアルポート (DB9)の信号レベルは+12V(+10V)もしくは-12V(-10V)ですのでそのまま接続することはできません。 そこで電圧レベル変換基板(回路)を土壌センサとSG61の間に入れる必要があります。
RS232C <–> 5V/3.3V変換基板モジュールはネット上でいろんな製品が販売されていますが今回は回路図などの資料がきちんとしている秋月電子通商のAE-ADM3202とDB9Fコネクタ、 DB9用コネクタカバーを使用しました(Photo#4)。
Photo#4
土壌センサの動作用電源のDC+5V(赤)はSG51の9番ピンから供給を受けます。
また土壌センサはEnable 信号(白) にも動作用電源を超えない電圧をかける必要がありますので、 今回の実験では白線もSG61の9番から供給されるDC+5Vに接続しておきます。
SG61側は本体のDIPスイッチの4番をON側にセットしてDB9コネクタの9番端子からDC+5Vをセンサに供給できるようにしておきます。
また、 センサ側のUART信号はTxd, RxdのみですのでSG61のDIPスイッチの3番をOFFに設定しRTS-CTS制御をしないようにしておきます。
RS-SG61のDC電源ジャック (電圧区分2)には防犯カメラ用太陽電池 (USB DC+5V供給タイプ)の出力プラグを接続します。 太陽電池はamazonで購入したZUMIMALLソーラーパネル(型番不明)です。 microB付の1mのケーブルがついていますがコネクタを電圧区分2のプラグに付替えケーブル長も少し短く加工しました。

soil_sensor_with_DB9
このように土壌センサ側にRS232Cレベル変換基板を付けておくとRS-SG61だけでなく有線のUSBシリアル変換デバイスREX-USB60FPW(Photo#5 e2eStore専売品)に接続して有線でも使用することができます。





土壌センサには3mの長さの頑丈なケーブルがついていますので、 USB60FPWと組み合わせればハウス内や温室、 LED栽培の実験室内などでの使用に応用できます。

Poto#5 – REX-USB60FPW

USB60FPW

それともう一つ便利なことはRS-SG61を使用したProgramもREX-USB60FPWを使用したProgramもSerialPortの宣言(定義) を変更するだけで他のCodeは全く同一でよいという利点があります。
これなら雨の日や夜間はUSB60FPWにつなぎ変えてdebugを行うことができます。


土壌センサとの通信テストはPythonのインタラクティブモード(対話型1行入力即実行モード)で簡単に行えます。 最初はCRC16の計算をしなくて済むようにセンサの仕様書に記載されているCRC16を含むコマンド例を使用すれば土壌センサから応答が返ってきます。 ただし、 Pythonのpyserialライブラリの受信関数の仕様上、 少し工夫する必要があります。 通信テストのProgramは下記List#1を参照して下さい。

List#1 通信テスト 各行のコメント(#以降)は入力する必要はありません。各行の説明です。
pyserialのinstallは
(.venv) c:\Users\USER\farIoT>python -m pip install pyserial
でインタラクティブモード起動前にpyserialモジュールをinstallしておくこと。

(.venv) c:\Users\USER\farmIoT>python #pythonを起動、interactiveモード

>>> immport serial
>>> import time
>>> COM="COM5" #SG61の場合、USB60FPWの場合は COM="COM4"
>>> bitRate=9600
>>> ser = serial.Serial(COM, bitRate, timeout=10 ) #Serial portの宣言
>>> f_code = 2 #0x02 write
>>> regi = 7 #0x07 SNSR_CTR register
>>> B_size = 1 # 0x01 Byte size
>>> data = 1 # 0x01 Data 1/4
>>> CRC_16U = 13 # 0x0d CRC_16 Upper byte
>>> CRC_16L = 112 # 0x70 CRC_16 Lower byte

# 測定開始コマンドを土壌センサに送信する

>>> start_cmd = bytes([ f_code, regi, B_size, data, CRC_16U, CRC_16L ])
>>> ser.write( start_cmd )

# 土壌センサからの応答を受信する

>>> rcv_hdr = ser.read( 3 ) # header部を3バイト受信する
>>> bcnt = rcv_hdr[2] # header部の3バイト目のdata長を取り出す
>>> rcv_data = ser.read( bcnt + 2 ) #data長にCRC値の2バイト長を加算
>>> print( rcv_hdr )
>>> print( rcv_data )
>>> ser.close()




インタラクティブモードだと毎回K/Bから入力しなければいけないので、 実行が確認された後は**.pyとしてCodeをsaveしておくことをお勧めします。 VSCODEなどのエディタで編集–>save、Python ですぐ実行–>問題があればすぐ編集、 saveしてすぐ実行というサイクルを繰り返すことができるため効率よくProgram開発を行うことができます。

次頁[3]へ続く…

 返信する

以下のHTML タグと属性が利用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(必須)

(必須)

*