Arduinoで温度計を作ってみた

Arduinoの登場のおかげで、電子工作の敷居がぐっと下がりました。
今回、Arduinoで温度計を作ったので、メモ代わりに経過を記載しておきます。

注意:この記事では、私が初めて行った電子工作について、困った点・分かり難かった点を備忘録がわりに書いているものです。

プロトタイプ作り

まずは、ブレッドボードとArduino Mini (正確にはその互換品)でプロトタイプを作成します。作成に当たって必要と考えた機能は以下の通りです。

  • 現在の温度・湿度を表示する機能
  • 気温の経過をグラフで表示させる機能
  • 上記を、ボタンで切り替えを行える

この機能を実現するために、まず以下の部品を準備しました。

  • Arduino Nano または 互換品
  • DHT-11
    • 温度を測るのに使います。
    • モジュール化されている物(抵抗がすでについている物)でも、そのままの物でもかまいません。
    • Amazonで購入(173円)することもできますし、秋月電子(Web, 実店舗)などでも購入することができます。
  • I2Cで接続するディスプレイ
    • 3.3V-5Vで動作する物を選ぶと後から便利です。
    • Amazonでこちら(1個440円)を購入しました。
  • ブレッドボード・ケーブル・コンデンサ・抵抗・スイッチ

これを用いての、ブレッドボードでの組み立てとコードの作成を行いました。
(コードは、この記事の最後に記載しています。)

  • 注意点
    • DHT11は、モジュール化している物を使用しないのであれば、シグナルピンを4.7KΩ(推奨)でプルアップします。4つのピンは、左からVCC(3.3-5.5V), シグナル, 未使用, GNDとなっています。
    • I2CはNano, UnoではSDA->A4, SCL->A5です。
    • 2番ピン(モード切替スイッチ)は内部プルアップ(INPUT_PULLUP)を使用しています。

プロトタイプの問題点:チャタリングへの対策

実際に動かしてみると、温度は出るのですが、なんだかちょっと動きが変です。ボタンを押してみるとうまくモードが切り替えられる時もあれば、そうでもないこともあります。

原因はチャタリングです。ソフトウェアだけ考えていると気が回らないのがおもしろい点です。

ボタンを押したときのD2の部分の電圧を測るとこのようになっています。

ボタンを押す前は、内部プルアップ(INPUT_PULLUP)により5Vとなっていますが、ボタンを押すとGNDレベルになった…あとに、また5Vになって、再度GNDレベルになってます。
そのため、1度の押下で、2度の割り込みが発生してしまっています。

ソフトウェアで処理を行って回避することもできますが、今回はコンデンサを配置してハードウェア的に対処してみます。
実際に取り付けてみたところ:

急な電圧変化が抑制されており、チャタリングでの反応が抑制されていることが分かります。

余談ですが、Arduinoの割り込みルーチン内でのチャタリングへのソフトウェアでの対応は、delay関数が使えないこともありやや面倒です。

プロトタイプから完成品へ

いちおうこれで使用できるものができました。が、ブレッドボードのままでは少し使うのには不便です。
ケースに入れて使用できるようにしましょう。

手に入りやすく大きさの手頃なケースとして、FRISKのケースを使用することにします。ケースに入れるにはArduino Nanoだとやや難があります。理由は:

  • 価格的にややもったいない
  • ピンヘッダが邪魔をして、高さ的に収まらない
  • Mini USBであり、Micro USBとくらべるとややケーブルの汎用性が下がる

そのため、今回はATMEGA328Pをそのまま使用することにします。

生のATMEGA328PをArduinoとして使用できるようにしてプログラムを焼きこむのには、手元にあるArduinoをISPとして使用してもいいのですが、今回はUSBaspを使用しました。
5V, 8MHzの設定で書き込みを行なった後、水晶振動子を最終的に使用しなくて良いようfuseを変更します

USBaspの使用で困った点として、最初の書き込みはJP3をショートさせて低速モードを使用しないと書き込みができませんでした。なかなかうまくいかず調べたところ、ATMEGA328Pは内部クロック1MHz相当で出荷されるとのことです。

秋月電子通商で購入したフリスクケースサイズの基盤に半田付けを行い、USB-microでの給電でどこでも使用できるように致しました。

やってみて思ったこと

  • コンデンサと抵抗はあらかじめ何種類もを組み合わせている物を買っておくと便利です。電子部品取扱店であれば、言えば奥から出てくると思います。ほかにもスイッチやLEDなど一通りセットになったものもAmazonで購入できます。
  • 都内の方は秋月電子通商での買い物を行うのが良いと思いますが、私は神奈川なのでサトー電気 横浜店・町田店が便利でした。

ソースコード

コメントを残す