Top>電子工作 > arduino > 水温計 > システム構成

水温計の製作

水温計外観
 水槽を使った実験用に、室温と水温、および時間を表示し、1時間おきにSDカードに記録していく装置をarduinoで作ってみることにしました。
 使った部品を制御するモジュールはほとんどネットで手に入るので、それらを組み合わせて構成していけば、思った通りのものが比較的簡単にできます。arduinoを使った電子工作入門用の課題としては、ハードルもさほど高くはなく、適度な難易度の課題だったかなと思います。
 最初は、そのほかにも、湿度と気圧も取り入れてみようかなと考えていたのですが、これらは部品が高価で、その上精度もあまりよくないようなので、とりあえずシステム構成からは外しました。

システムの構成

 arduinoは何でもいいのですが、マイクロUSBが使えた方が接続コードが簡単に手に入るので、「HiLetgo UNO R3 ATMEGA328P-16AU CH340G マイクロUSB Arduinoと互換」を使っています。
 arduinoIDEのボードの設定では、Arduino/Genuino Arduinoを選択します。

   

 液晶は、温度を2つ表示ですむなら、2行表示で十分、それ以上を表示させるなら、4行表示が使い勝手がいいです。プログラム的には、2行表示でも、温度計が何個あっても大丈夫なように作ってはあります。
 2行表示は、「HiLetgo DC 5V HD44780 1602 LCD ディスプレイモジュール 16×2キャラクタ LCDブルーブラックライト 」、4行表示は「HiLetgo 5V 2004 20X4 キャラクタ LCDディスプレイ IIC I2C TWI SP I シリアル インタフェース 0x27/0x3f イエロー 」です。
 2行は横、半角文字16字、4行は20字なので、4行の方がだいぶん表示に余裕があります。でもその分、4行の方はずいぶんと割高です。
 これらをarduinoと接続するには、これら単独でも可能ですが、その場合接続が複雑になりすぎます。「HiLetgo 2PCS 5V IIC/I2C/TWI/SPI シリアル インタフェース ボード モジュール Arduino 1602 LCD ディスプレイ」を使うとコード4本の接続になりますから、これを使う方がずいぶん回路が簡単になります。
 ディスプレイとインターフェースボードとは、逆さ向きにして直接ハンダ付けをします。曲がって基盤同士が接触しないように、一応ホットボンドを挟んで固定しています。
 これをクリアケースの蓋にねじ止めします。この時強く締めすぎると、すぐにプラスチックにひびが入るので、注意します。また、ねじが長すぎると電池ケースにつっかえてしまうので、ギリギリの長さのねじを選びます。

 タイムモジュールは、「HiLetgo DS3231 AT24C32 時計モジュール リアル時間時計モジュール IICモジュール RTCモジュール Arduinoに対応 」 です。
 これには温度計がついているので、別途温度計を用意しなくても室温を測ることができます。
 温度計の精度はまあまあですが、今回のように箱の中にこの部品を閉じ込めてしまうと、arduinoの熱を拾ってしまうようで、あまり正確な室温にはならないかもしれません。
 正確に温度比較をやったわけではありませんから印象だけの話ですが、水温計との調和を考えるなら、DS18B20を別途買って、取り付けた方がいいかもしれません。
 DS18B20を増やしても、プログラム的には何も変更なしで使えるようにしてあります。
 温湿度センサ モジュール DHT11という製品もありますが、これの温度表示は全くあてになりません。研究などに使うためには信頼度0です。「DHT22の方が精度がよい」という情報もありますが、こちらは私は確かめていません。
 湿度・気圧が必要なら、GY-BME280というのもあります。こちらは私が持っているやつは、「湿度が本当かな」というのと、かなり高価です。
 もしこれを使うなら動作電圧が3.3Vなので注意しないといけません。他の部品のように5Vを入力してしまうと、一発で壊れます。
 また、GY-BMP280は安価ですが、湿度が測定できません。

 マイクロUSB記録用には、「HiLetgo Micro SD/ TF カードモジュール シールド モジュール 6 ピン SPI 」を使いました。
 シールドを作るとき、ICSP端子は接続しにくいので、SCK→PD13、MISO→PD12、MOSI→PD11に接続してあります。
 CSはサンプルコードの接続先はPD10になっていますが、「SD_SS 3」と指定して、PD3と接続しています。これは、キーパッド付ディスプレイシールドに接続するときにPD10を絶対使わないといけないためです。これを使う気がないなら、SD_SSを10のままでも支障はありません。

 工作を楽にしようと思えば、「HiLetgo データ ロガー モジュール ロギング シールド データ レコーダ シールド Arduino UNOワット/ SDカードのために」というシールドがあります。
 これはSDカードとリアルタイムクロック(RTC)をセットにしたシールドです。温度計は付いていないので、室温が必要なら、別途基板上か、外にDS18B20を取り付けます。
 もう既にシールドの形になっているので、工作はずいぶんと楽です。
 ボタン電池がCR1220なので、100均でどこでも手に入るという訳にはいきません。近所のセリエにはありました。
 プログラムは、RTCモジュールがDS1307なので、これも無改造で使えるようにしようとすると複雑になりすぎるため、別途この部分だけを書き換えて対応します。

 「DS18B20使用 防水型 温度センサー」。これを必要な本数用意します。プログラム的には何本でも増やすことができるようにしてありますが、ハード的には今回は5本までつなぐことができます。接続本数を増やすには、電源と計測端子の個数を多くするだけです。
 DS18B20用の接続ピンは、「ONE_WIRE_BUS 2」と指定して、PD2に接続するようにしてあります。
 プラスチックケースからコードが出るところは、こすれて傷みやすいので、ゴムブッシュを付けて保護しました。
 また、コードが引っ張られた時に、接合部に力がかかって取れてしまわないように、ロックタイを巻き付けて、抜け防止をしています。
 中国製のこの手の部品は、防水が不完全なものが結構あるようで、私が購入したものも、何個か途中で動かなくなりました。テープを剥がして防水をやり直し、もう一度熱収縮チューブを使って体裁を整えて使っています。

 「HiLetgo 電子部品抵抗バッグ 1/4W金属膜 1%五色環 25種類各20pcs 合500pcs」
 別にこれほど大量に抵抗がいるわけではありません。
 DS18B20をI2Cソケットに繋ぐ際、1本だけは4.7KΩでプルアップしないといけません。何本DS18B20を繋いでも、最初の1本だけをプルアップしておけばOKです。
 具体的には、データ線をarduinoにつなぐとともに、4.7KΩの抵抗を経てプラス線にも接続します。
 温度センサーの取り付け部分にブレッドボード接続ワイヤーを取り付ける際に、抵抗も組み込んで、熱収縮チューブで一体化しました。

 最初、9Vの角型電池は高価なので、単三電池4本を昇圧モジュールでブーストアップして9Vにして、電源としていました。
 しかし、arduinoやディスプレイは結構電力を食うようで、電池で使おうとすると、この構成では、9V角型電池で数時間しかもちません。
 それでは実用にならないので、どうしてもACDCアダプターと降圧モジュールを使って9V電源を確保するかUSBから電源を確保するかする必要があるようです。
 ACアダプターは、9Vと書いてあっても、結構電圧がとても高いものが多いので、降圧モジュールを使って、きっちり9Vにしておく方が無難です。そうすれば、9V以上のどんな電圧のアダプターでも気にせずに使えるので、とても手軽にACアダプターが使えるようになります。
 なお、写真のアダプターは、結構きっちり9Vが出ているので、これを専用として使うなら、降圧モジュールは必要ないようです。

 基盤は、片面のものは使い勝手がよくないです、裏と表とが電気的につながっている基盤を使う方が、配線を簡単にできます。私は、「HiLetgo 10PCS 5*7CM FR-4 ユニバーサル ブレッドボード プロトタイプ PCB ダブルサイド Tinned 1.6mm Thick」を使いました。
 この基盤はちょっと高いだけあって、同じHiLetgoのでも、紙の安価な基板よりもとてもしっかりした作りです。
 これでシールドを作ろうとすると、1本だけピンの列が足りません。SCL端子は接続できないので、A5端子で代用することにします。SDAはA4です。

 「PCBコネクター,SODIAL(R) 50xストレートメスPCBヘッダ40ウェイ2.54mm間隔コネクター 黒」
 電源や温度計のデータ線などをつなぐのに、これで仲立ちさせます。これを使うことで、将来の使用に備えて、何本かの予備ソケットを用意しておくことができます。接続が不安定になりやすい欠点はありますが、逆に言えば、ディスプレーなど、動かさざるを得ない場面で、ハンダ付けが取れた時などの修復を考えなくてもよいメリットがあります。
 必要な長さに折って使います。

 「HiLetgo 40PCS デュポン ワイヤー ジャンパー ブレッドボード 接続ワイヤー (オス-メス)1P-1Pピッチ 2.54mm 長さ 20CM」
 ヘッダーに接続するために、温度計のコードの先端部分に接続したり、ディスプレーとarduinoとの接続に使ったりします。

 SODIAL(R)10Pcs AC 6A 10A 250V オフ、オンスナップSPST丸いボートロッカーの黒いスイッチ」
 もうちょっと小さめのスイッチの方が、使い勝手が良いかもしれません。このスイッチはかなり大きいです。

 このほかでは、以前セリエで売っていたクリアーボックス大です。これは以前売っていたのに、2つ目を作ろうとして探してみると絶品になっていました。遠くにあるセリエでたまたま売れ残りを見つけたので、何個かストックしておきました。
 また、絶縁のために熱収縮チューブ、固定のためにホットボンドなども使っています。
 基盤の隣り合う穴同士を接合しようとしても、ハンダだけではなかなかうまく繋がりません。そこで100均で細い銅線を買ってきて、これを導線としてハンダ付けして使っています。

ブレッドボードで仮組しよう

 これらをはんだ付けで最初から一気に組み上げてしまうと、動かなかったときの後処理が大変なので、ブレッドボードを使って仮組して、動作確認をしてから、本組しましょう。
 中国製部品は、必ずしもきちんと動くとは限らないので、組み込む前の動作確認は必須です。
 回路を組み上げる上での思い違いなども、よくあることですし。

arduino水温計全体 arduino水温計モジュール表 arduino水温計モジュール裏