見出し画像

(3) M5StickC Plusとペルチェ素子で恒温水槽を作る - DS18B20で温度計測

DS18B20について

水温を制御するには、現在の水温を計測しなければなりません。
単純に気温等を計測するのであれば、ENV HATやENV Unitを使えばよいのですが、今回は水温です。

そこで、今回は「DS18B20」という温度センサを使用します。
DS18B20自体はトランジスタによく似た3端子の素子なのですが、ステンレスで防水処理されたプローブ型のものが売られており、水温を測ることができます。地温とかも測れると思います。

https://www.digikey.jp/ja/products/detail/dfrobot/DFR0198/7597054

Amazonとかでも検索に引っかかりますが、なんか、それらしい値が出るだけの偽物も出回っているようです。あまりにも安すぎる場合は注意が必要かもしれません。今回はDiyStudioが販売しているものを買いました。自分で購入したものは特に問題なく使用できています。
電子工作で安い機器を購入するとき、経験上、DiyStudioのものが比較的しっかり使えて安くあがる事が多いです(というか、気づいたら安いものでちゃんと使えるものにDiyStudioのものが多かった)。安くてもDiyStudioだったら大丈夫なような気がするので載せておきます(とはいえ、ちゃんと使えなくても責任はもてませんので、自己責任でどうぞ)。

M5SticKC Plusとは、1-Wireという通信方式で、測定データをやりとりします。
センサは、分類としては、アナログセンサとデジタルセンサがあります。、アナログセンサは、測定値が電圧の変化として検出されるので、これをM5StickC Plusなどのマイコンが電圧の変化を変換して測定データとして扱います。一方、デジタルセンサは、センサが、測定値を一定の通信方式でデジタルデータとして送ってきます。マイコンはセンサと通信して値を得ます。
通信方式には、SPIとか、I2Cとか、今回の1-Wireとか、いろいろあり、それぞれで得意な部分や苦手な部分があります。
今回のDS18B20は、1-Wireでやりとりするということで、デジタルセンサということが分かります。

「DS18B20 UIFlow」とかで検索すると事例が出てきます。

どうやらカスタムブロックを作られている方がいらっしゃるようなのでありがたく使わせていただきます。

https://github.com/stonatm/UiFlow-custom-blocks/tree/master/ds18b20

使用前の下準備

「DS18B20」を使用するには、プルアップ抵抗(4.7kΩ)を1本かませる必要があります。
プルアップ抵抗は4.7kΩの事例がほとんどなのですが、それだと大きすぎるという記述があるところもありました。まぁ、プルアップできればよいので、抵抗値はそれほど厳密に気にしなくてもよいと思います。自分は、多くの事例通り4.7kΩを使用しました。
直接配線してもよかったのですが、元の状態にあまり変更を加えないほうがいいのかな、と思ってセンサーの配線にはヘッダピンを圧着し、中継用のアダプタをQIコネクタで作成して間にかませました。

直接プルアップ抵抗をつけてもいいと思う

カスタムブロックの使い方

まずは、Githubの該当ページからファイルをダウンロードします。ネット上にはカスタムブロックのダウンロードでつまづいていると思われる例もありました。

Download raw fileからダウンロードします

UIFlowの、Customから、「*.m5bファイルを読み込み」を選択します。

出てきたダイアログで、ダウンロードしたファイルを選択すると読み込みます。

「Custom」に「ds18b20」の項目ができていればOK。

DS18B20カスタムブロックの説明


「Sensor init」ブロックでセンサーの初期化、「convert command」で値の更新、「read temperature」で値の読み出しとなります。かんたん!

ブロック例

1-WireもI2Cみたいにデイジーチェーンで、線を増やすことなく複数のセンサをぶら下げることができるようです。あと、パラサイトモードという、データ線から電源供給までしてしまうモードとかもあるとか。どちらも、このカスタムブロックでは対応してないっぽいかな?
まぁでも十分便利なのでありがたく使わせていただきます。感謝。

また、プログラムを保存した後、再度読み込む際には、先にカスタムブロックを読み込んでから保存したプログラムを読みましょう。
また、関数の中にconvertcomandとかread tempretureとかがあるとこのブロック定義が読めないことがあるようなので、関数の中には入れず、むき出しのまま使うことをオススメします。
注意点はそのくらいでしょうか。

温度計測部はこんなもんでしょう。

いいなと思ったら応援しよう!