浄泉爺のブログ

浄泉爺の考え事を記録します(研究のこと、仏教のこと、教育のこと、ドローンとか)

阿弥陀経タワー(改)

昨年末に、阿弥陀経CODEDというタワータイプのものを作成した。以下、その時に記述したもの。

 

jyousenjii.hatenablog.com

 

これを、小型化することにした。寺の本堂には、1200個のLEDのタワーは迫力があって良いが、一般家庭には大きすぎるだろう。約300個のLEDのサイズで作成する。

 

 

また、制御を Raspberry Pi 3+ (ラズパイ)でしていたが、Arduino(アルディーノ)に変更することにした。ArduinoC言語で書いたプログラムで制御できるので簡単。但し、今回の阿弥陀経タワーについては幾つかの問題が生じた。ラズパイは、パソコンなのでOSもあり、起動や終了にそれなりの手順が必要だ。Arduino はそういうことが不要で、電源オンオフが家電製品のようにできる。

 

まず、LEDの制御は、次のページで直ぐにわかった。超簡単。

 

deviceplus.jp

 

なんだ、何も考えずに移行できるなと思った。

 

しかしながら、Arduino は使えるメモリーがとても少ない。Arduino Uno の互換機を使うのだが、使えるメモリーは 2KB。フラッシュメモリというプログラムを保存する領域も 32KB しかない。例えば次のページが詳しい。(KBというサイズがわかりにくいかも知れない。1GBは約1000MBで、1MBは約1000KBである。)

 

garretlab.web.fc2.com

 

あまり考える事無く、ラズパイのPythonプログラムをC言語で書き直したものを Arduino で動かそうとしたら、プログラムのソースコードが大きすぎて動かないという事態が生じた。実は、阿弥陀経の漢字を Unicode のコードポイントとして、それぞれ2バイト(16bit)のバイナリとして 0, 1 に変換して、それをプログラムソースに書き込んでいた。約3万個の 0,1 が含まれるソースコードなので、それだけで 32KB を超えてしまった。また、それを格納する配列は、当然 2KB には収まらないので動かないという事になってしまった。ちなみに阿弥陀経自体は2000文字弱である。

 

そこで、先の Arduino Unoのメモリのページを見て、配列データをフラッシュメモリ内に置く方法があったので、それを採用。さらに、0, 1 に変換したものでは効率が悪いので、16bit 数値として10進数表現されたものを格納し、都度2進数に変換するということにした。これは結構面倒だったが、頭の体操にはなった。

 

結果として、ソースコードもかなりスリムになり、阿弥陀経のデータも楽々 Aarduino 内に収まる事となった。

 

最近は、パソコンやスマホにしても、大きなメモリー容量があるので、こんな工夫なんて考える事もなかった。30年以上前のメモリーが大変高価であった時代のプログラミングを思い出す。組み込み系のプログラマーは今でもこういう苦労をしているんだろうなと実感した。

 

さて、制御が Arduino になったおかげで、コンセントにさせば即タワーが動き出し、コンセントも何も考えずに抜いてもオッケーとなった。ラズパイの場合にはそうはいかない。Arduino ももう一ランク下げても良いように思うので、よりコストを下げられそうだ。

 

上記は一応1日での作業だった。Arduino は開発環境も良くできていて、誰でも簡単に電子工作ができる。スゴイ時代だなと今更ながら思った。もともとは、阿弥陀経だけでなく複数のお経を切り替えられるようにと思っていたが、上記の理由でちょっと難しそうだ。更に工夫すれば、何とかなる気もするが。

 

後は、ダイヤルで輝度調整とか、点滅をランダムから白色にするスイッチとか、電源ボタンとかそういうものを付ければかなり実用的になる。一応そこまではやってみようと思う。入力の制御も知りたいので。