• 公開日:2023年11月21日
  • | 更新日:2024年02月09日

アウトドア男が挑む「温度制御」~第3話 ソフトウェア編~

第3話 ソフトウェア編

こんにちは!2023年度入社の新人FAE 「KAZU」です。

第2話ではハードウェアの製作についてお話ししました。
今回は大苦戦したソフトウェアの制作から完成までお話していきます。

第2話はこちら

ソフトウェア制作の手順

ソフトウェア制作の手順は以下のように行いました

1,I2Cのサンプルコードを用いてコードとI2Cの勉強をする。
2,フローチャート通りにペリフェラルごとにコーディングしていく➡都度動作確認を行う
3,すべてのコードを統合していく

実際にはこのようにいきませんでした。I2Cのサンプルコードというか初めてのC言語に慣れるまでに相当な時間を要しましたし、マイコンという存在を学ぶのに大変苦労しました。

サンプルコードとの闘い

私の製作実習の一番苦労したところはやはりサンプルコードの理解やC言語との闘いです。

この戦いを制するために私が行った行動は、I2Cのサンプルコードをプリントアウトして、そこにベタ書きされた
レジスタの意味を調べ、コードの解読することでした。今となってはこの方法で理解できますが、当時の私がそれをしたところで理解できるわけがないのです。無駄な1週間を過ごしてしまった記憶があります。

私がまずとるべきだった行動はI2Cの理解、データシート、ユーザーズガイドの理解、C言語の基本的な理解だったのです。基礎ができずに訳の分からないサンプルコードに飛びつき、大混乱してしまいました。

結果的にI2Cを用いたLCD表示のコーディングを終え、実機に搭載して動作確認が取れた時点で、作業時間は残り6日だったのです…

圧倒的な追い上げ

重めのI2Cの攻略ができたらいつの間にか基礎ができており、他のサンプルコードを見たらなんとなく分かるようになっていました。
ここから追い上げが始まります。

まずは

温度センサでヒータの温度を感知し、設定温度+1 ℃に達したら機械式リレーがカチッと動きヒータをOFFにし、冷却されて設定温度マイナス0.5℃に達したらまたONにするという機能
(冷却の方が時間がかかるので下の閾値は設定温度マイナス0.5℃にしました)

の実装に移りました。

先輩や同期からC言語の分岐の書き方や関数の作り方を学び、コーディングしたら実装してみていざ実行してみると!

温度を読み取って閾値に達したら、カチカチとリレーが動いて機能することが確認できました!
やっと形になってきて既に達成感がヤバい…

以降のステップは以下のようになります。詳しいモードについては第1話をご参照ください。

1,上記モジュールに現在の温度がリアルタイムで分かるようなLCDの表示の実装
2,次に、タクトスイッチとLCDで設定温度を変えれるようにする
3,曲げセンサを取り付けて、コップを入れて曲がったら温度設定のモードに入るようにする
4,コップを抜いて一定時間経過したらすべての機能が停止し、初期モードに入るようにる
5,LEDで現在のモードの確認など、細かい仕様の実装

これらの実装は先輩のフォローもあって、4日ほどでクリア!
コーディングの仕方も分かってきて、楽しく作業することができました。

しかし、思いもよらぬトラブルが発生するのでした。

温度センサがカップの温度を読み取れない…

ここで第2話の伏線を回収していきます。
そう、当初カップの底に温度センサを取り付け、薄いアルミなのでほぼ水温と変わらない温度を読み取れると考えていたのですが、
いざ実装してみると

ほぼ温度の変化を読み取ることができなかったのです

何たる事態。アルミ缶の構造に問題があると思い、調べてみることに。
するとどうやら製造過程の問題で、アルミ缶の底部は側面に比べてかなり厚みがあり、熱伝導が悪くなるようでした。よく考えたらそりゃそうだよなと思い、気づけなかった自分を悔やみました。

側面では測定が可能なので、急遽ホルダの側面に温度センサを取り付けることに。

このようにアルミシートを切り抜き、ホルダの側面を熱したカッターで溶かし切ることで、ジャンパーが通る隙間を作り、温度センサを取り付けることができました。

再度実験してみると、うまく読み取れるようになりました。
最後に、キャリブレーションする必要があるのか実験してみることに。
測定条件は、

・温度センサでカップの側面を測り、熱電対で水温を直接測る
・温度センサが常温➡30℃➡35℃・・・60℃ と5℃間隔のタイミングで熱電対の温度を記録
・保温モードの60℃以降は温度センサが61℃と59.5℃のタイミングで熱電対の温度を記録

このように測定条件下で、温度センサが測った温度と実際の水温との差を確認することができます。

結果をプロットしたものが以下になります。

このように、温度センサはヒータが直接過熱しているアルミ缶を測ってるため、熱電対が測った水温よりも若干温度が高くなりました。しかし非線形であり、誤差の範囲なのでキャリブレーションの必要はありませんでした。

それよりも上記の右側のグラフの熱電対のプロットを見る通り、

かなり平衡状態が取れているではないか!

これを考察してみるとおそらく、
アルミ缶よりも水の方が温度変化が少ないことが原因と考えられます。
温度センサが読み取ったアルミ缶の温度が上下に変化する中、水温はあまり変化せず、波の中心を貫くように一定に変化しています。
アルミ缶に比べて水は温まりにくく冷めにくい。
そんな当たり前な熱伝導率の違いがこんな良い結果を生んでくれました。

完成

やったことのないコーディングという作業、予想外の事態を乗り越え、発表2日前に無事に完成させることができました。
前日は資料作成を行い、とうとう発表本番を迎えるのでした。

次回最終回!

無事に発表できるのか!お楽しみに!

第4話はこちら