R3.9.8 マトリックスLEDモジュールを使う

 M5Stackで動かそうと思っていたけれど、うまくいかなかったのでマイクロビットでやってみた。拡張機能で「max7219」で検索したら出てきたことがきっかけ。ブロックを見たり説明を読めば大体のことは分かると思います。あとでやったM5Stackと比べるとかなり簡単にできました。

  ここでアルファベットのスクロールを見ることができます。
漢字もそれなりに表示できます。

 漢字とスクロールに関しては、M5Stackのページで説明します。


R1.8.2 続々々:3連7セグメントLEDを使う

 注文したエッジコネクタが届いたので作業開始。

 最初にエッジコネクタの細工。マイクロビットの5つの大きな穴のうち使用するP0(固定用)・P2(心拍センサー用)・3V・GNDに固定用ボルトを通すので削る。そこには、ピンが入っているのでこれらを抜き取る。抑えの蓋が勝手に外れて作業しやすくなったが、元に戻すときにはなかなかはまらずイライラした(^^;)

 加工したエッジコネクタを2つ用意する。一つには7セグの基板を差し込み、もう一つにはマイクロビット本体を差し込む。裏と表。

 これらを合体する。心拍センサー&電源基盤とマイクロビット本体は以前からついている10mmのスペーサーで間を保つ。マイクロビットと7セグ基板はエッジコネクタ―におさまっているので、7セグ基板側から3mmの12mm皿ネジで固定する。この時、上側が斜めに狭まってきたので長さ6mmの樹脂スペーサーを入れた。今のところ挟んでいるだけでネジ止めはしていない。

 前からと後ろから見た図。なかなかコンパクトになった。

 上から見た図と下から見た図。この下から見たときの図で、7セグ基板の入ったエッジコネクタ―とマイクロビットが入ったエッジコネクタ―の同じピン同士を半田付けして完成となる。単純なピンは同じもの同士でいいが、SPIやI2Cはどう接続するかはきちんと確認してからにしたい。


 取り敢えず同じピン同士半田付けた。今回必要なのは、中央右寄りの4セットのピン。P14のMISOは必要ないけれど、必要になる場合もあるかもしれないので半田付けた。右端のI2C端子も半田付け必要かもしれない。活用範囲が広がる!、だろう? でも、40年以上やっているのに半田付け技術は上手にはなっていません(^^;)

 スイッチオン! ありゃ?? 動いた。ボタン電池1個で動いています。大丈夫なんだろうか? マイクロビット本体に支障はないのかな? あっても構いません。動いてくれさえすれば.....

 そうそう、これで終わりではないのでした。裏に背負っている心拍センサーが光っているけど、カウンタープログラムには不参加なのです。7セグと心拍センサーを連動させなくては。これは後日。


R1.8.1 続々:3連7セグメントLEDを使う

 7セグメントを3つ並べてマイクロビット風基板に固定した。表から見たときと裏から半田付けするときに、当然のこと反転してしまうので、どこがどの端子になるかが判断が怪しくなる。きちんと裏表の回路図を製図すればいいのだが、面倒だし老化防止の為に頭で判断して作業する。

 うまくいけばいいのだが、配線ミスをすると動作しないし、折角の7セグをダメにしてしまうかもしれない。

 今回は、うまく動作しないので落ち込んだ。遅まきながら裏表の回路図を作図し、ショートしていないかも虫眼鏡で確認した。

 どこも悪くない。結局、この基盤とマイクロビットを結ぶ際に使ったコネクターの付いたジャンパーワイヤーが不安定だったようだ。下図のようにそっけないジャンパーワイヤーに変更してみると問題なく動作した。めでたしめでたし。

 5本の配線で動作するのだから便利なことこの上ない。ただマイクロビットのSPI端子がもう少し使いやすい大きさで配盤されていればいいのだが。I2C端子も。


R1.7.30 続:3連7セグメントLEDを使う

 7セグメントLEDは8つのLEDが一つのセットになっている。当然のことに、それぞれがきちんと指定されているし、10進だと下のようにA〜GとDPが区別されるようになっており、一つの7セグメントLEDでいろいろな数字や記号を表示できる。

 とりあえず、0〜9までを10進で表示するには、下のような数字をSPIに書きだしてやればいい。(ということが後で分かった)
 というのも、後で掲示する画像のプログラムで、「SPI書き出す」に1から順に数字を書きだしてやったら、7セグのLEDがあちこち点灯したからだ。「1」を書きだしたら一番上の横のセグメントが点灯したし、「2」を書きだしたら右上のセグメントが点灯。「3」を書きだしたら上と右上のセグメントという具合。「なあ〜んだ」ということで得心したのだった。

 ところで、プログラムの方はどうだったかというと、SPIに関わるブロックを取りだして、「最初だけ」で(初期設定ですね)必要なことを設定してやる。端子は回路の通り。ビット数やモード、周波数はデフォルト。
 ArduinoIDEのプログラムを見乍ら、latchにつないでいるP16端子に0と1を出力する間に、SPI書き出しをすることが重要だなと考えてやってみると、なんと思い通りの数字が左に流れていったのでした。
 それなら、3連の繰り返し文でくくってやればArduinoIDEと同様のことができると見込んでやってみると、確かにカウントアップしていったのです。

 ありゃ、ブロックでもできるんだ。久しぶりに感動しました。

 でも、数字が止まらない! これからまた、ネットで解決策を見つけなければ。


 と思いながら、何気に気が付いた。Aボタンを押したときにカウントアップ表示をさせてみよう、と。数値をSPIに書き出すと、それが次々と左にシフトしていくのではなかったかな? と。(違うかな?)だから、P16に0を出力してから、100桁→10桁→1桁と順番に、しかも一気に書き出してからP16に1を出力すると、次にSPI書き出しするまで、数値の表示は保持されるのだ。

 実際にうまくいったので、あとは心拍計と連動するようにブロックを組んでやればいい。

 組み立てについては、ブレッドボード2枚になっているが、今日micro:bitエッジコネクタを4個注文した。マイクロビットと7セグ3連を載せたマイクロビットと同等のボードを差して組み合わせると、SPI端子を結合できるだろうという目論見だ。一回り大きくはなるが良しとしようか。


R1.7.29 3連7セグメントLEDを使う

 心泊センサーがうまく動いたので、7セグメントLEDで表示したいなと思っている。探してみると、秋月電子通商さんで「赤色7セグメントLEDシリアルドライバモジュール 完成品」というものを発見した。以前から知ってはいたが、SPI接続で、3本の信号線で表示できるし、いくつでも並べられるということを改めて知り、購入した。キットでも良かったが、面倒なので完成品を購入(^^;)

 商品ページにあったArduinoスケッチを使った。まずは1個の場合をやってみて、あれこれネットで探りながら取り組んでみると、それなりにうまくいった。そこで、3連にしてみた。0から3けた999までカウントアップするというプログラム。

 3連の7セグLEDとマイクロビットとの接続は下図のようにした。

 プログラムはArduinoIDEを使う。商品ページにあったスケッチではうまく動かなかったので、次のようにした。

#include
int sck = 13;
int latch = 16;
int sdi = 14;
int scroll_speed = 100;
 
const byte digits[] = {
 0x7e,
 0x30,
 0x6d,
 0x79,
 0x33,
 0x5b,
 0x5f,
 0x70,
 0x7f,
 0x7b,
};
 
void setup() {
 pinMode(latch, OUTPUT);
 pinMode(sck, OUTPUT);
 pinMode(sdi, OUTPUT);
 SPI.begin();
 SPI.setBitOrder(LSBFIRST);
 SPI.setDataMode(0);
}
 
void loop() {
 for (int k = 0; k < 10; k ++) {//100の桁
  for (int j = 0; j < 10; j ++) {//10の桁
   for (int i = 0; i < 10; i ++) {//1の桁
   //SPI
   digitalWrite(latch, 0);
   SPI.transfer (digits[k]);//100の桁
   SPI.transfer (digits[j]);//10の桁
   SPI.transfer (digits[i]);//1の桁
   digitalWrite(latch, 1);
   //
   delay(scroll_speed);
   }
  }
 }
}

 注意! 上のプログラムをコピペすると字下げに全角スペースを使用しているのでエラーになると思います。半角スペースに変更してくださいね。

 自分としてはSPIをよく知らないでやっているので、どれをどうつないでいいか試行錯誤でした(^^;) 今になって、MOSIがMasterOutSlaveInであることを知りました。

 次に、LEDは光るけれどメチャクチャな表示になってしまうことにメゲる。で、ネットサーフィンして上記のconst byte digitsに辿り着く。ようやく3桁でカウントアップすることができました。

 実際に動いた時の実態配線が下の画像。

 さて、問題点は以下の通り。

  1. 大きすぎて使えない。辛うじて3連でもマイクロビット本体と同じ基板に載せることができる。配線は単純なので、難しくなさそう。コンパクトになる可能性がある。
  2. 最大の問題は、P13・P15・P16のあの小さなマイクロビットの端子から、どうやって配線を引き出すか? 細い線を端子に半田付けするのが簡単なのだけれど、そうなるとひも付きマイクロビットを他に使いまわせない。
  3. 乾電池運用は大丈夫かな? 3連の7セグLEDの消費電力の問題。別電源を用意するといいかも。重くなるけど。
  4. 大した問題ではないけれど、7セグの基板はマイクロビットの前かな?
  5. ブロックエディタでプログラムしたい。


H30.9.12 7セグメントLEDを使う

 本体の5×5LEDで数値は表示できるので意味はないのだけれど、練習でやってみた。アノードコモンの7セグを使っている。

 7セグメントLEDは8つのLEDの集合体で、上部に5本、下部に5本の端子が出ている。上下の中央はそれぞれがVccになっているので、残りの8本がどの位置のLEDなのかをはっきりさせないといけない。そして、数字を構成するときには、どのLEDを点灯させるか、マイクロビットのプログラムでは、P0からP22のどれにつなげるかもはっきりさせないといけない。きちんと、図にしておけば間違いがないのだが、エィ! とやってしまって妙な表示になる。

 それでも、あれこれやって表示できた。本体の数字と同じにしたが、乱数で出したりABボタンと連携したりして何かに使えるか?

 本体のLEDによる数字は見にくいので、実用的かも。もちろん、4桁になれば使えますね。