LabVIEWとDS18B20で1-Wire通信

防水加工されたDS18B20温度センサケーブルは容易に入手できて便利である。しかしLabVIEWでDS18B20の値を取得するサンプルプロ グラムがあまり見つからない。専 用のデバイス を使う方法や Arduinoを使う方法 があるようだが、今回はUARTを改造して1-wire通信を行う方法を試してみた。

あらかじめやっておくこと


LabVIEW Home Bundle のインストール
(参考: LabVIEW+LINX+BeagleBoneBlack を試してみた

WINDOWS用1-WIRE®ドライバのインストール
https://www.maximintegrated.com/jp/products/ibutton/software/tmex/download_drivers.cfm
LabVIEWプログラムで使う"IBFS32.DLL"と "IB97E32.DLL"がインストールされる。
64bitのものをインストールしても C:\Windows\SysWOW64 フォルダ内に保存されるはず。
同封のデモソフトウェア OneWireViewer も使う。

Javaのインストール(OneWireViewerの動作に必要)
https://www.java.com/ja/download/

DS18B20ケーブルの購入
Amazonで「DS18B20」 と検索するといっぱい出てくる。おそらく中国から発送されるやつ。

その他諸々の購入
MCP2221A
FTDI USB-UART変換ケーブル (FT232R)
ターミナルブロック
抵抗
ダイオード
コンデンサ
microUSB DIP化キット
MicroUSBケーブル
ブレッドボード
ジャンパーワイヤ

UARTにDS18B20を接続


端的に言えば、UARTのRxとTxの間にダイオードを、VccとRxの間に抵抗を入れれば1-wireが読めるようになる。
https://github.com/dword1511/onewire-over-uart


(画像は上記サイトより引用)

上のサイトでは使用するUSB-UARTコンバータの例をいくつか示している。
ここではMCP2221A と FT232R をそれぞれ使ってみる。

MCP2221A の場合は前 回の記事で使ったものを流用した。
ターミナルブロックにDS18B20 をネジ止めして、これをブレッドボードに差し込む。
DS18B20 の VCC(赤線)、DQ(黃線)、GND(黒線)をそれぞれ MCP2221A の VCC、Rx、GNDに接続。
RxとTxの間にダイオードを接続。
VccとRxの間に抵抗を接続。

今回は0.47 μFコンデンサも忘れてないよ。

FT232R の場合は市販のUSB-UART変換ケーブルを改造した。
これを、

こうやって、

こうやって、

こうじゃ。

動作確認


1-WIREドライバに付属しているソフトウェアで動作確認をする。

まず、作成したUSB-UART-DS18B20デバイスをPCのUSBに接続して認識させる。
上で作成した MCP2221A と FT232R のどちらを使ってもよい。

スタートメニュー → 1-Wire drivers の中にある OneWireViewer.exe を起動。


「DS9097E」タブを選んで、ポートを選択する。ここでは「COM3」だが環境によって異なる。

「Normal Device」、「1 second」と選んでいき、「Device List」からデバイスを選択して、
右上の「Real-Time Temperature」タブを選ぶ。
回路が正常に組まれていれば温度計測が始まってグラフが表示される。

COMポートを調べるときは、スタートボタンを右クリック → デバイスマネージャー から。

ここね。

LabVIEWプログラミング


とりあえず動いたレベル。サブvi?なにそれ?(↓クリックで拡大)


よくわかってないけどちょっとだけ説明。
TMEXドライバと呼ばれる.dllファイルをLabVIEWから読み込んで使っている。

コネクティビティ → ライブラリ&実行可能ファイル → ライブラリ関数 を選ぶ。

右クリックして「構成」を選ぶ。

ライブラリ名またはパスのところで"IBFS32.dll"を選択。
すると関数名が色々選択できるようになる。
呼び出し規約は「stdcall(WINAPI)」にしたけど、どっちにしても動くみたい。

関数名については WINDOWS用1-WIRE SDK に入ってるマニュアルを参照。
https://www.maximintegrated.com/jp/products/digital/one-wire/software-tools/sdk-windows.html

関数一覧。マニュアルから引用。


ダウンロード


TMEX_DS18B20.vi (上で書いたもの。複数センサには非対応)


memo

プログラムにあたり下記サイトを参考にさせて頂きました。
http://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/DS18B20/DS18B20manual.html
https://forums.ni.com/t5/Example-Programs/Reading-1-Wire-DS18B20-and-DS18S20-Via-a-Serial-or-USB-Adapter/ta-p/3491805
https://www.codeproject.com/Articles/32960/Temperature-Measurement-as-an-Example-of-a-Wire