MCP9700AとSHT31を使用した温度計の製作

最終更新時間:2021年06月19日 14時19分44秒

[公開:any]

[電子工作/AVR]
[ATTiny85,AVR,MCP9700A,SHT31]

origin 2021-06-19


 製作したPWMファンコントローラーの効果があるのか温度変化を見てみようと温度計を作ります。マイコンはAVRのATTiny85として、I2Cで制御するOLEDを表示に使用します。OLEDのフォントは、気温と湿度のみを表示できればいいので、横5文字縦2行あればOKです。このため25x32ドットのデカ文字としました。ただ、AVRのSRAMとEEPROMは、それぞれ512byteなのでフォントが展開できません。ATTiny85は8Kbyteのフラッシュメモリがあるので、数字や記号のみのフォントを作成してプログラムと一緒にフラッシュメモリに格納しました。

SHT31温度計

 センサーにはI2C制御可能なSHT31を使用したのですが、測定場所の狭いスペースに入らないので、急遽MCP9700AというIC温度センサーを入手しました。SHT31とMCP9700Aの温度測定値を比較してみました(左画像)。最大で1℃の差が出る時がありますがこんなもんでしょう。一方、MCP9700Aの2個使用して温度測定値を比較してみました(右画像)。最大で0.5℃の差がありました。思ったよりもばらつきが小さいようです。

SHT31とMCP9700Aの比較MCP9700Aの精度比較

 回路図です。MCP9700Aによる温度2系統とSHT31による温度・湿度をプッシュスイッチで切り替える方式とします。MCP9700Aの出力はローパスフィルターを入れないとノイズによる測定値のバラツキが大きくなります。

SHT31とMCP9700Aを使用した温度計の回路図

 PCBEで実態配線図を書きました。ジャンパーは0Ωの抵抗を使用しています。


 秋月電子の小さい基盤に実装しました。MCP9700Aは、50冂度のシールドケーブルを使用して接続します。

SHT31とMCP9700Aの温度計

 ケースは秋月電子のプラケース(小)です。SHT31はセンサー部分が外気に触れるようにケースに穴をあけて固定します。センサーを切り替えて温度2系統と温度・湿度の測定が問題ないことを確認しました。

SHT31とMCP9700Aの温度計SHT31とMCP9700Aの温度計

 MCP9700Aの一つをアマチュア無線で使用する電源DM-330MVの上部放熱フィンにクリップで止めています。もう一方は、背面の冷却ファン出口の温度を測定しています。ダミーロードを使用して100Wの断続送信を行うと排気が温かくなり、筐体が発熱しますが、電源上部のファンで冷却するとある程度は発熱を抑えることができます。ただし、せっかくのファンコントローラーですが低速回転では冷却効果が少なく、ほぼ全開で回転させる必要があることがわかりました。(全開での爆音を嫌って作ったのですが・・・)


 AVRのプログラムです。Atmel Studio7をアップデートしたらMicrochip Studio7と名前が変わりましたが操作性は同じでした。Microsoft Visual Studioベースですね。ライターのAVRISPmark2の調子が悪く書き込みに失敗することが頻発しました。AVRのライターは、廉価な製品が少ないので故障したら面倒です。フォントは数字と記号のみです。また、”$”を”℃”に置き換えています。フォントサイズはいろいろと試しました。12x24ならすべての文字がフラッシュ上に載せられます。それ以上のサイズは、プログラムをシンプルにするか文字を少なくするしかありません。I2Cのライブラリは、Tiny用ならどれでもOKです。今回は、ばんとさんがGithubで公開されているTinyI2CMasterを使用させていただきました。

  • メインルーチン main.c(52)
  • OLEDヘッダファイル oled.h(39) 
  • OLED描画プログラム oled.c(43)
  • デカ文字フォント(25x32) font25x32.h(50)

このテンプレートをデザインした者がへたれなので IE6 には非対応です。IE7FirefoxSafariOperaChrome など、モダンなブラウザを利用して下さい。


▲ページ Top へ...