2016年6月12日日曜日

100円のデジタル温度センサー+Arduino


初めてこれを見つけた時には、あんまり安いので何かの間違いかと思いました。デジタル式の温度センサーで1個100円(高精度12ビットI2C接続デジタル温度センサ STTS751)。しかも5個買えば1個80円。ってんで、5個買いました。電源3.3vですが、I2Cピンは5vにも対応しているので3.3v電源ならばArduino, mbed, ESP8266, ラズパイなど幅広く対応可能です。とりあえず温度だけ測定したいという用途に向いてます。

秋月のサイトから
基板は以前買ったSOT23オペアンプ用がまだ手元に残っているのでそれ流用します。この基板にはオペアンプのピンに合わせてパスコンのパターンもついているのですが、STTS751とは合いません。普通に「SOT23変換基板 金フラッシュ」を使う方がいいと思います。

秋月のサイトから
で、これをホットプレートでリフロー。ピン間隔狭いので横一列にペーストを塗って乗せただけです。まとめて3個、作っておきました(基板の在庫が3枚しかなかった)。



Arduinoは標準のWireライブラリだと内部でプルアップするのでプルアップ抵抗外付けは不要です。チップは3.3v電源なのですが、SDA/SCLについては5.5vまで対応可能なので、Arduinoでも問題ありません。

仕様書p27から

Arduino nanoパチで試しました。

Arduino nanoSTTS751
A46 SDA
A54 SCL
3v33 Vdd
GND2 Gnd

余談ですが…うちにはつい衝動買いしたArduino nanoパチが大量にあるのですが、Arduino nanoパチは附属のピンヘッダよりもピンソケットの方が使いやすいのではないかと思います。少なくとも複数のArudino nanoパチをお持ちの場合は、1つをピンソケット仕様にしておくと実験の時にムダにブレッドボードを使わなくていいので、お手軽です。というよりも300円のnanoパチに150円のミニブレッドボードを専有されるのはもったいない、という貧乏心なのですが。



で、テスト。手っ取り早く、「arduino stts751」でぐぐったら、コードが出てきたのでさっくり動かします。動きました。

このコードには問題がありました。修正版を後日公開します。とりあえず風呂温度センサーについては修正版を公開しました。

今回これを引っ張りだしたのは、「風呂の水温計測」(ESP-WROOM-02で温度データ収集)に使うためです。以前、ESP-WROOM-02とアナログセンサーで作ったのですが、デジタルセンサーの方が校正などの手間が省けて便利なので。

追記:組み込みました。
100円温度センサー+ESP-WROOM-02でWiFi風呂水温計

追記:ライブラリ書きました。
https://github.com/TareObjects/STTS751

追記:とんでもなくダメなバグをfixしました
グラフがところどころおかしな動きを見せるので、センサーからデータを取り出すところに問題があるのかと大騒ぎしたのですが、浮動小数を文字列に変換する関数に致命的な間違いがありました。余りにもダメなバグなので、晒しておきます。

void ftoa(float f, char *buf) {    // wrong ftoa code
  float a = int(f);
  float b = int((f - a) * 100.0000);
  sprintf(buf, "%d.%d", (int)a, (int)b);
}

以上。codeで首を吊るべきレベルだ…。さすがに自分で書いたものだとは思いたくないけど、そうだとしても気づかない時点で同罪だ…。

なお、浮動小数から文字列への変換にはdtostrfが使いやすいです。dtostrf(浮動小数,整数部最小桁数,小数部桁数,char*)で使えます。整数部最小桁数よりも小さい場合はスペースが入ります。

0 件のコメント:

コメントを投稿