Arduinoで秋月の気圧センサーを使う(4) : 7セグメントLED(アノードコモン)の表示 [電子工作]

scp1000 schematic前回でPCへのデータ取り込みが出来るようになったので、ハード側でのデータ表示方法を再度検討します。
LCDでの表示は既に行っていますが、やはり視認性は7セグメントLEDの方が良いと思います。
そこで今回はArduinoに7セグメントLEDを接続して現在の気圧を表示させて見ます。
手元には2桁表示のアノードコモン7セグメントディスプレイが2つあったので、それを利用します。

(1) 回路について
部品の構成は下図の通りです。
7SEGS_ANODE_COM.JPG
図の通り、DIGIT1/2の各桁を独立して操作することが可能ですが、Arduinoに直結する場合は(8+1)x4の36ポートが必要となり、ArduinoMegaでも無いと実装不可能なので、A~G(今回はDPは省略)をそれぞれまとめてシフトレジスタと接続し、アノードを高速でスイッチングさせる、ダイナミック点灯で表示させることで、ポートを節約します。

アノードに直接Arduinoのデジタルポートを接続しても電流不足になる可能性があるので、トランジスタ経由で各桁をドライブしています。
アノードコモンなので、PNPトランジスタ2SA1015を各桁用に4個使います。トランジスタのベースに抵抗(作例では1KΩ)を介して接続したArduinoのデジタルポートがLOWとなると、トランジスタがONとなり、コレクタ側に電流が流れます。
ベース-エミッタ間に10KΩの抵抗を入れていますが、省略しても今回の製作では問題は出ないと思います。

シフトレジスタは安価な74HC164×1を使用します。ArduinoからはDATAとCLOCKの2線だけで最大8線のOFF/ONを制御出来ます。
74HC164は出力ラッチが無いので、データセットの際にチラツキが発生しますが、7セグの表示程度れあれば、気になるレベルではないので問題ありません。

(2) ダイナミック点灯

人間の目にチラツキが見えないためには、一秒間に30回以上画面を切り替える必要があります。
4桁の7セグを使う場合は、単純計算で 30×4 で一秒間に 120 回以上の切替が必要です。
ミリセカンドにすると約8msecで、余裕を見て 4msec 程度の間隔で各セグメントを切替をすればよい計算となります。
ただし、タイミングを取るためにdelay()を使ってしまうと、他の処理と並列に処理をするのが難しくなるため、loop()の回数をカウントして切り替えています。
4 msec は Hz にすると 250 Hz となります。 ATMega168 が 16MHz なので、loop の中でのマシン語レベルの命令が 1 ステップの場合には、16,000,000 / 250 でloopが64,000回実行されたら、切替を行えば良い計算となります。
loopの回数をカウンタで数えて、閾値を超えた場合に切替を行います。
ただし実際の閾値はloopの中の命令数によって、大きく変わりますので、テストを繰り返して最適な値を設定する必要があります。

(3) スケッチについて

Arduinoのスケッチでは、次の処理をおこないます。
(1) 7セグの1桁分の表示パターンをシフトレジスタに送る。シフトレジスタはカソード側に接続されているので、LOWにしたビットに対応するセグメントが点灯。
(2) 1桁分の7セグLEDを点灯させるために、その桁用のPNPトランジスタのベースをLOWにする。
(3) (1)-(2)を指定のタイミングで各桁毎に順次行う。
shiftOut()というシフトレジスタを制御する便利な命令がArduinoで用意されているので使うことにします。
サンプルスケッチの場合、loop() が300回程度で切替を行わないと、目に見えてチラツキが残る表示となりました。

(4) その他の機能

上記以外に今回紹介するソースは機能がいくつか追加されています。細かい説明は省略しますが、ソースを追えばそれほど難しいことはやっていないので、理解出来ると思います。
  • Metroライブラリを使用したタイマー処理
    • 4秒毎にLEDの表示を切替(気温⇔気圧)
    • 2分毎に気温・気圧を測定
    • 30分毎に測定したデータを Serial に送信
  • 30分毎の測定データ(気圧のみ)をEEPROMに保存
  • setup()実行時にEEPROM内の測定データを一括でSerialに送信

<回路図>
7SEGTEST.jpg
R9~R14は330Ωとしました。 また図中で書き忘れましたが、74HC164のQA~QHと7セグも抵抗(330Ω)を介して接続されています。 よく考えたら74HC164×4個あれば、ダイナミック点灯は不要でしたね。


<ソースファイル>

<関連リンク>


nice!(0)  コメント(2)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 2

Олег

Классная статья, с интересом прочел и, что не мало важно, помогла мне разобраться именно в том, что искал!
by Олег (2014-09-23 04:23) 

den

Статья интересная, прочёл на одном дыхании! Не хватает кода. Скиньте пожалуйста код для ардуино, чтобы это всё ещё и заработало.
by den (2017-11-06 03:06) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。