安価なマイコンで水温を測定できるものを作ってみる!(Arduino,ESP-WROOM02,ESP-WROOM32)
こんばんは!
今回は安価な水温センサーと、安価なマイコンで簡単に水温を測れる物を作ってみようと思います!
まずマイコンですがArduino、ESP-WROOM02、ESP-WROOM32とタイトルに記載していますが、
価格的にみて今回はESP-WROOM02を使いたいと思います!
(配線やプログラムは全く同じになりますのでどれを使っていただいても大丈夫です。)
これ以外にもいろんなマイコンが存在しますが私的にはこの3種類が一番安く、
使いやすく便利なのでこれらに絞らせていただいてます^^
正直、水温計なんて数百円で買える時代ですのでわざわざ作る必要は無いかと思いますが、
こういった知識を身に着けることでアイディアなども広まりますし、
自分オリジナルの物を作れちゃうわけですので是非挑戦してみましよう^^
それでは早速作ってみたいと思います!
①「部品用意」
・水温センサー(今回はDS18B20という温度センサーを使用します。)
・低損失三端子レギュレーター 3.3V1A TA48033S
・電解コンデンサ 47μF35V(秋月電子で購入すると、3端子レギュレータに付属されています。)
・セラミックコンデンサ 0.1μF(秋月電子で購入すると、3端子レギュレータに付属されています。)
・LED(起動などを確認するためのメッセージ用に使う。なので任意)
電子工作ステーション 10円+送料(500円以上で送料無料)
秋月電子 10円+送料
・タクトスイッチ(2個)(任意ですがあると便利です)
電子工作ステーション 9円+送料(500円以上で送料無料)
秋月電子 10円+送料
・抵抗 4.7KΩ (1個)
電子工作ステーション 1本3円+送料(500円以上で送料無料)
秋月電子 100本100円+送料
・ブレットボード(どんな形状でもOK)
電子工作ステーション 250円+送料(500円以上で無料)(400穴)
秋月電子 270円+送料(400穴)
・ミニブレットボード(あると便利)
秋月電子 130円+送料(130穴)
・ジャンパーワイヤー(オス・オス)(3本)
電子工作ステーション 1セット(10本)100円+送料(500円以上で無料)
秋月電子 18本180円+送料
※水温センサーをブレットボードに差せるようにするために使います。
はんだ付けして付けますので、勿体ないという方は、別の物で代用しても問題ありません。
(ブレットボードで回路を組むとき、見栄え良く綺麗に繫げられますのであると便利)
※任意(楽したい方向け)
ESP-WROOM-02開発ボードを使うとすぐに開発ができるよう回路が組まれているため、上記の「ESP-WROOM02」「超小型USBシリアル変換モジュール」「3端子レギュレータ」「電解コンデンサ 47μF35V」「セラミックコンデンサ 0.1μF」「タクトスイッチ」は不要になります!
※水温センサーをブレットボードに差せるようにするため、はんだ付けが必要になります。
②「配線」
・ESP-WROOM02の回路は再び下記サイトさんの「6.各部品の接続」を参考にしていただければと思います。
WROOM 単体に Arduino スケッチで Wi-Fi ストリーミング
ESP‐WROOM02本体の接続箇所
pinナンバー | 状態 |
---|---|
GPIO 15(IO15) | LOW |
GPIO 2(IO2) | HIGH |
GPIO 0(IO0) | LOW |
EN | HIGH |
※GPIO 0(IO0)をLOWの状態で起動させるときのみ書き込みモード、
LOWじゃなければ実行モードになります。
なのでGPIO 0とGNDにダクトスイッチをかましとくと後が楽です。
※RST(リセット)もLOWにすることでプログラムのリセットが行えますので
RSTとGNDにダクトスイッチをかましておくと後が楽です。
※画像をクリックすれば拡大できます。
※ESP-WROOM-02開発ボードをご使用の方はここからスタート。
・水温センサー(DS18B20)の接続箇所↓
DS18B20 | 接続箇所(接続pin) |
赤線 | 5V( + ) |
黒線 | GND( – ) |
黄or青線(データ線) | IO12 |
※赤線と黄or青線の合間に4.7Kの抵抗を付けましょう。
※水温センサーは、ブレットボードに差せるように、ジャンパーワイヤー(オス・オス)を水温センサーの端子にはんだ付けします。
勿体ないという方は、お好きな方法で問題ありません‼
完成するとこんな感じになります↓
・ESP-WROOM02の例↓
※上記の写真は水温センサーの線ブレットボードに差し込めるように、
ジャンパーワイヤー線と水温センサーの線をはんだ付けしています。
そのため今回の写真ではオレンジの線がデータ線になります。
※画像をクリックすれば拡大できます。
・Arduinoの例↓
※ちょっとごちゃごちやして申し訳ないです(;^ω^)
「豆知識」
・+とデータ線の合間に抵抗を付けることをプルアップ抵抗といいます。
HIGH(5V)かLOW(0V)信号を確実に伝える為に取り付けます。
・抵抗がない場合はHIGH/LOWの状態が不安定となり、マイコンが誤動作を起こす元になるので
抵抗は必ず付けましょう。
③「開発環境、ライブラリー用意」
・こちらをご参考に⇩
Arduino IDEでESP-WROOM-02(ESP8266)とESP-WROOM-32を使えるようにする!(Windows10)
※Arduinoでチャレンジされる方は必要ありません。
※WSP-WROOM32でチャレンジされるこちらのサイトをご参考にお願いします。
・今回使用する水温センサーを簡単に使える様にしてくれるライブラリーがありますので、GitHbuで公開されているライブラリ、「DallasTemperature.h」と「OneWire.h」というものを使わせて頂きます。
ArduinoIEDにこちらのライブラリーを入れてください。
手順は、こちらとこちらからライブラリーをダウンロードして解凍します。
・解凍が終わりましたら「Arduino-Temperature-Control-Library-master」と「OneWire」というフォルダーごと「libraries」(C:\Users\…..\arduino-1.8\libraries\)に入れるだけです。
④「プログラム」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <DallasTemperature.h>//ライブラリー #include <OneWire.h>//ライブラリー #define ONE_WIRE_BUS 12 // データ(黄、または青)で使用するポート番号 #define SENSER_BIT 9 // 精度の設定bit #define LED 14 //メッセージLED OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup(void) { Serial.begin(115200); //温度表示確認用(Arduinoで使用する場合は9600にしてください。 sensors.setResolution(SENSER_BIT); pinMode(LED, OUTPUT); } void loop(void) { sensors.requestTemperatures();// 温度取得要求 double waterTemperatures = sensors.getTempCByIndex(0); // 温度センサーから摂氏気温を取得 Serial.println(waterTemperatures); //温度の取得&シリアル送信 //1秒点灯 digitalWrite(LED, HIGH); delay(1000); digitalWrite(LED, LOW); } |
※ビルドが通らずエラーが出た場合、
「ボードGeneric ESP8266 Moduleに対するコンパイル時にエラーが発生しました。」
というエラーが出た場合は、エラー内容を確認してみましょう。
「In file included from C:\Users\…\Documents\arduino-1.8.5-windows\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.h:22:0,」
(エラー内容が表示されていない場合、エラーが表示されている所をカーソルで少し上にやると表示されてます。)
こんな感じのエラー内容の場合Arduino-Temperature-Control-Library-masterの中にあるDallasTemperature.hファイルがなにかおかしいみたいなので消すことによって解決しました。
(同じ名前のファイルが2つ並んでいたら容量の小さいほうを消してみましよょう)
※ビルドをした際に、こんなエラーが出たら書き込みモードになっていないのが原因です。
(GPIO 0(IO0)をLOWの状態で起動させるときのみ書き込みモード、LOWじゃなければ実行モードになります。)
改善されない場合はもう一度②「配線」を読み直してみてください。
2018/7/21追記
※シリアルモニターに変な暗号が表示されたり、何も表示されない場合、シリアルモニターの右下にあるbpsが115200bpsになっているか確認してください。
※シリアルモニターが選択できない場合、まずツールの中にあります「シリアルポート:COM 」が選択されているか確認してください。
これが選択できない状態だたUSBケーブルが原因の可能性があります。USBケーブルは必ずデータ通信が可能なものを使用しましょう。
こんな感じで対応していけば解決できるかと思います!
⑤「実行結果」
シリアルモニターで確認してみるとこんな感じに表示されていくと思います!
こんな感じに表示されれば成功です^^
手でセンサーを握ったりしてみると数値が変わるのが確認できるはずです。(5秒程の遅延があります。)
※取得温度が-127と表示されていたら接続がおかしい可能性がありますので回路を見直しましょう。
⑥「体温計と比べてみた」
・体温計と水温センサーの精度を確かめてみました!
まず自分の体温を普通に測ります↓
子供のころは36.2℃が平熱だったのに!
高齢になると平熱が下がるというのはまさにこのことですかね?
(測定日時点では22歳、そんなことを言ってたら怒られますね(笑))
次に、水温センサーで同じ様に測ってみました↓
ほぼ合ってますね!
しかし、10分くらいかかりました(笑)
・結果として、精度はかなり信用して良いと思いますが、
小数点第1まで正確に測定する場合は数分~数十分掛かるみたいです。
ただあくまでも水温を測る物なのでさほど影響はないかと思います。
以上、ご訪問ありがとうございます^^
ご不明点などがございましたらお気軽にコメント下さい^^