一昨年、Arduinoで温度計を作りました。記事は、こちら。
今回は、7セグメントLED表示の練習を兼ねて、Arduino(あちゃんでいいの)で、7セグメントLED表示の温度計をブレッドボード上に作ってみました。7セグメントLEDは、大きく明るく非常に見やすいです。
PICは、LED表示を前提に設計されたと思われ、7セグメントLEDとの相性は良いのですが、Arduinoと7セグメントLEDとの相性は、今一つです。
Arduinoで、7セグメントLEDを使うには、少し工夫が必要です。そこで、例によって使用例をWeb上を探しました。
7セグメントライブラリ(SevSedLibrary)というのがあり、GitHubからダウンロードできます。4桁7セグメントLED用のライブラリで、ダウンロードしたSevSeg-masterを解凍し、SevSegにrenameしてArduinoライブラリに加えて使います。
が、今回は、このライブラリを使わないでやってみました。Web上の記事からあちこち使わせていただきました。記事をUPされた皆さん、ありがとうございます。
温度センサーは、手持ちのLM35DZを使っています。温度の測定範囲は、0~100℃で、出力は10mV/℃の使いやすいセンサーICです。
ArduinoのAREFに1.023Vを加えると、センサーの出力(mV)を10で割れば、0.1℃まで直読できます。
温度の測定は、1秒間隔で行います。これは、Arduino(ATmega328P)内蔵のタイマーの割り込みを利用します。
これを使うには、MsTimer2ライブラリを使います。MsTimer2.zipはこちらからダウンロードできます。
回路図です。
7セグメントLED(カソードコモン)は、秋月電子で販売している3桁の赤色LEDのC-335SRを使いました。
電流制限抵抗を300Ωにした場合、 LEDの1セグメント当たり約9mA流れますので、すべてのセグメントが点灯した場合、約70mA流れArduinoのI/Oポートの最大電流40mAを超えてしまいます。そこで、2SC1815でLEDをスイッチングします。
7セグメントLEDの各セグメント(A,B,C,D,E,F,G,DP)には、Arduinoの2~9番ピンを割り当てました。ダイナミック点灯として、各桁のON/OFFには、11~13番ピンを割り当てました。
センサーからの出力はA0に加えています。
ブレッドボードに組んだ様子です。
基準電圧は、10kΩのボリュームで調整してAREFに加えます。
他の温度計を見ながらボリュームを調整して、正確な温度を表示するようにします。
小数点は、2番目のLEDが指定されたときに表示するようにソフトで処理しています。
ノイズ対策をほとんどしていませんので、0.1℃の値は、頻繁に動きます。移動平均をとるなどして、もう少し安定させる必要がありそうです。
なお参考までに、詳しい説明とスケッチは、JH7UBCブログに掲載しました。