こんにちは!はしもとです。
前回は、マイコン周りの回路をSTM32のデータシートを参照しながら設計しました。
今回は、マイクロマウスの状態や動作を示すために必要なインジケータ回路の設計について書いていきます。
インジケータ回路とは
インジケータ回路は、マイクロマウスが現在どのような状態にあるか、どのような操作を行っているかを示すために使用されます。マイクロマウスでは、よくLEDやディスプレイを使って現在状態や動作を示します。例えば、迷路の探索中や、最短経路を計算中、またはゴールに到達した際など、さまざまな状況を示すことができます。これにより、現在マウスがどのような状態であるかを開発者に伝えることができ、開発やデバッグをスムーズにすすめることが可能です。
使用するインジケータ
- チップLED
- プログラムが正常に機能しているかどうかを簡単に確認するために使用します
- マウスの表面積を確保するためにチップLEDを採用しました
- 7セグLED
- マウスの走行モード表示に使用します
- 走行モードは迷路探索モードや最短走行モードなどを想定しています
- 以前制作したPi:Co Classic3の場合だと、複数のLEDを使って走行モード表示をしていましたが個人的には今どのモードであるかわかりにくいと感じたため、自作マウスではモードを数字で表示することで視覚的にわかりやすくなるように試みました。
- マウスの走行モード表示に使用します
回路設計
チップLED
前回のブログに回路自体は載せていましたが、再喝します。チップLEDは秋月電子で販売されているOSHR1608を使用します。過電流で故障するのを防ぐために抵抗1kΩを付けています。
ここからは、本当に1kΩでいいのか?ということについて深堀していきます。
というのも、抵抗値の選定は当初はなんとなくで1kΩに設定していたのですが、本来であればLEDをどれくらいの明るさにしたいかを決め、そこからどれくらいの電流を流すのかがわかり、最後に抵抗値を決めるというのが正しい手順と考えているためです。
では、まずLEDをどれくらいの明るさで表示させたいかですが、回路設計【LEDに流す電流と抵抗値の決め方】を参考にし、表示用には数mcdあれば十分な明るさとのことなので、今回は5mcdとします。mcdはカンデラ(光度)cdのミリ単位です。詳細は「ルーメン・カンデラ・ルクスの違い」がわかりやすかったです。
次に、LED点灯回路における抵抗値を求めていきます。点灯回路における抵抗値\( R \)の求め方はこちらの記事を参考にし、下記のとおりに表せます。
\( R = (V_{in} – V_F)/I_F \)
\( V_{in} \)は入力電圧で、今回であればSTMマイコンの出力ピンのHIGHは3.3Vなので、\( V_{in} \)は3.3Vです。
次に、\(V_F\)は順方向電圧です。順方向電圧とは、LEDの正方向に電流を流した時に、アノード・カソード間に発生する電圧のことです。データシートを確認すると、順方向電圧のMaxが2.2Vなのでこちらを\(V_F\)の値とします。
最後に、\( I_F \)ですが、これは明るさ5mcdをもとに、データシートに書かれた”Relative Luminous intensity – \(I_f\)”から求められます。

https://akizukidenshi.com/download/ds/optosupply/OSXX1608C1A_ver_a_10.pdf
このグラフより、下記のことが読み取れます。
- 電流と相対光度は単純な比例関係ではない
- 緑、赤LEDに関しては、0~10mAの範囲では比例とみなせる
今回使用するチップLEDは赤色(HR)なので、赤色のグラフに着目して\( I_F \)を求めます。
まず相対光度(Relative Luminous intensity)の値が1のとき、\(I_F\)が5mAです。相対光度が1のときの実際の明るさは、データシートの”Electrical -Optical Characteristics”のIv(mcd)の項目より35mcdなので、必要な明るさが5mcdの場合だと、相対光度は1/7=約0.143です。”Relative Luminous intensity – \(I_f\)”のグラフによると、相対光度が1のときは5mAなので、相対光度が約0.143のときは約0.714mAです。したがって、\(I_F\)は0.714mAです。
これらを先程の式に当てはめます。
\( R = (V_{in} – V_F)/I_F \) = (3.3V – 2.2V)/0.000714A = 1.54kΩ
したがって、明るさを5mcdにしたい場合は抵抗は1.54kΩにするべきでした。一方で、今回は1kΩとしていまいました。1kΩの場合は明るさは何mcdとなるか計算したところ、7.7mcdとなりました。なので十分な明るさです。LEDに流れる電流は1.1mAでした。LEDに流せる最大電流は30mAなので十分小さく、問題なさそうです。
7セグLED
今回使用した7セグLEDは、OSL10654-IBです。部品には10本のピンが生えており、表示したい数字に応じて、それらのピンに電流を流してLEDを光らせます。
また今回使用する7セグLEDはアノードコモンであり、LEDのプラス側であるアノードが共通化されており、マイナス側のカソードをICの出力端子を使ってHIGH、LOWと変化させることで、光る、光らないを制御します(参考)。
しかしながら、0~9の数字を表示するためだけに、7つのGPIOを用意するのはもったいないので、BCD to 7 セグメント・デコーダ/ドライバであるSN74LS47を用いて、4つのGPIOで0~9までの数字を表示します。BCD(Binary Coded Decimal)とは、数値の表現方法の一種で、2進数の値を4桁用いて、10進数における1桁分の値を表現する方法のことです(参考)。
次に具体的な回路設計の話をします。
OSL10654-IBは、データシートを確認すると順方向電流\( I_F \)が10mA、順方向電圧\(V_F\)が3.3V、入力電圧\( V_{in} \)は5Vとしたときに、抵抗値は先程の計算式から求められます。
\( R = (V_{in} – V_F)/I_F \) = (5.0V – 3.3V)/0.01A = 170Ω
よって、7セグのカソードに対して170Ωの抵抗を接続しています。
また、SN74LS47の回路については、データシートを参考にしました。端子には、LT, RBI, BI/RBOという聞き馴染みのない端子があります。各端子それぞれの詳細は、アルゴ算法堂 電子工作 7セグLED が参考になりました。
まとめ
今回は、インジケータ回路について書きました。
回路設計したのは昨年末くらいだったので、思い出すのに時間が必要でした。ただ、作業メモを残していたので、なんとか書ききることができました。ブログを定期的に更新するのが難しいときもあるので、今回のようにメモはなるべく残していきたいです。
今回はここまでです。それではまた〜!