ニキシー管からVFDへ移行するまでの短い期間に製造された表示器に、温度計を追加しました。
SEPTANIX J4923A
このオレンジ色の表示器は、Canon Canola L1211という、1970年代の古い卓上計算機の表示器に使われていました。ニキシー管の改良版として登場したこともあって、7セグメント型の表示器ではありますが、点灯方法はニキシー管のような方法です。それらについて詳しくはこちらをご覧ください。
この表示器をESP32で制御して、インターネットから時刻を取得して表示するNTPカレンダー&時計を作りました。
NTPカレンダー&時計の回路やプログラムに関しては、こちらをご覧ください。
温度計機能を追加する
今回は、このNTPカレンダー&時計に、温度計の機能を追加したいと思います。
温度センサ
ESP32のデジタルIOは、全て表示器の制御に使い切ってしまっているので、デジタル通信式の温度センサを追加することができません。そこで、アナログ出力式の温度センサを使って、ESP32のA/Dコンバータで電圧を読み取り、温度を測定したいと思います。
アナログ式の温度センサには、MicrochipのMCP9700E/TOを使いました。
この温度センサは、-40度から125度まで測定でき、1度温度が上昇するごとに10mV出力電圧が上昇します。わかりやすいセンサですね。
ESP32のA/D値から電圧に換算
ESP32のA/Dコンバータで電圧を測定しないといけないので、ESP32のA/D値と入力電圧の関係を知る必要があります。
ESP32のA/Dコンバータには入力段に減衰器(アッテネータ)の機能が内蔵されていて、アッテネータの設定によって測定できる最大電圧が変わります。
今回は、温度センサから出力される電圧が最大でも2V程度なので、2V程度がA/Dの最大測定値となるよう、アッテネータを-6dBに設定しました。
この設定で、A/Dコンバータの入力電圧を0Vから1.9Vまで変化させてA/D値を測定し、グラフにしました。上のグラフがそのグラフです。
このグラフから、直線近似式を求めると、電圧はA/D値から以下の式で算出できることがわかりました。
電圧[mV] = 0.4539 × A/D値 + 79.251
この式を使って、センサの電圧を測定します。
電圧から温度に変換
MCP9700の出力電圧は、データシートより、
Vout [mV] = 10 [mV] × 温度 [℃] + 500 [mV]
です。この式を温度=の式に変換すると、
温度 [℃] = ( Vout [mV] - 500 [mV] ) / 10 [mV]
となります。この式のVoutに、A/D値から算出された電圧値を代入すれば、温度を求めることができます。
回路
先日作った回路に、温度センサMCP9700を追加しただけです。センサの電源をESP32の3.3Vに接続し、温度センサの出力をESP32の36番ピンに接続しました。
トランジスタみたいな部品が温度センサです。
プログラム
温度を測定する部分のコードは以下のようになっています。
long d = 0; for (int i = 0; i < 1000; i++) { d += analogRead(AD_PIN); } double ad_value = (double)d / 1000.0; double ad_voltage = ad_value * 0.4539 + 79.251; //[mV] temperature = ( ad_voltage - 500.0 ) / 10.0; // ['c]
A/D値を1000回測定して平均値を利用しています。その値を、先ほど求めた式を利用して電圧に変換し、さらに温度へと変換しています。
タスクを利用して、1秒に1回温度を更新するようにしました。
プログラム全体はこちらに置いておきます。
温度計完成!
5秒毎に、カレンダーと温度計が切り替わるようにしました。℃の表示は、'とCの文字を組み合わせて表現しました。
ニキシー管もそうですが、オレンジ色のこの光はどこか魅力があり、ボーッと見続けてしまいます。
1970年代の卓上電卓、Canon Canola L1211の表示器を使ったプロジェクトは、これでひとまず完了です。素敵なカレンダー&時計&温度計ができました。
この表示器を使った卓上電卓Canon Canolaシリーズは、ヤフオクなどにたまに出品されています。もし興味があればチェックしてみてはいかがでしょうか。表示器がオレンジ色ではなくVDFの物もあるので、探すときには注意してくださいね。
コメント