2016年2月21日日曜日

ESP-WROOM-02+放射温度計+サーボ = 遠隔温度計測

video

autolayout面倒くさい

■やりたいこと■

赤外線放射温度計というものがあります。リフロー用に2000円で買ってきて、リフローだけでなく餃子を焼くときのフライパン温度やチャーハンに卵を投入する前のフライパンの温度やカラアゲを作る際の油の温度計測などに幅広く利用しております。

このセンサー部分が手に入りました。センサーを以前使ったサーボモータのチルト&パン台(Crowtail- Pan- Tilt)に固定しておき、遠く離れたところからiPhoneで角度を変えるとその方向に首を振り、計測した温度を送り返してくれる…というものを作ります。

以前サーボモータを動かした時には、単に首振ってるだけで考えてみればESP-WROOM-02を使うメリットというのはまったくなかったのですが、今度はしっかりとセンサーを駆動します。

リモートセンシングやで。

■要素技術の確認■

赤外線放射温度センサーMLX90614のライブラリ、いろいろ試しましたが、一発で動いたのはコレでした。
https://github.com/adafruit/Adafruit-MLX90614-Library

MLX90614のピンの並びは残念ながら手持ちのESPボードと異なっているので、変換ケーブル?を作ります。単にGND-VCC-SDA-SCLをそれぞれの並びに合わせてヘッダピンにハンダ付けしてスミチューブで固定するだけです。

サーボは以前にも使ったElecrowのtilt&panです。サーボのコネクタはマイコンでは使いにくいのでぶった切ってピンヘッダと付け替えます。その際に2ch分をコンパクトに使えるように3ピンと4ピンのヘッダを使い、GNDとVCCは共通、信号線は1つずらして接続します(GND-VCC-SIGNALとGND-VCC-NC-SIGNAL)。こうすればブレッドボードに並べて挿して共通の電源とそれぞれのSIGNAL入力をつなぐだけで済みます。

制御入力と表示にはiPhoneを使います。最初iPhoneをうにうに傾けるとそれに合わせてtilt&panが動くようにしたのですが、表示が大変見づらいという欠点が発覚したので画面上の●をドラッグする方式に変更しました。●の座標をTCP/IPで値を送ります。

video

あとはESPとiPhoneの通信ですが、ゼロコンフィグとかやると死ぬので固定IP決め打ち一発でTCP/IP接続してデータを送受信します。TCP/IP通信にはCFNetworkのinput/output streamを使ってます。

■サーボとの接続■

ESP-WROOM-02にサーボとMXL90614を接続します(前回記事:ESP + 2軸サーボ)。

ただ、前回ワイヤ直結したら抜けやすくて大変不便だったので、crowtail仕様のコネクタを切断してピンヘッダを取り付けました。その際、3ピンのピンヘッダと4ピンのピンヘッダを用意し、4ピンのは「信号」「空き」「Vcc」「Gnd」、3ピンは「信号」「Vcc」「Gnd」の並びで作りました。こうすれば、ブレッドボードに挿した時に配線が少なくてすみます。
手前が4p、奥が3p。右からVccとGndを引いてます

IO14, IO15はジャンパ経由でESPと接続
テープで剥がれる机の塗装orz

■MLX90614との接続■


これはI2Cなので、Vcc, Gnd, SDA, SCLをそれぞれ接続します。今回購入したモジュールはプルアップ抵抗付きなので、ESPとつなげばおしまいです。これもヘッダピンとワイヤをハンダ付けして専用ケーブルを作りました。ESPのIO4とSDA、ESPのIO5とSCLを接続してください。

なお、私はワイヤの色をSCL白、SDA緑、Vcc赤、Gnd黒と決めています。

こっち見んなw(お約束


■MLX90614とサーボ■

3Dプリンタが届くのを待っていたのですが、3月一杯に延期されてしまったので、とりあえずテグスで括りつけました。ははは(力ない笑い

■ESP用プログラム■

ESP_WiFiTelnetToSerialというサンプルプログラムを参考にしました。大まかな構造としては、

  • iPhoneからデータが届いたら、それを目標座標とする
  • 1秒間に100回のタイマーで、サーボの目標座標目指してゆっくり指示座標を変えていく。これはいきなりiPhoneからの値が飛ぶとサーボが高速で動いて電力消費やらメカ強度やらに悪影響を与えるので、それを防止するためです。通信でメカを動かす場合の基本ですね。
  • 1秒に1回、MLXからデータを読み込んでiPhoneへ送信する

サーボの制御と温度データの送信を切り離しています。こうすることでプログラムが複雑にならないようにしています。



■iPhone用プログラム■

最初swiftで書いてSIOSocketがうまく組み込めずに挫折した(設定ミスorz)とか、その後obj-cでSIOSocket使ってみたけどしっくりこないので捨てた、というのは割愛します。

プロジェクトは後日githubに公開します。とりあえずViewControllerと座標ドラッグ用のControlViewをgistにまとめて貼っておきます。今気づいたけど、ControlViewじゃなくてControllViewだな(恥


0 件のコメント:

コメントを投稿