2015年11月30日

Python → PyFirmata → Firmata → Arduino

StandardFirmata スケッチを Arduino に書き込み、PyFirmata で Arduino のピンを操作するのを試してみた。見事に動いている。Python の対話型インタープリタから命令を入力すると、Arduino のピンに接続した LED が点いたり消えたりする。PWM で暗くしたりもできる。たのしい。

パソコンや Raspberry Pi からリアルタイムで操作したい時だけでなく、スケッチのプロトタイピングにも有用かもしれない。

GUIのお絵かきツールで描いた絵がマトリクスLEDに反映されたらかなり楽しいかもしれないな、と思ったけど、ダイナミック点灯の処理を常に走らせつつ、割り込む形でシフトレジスタに出力するビット列を変更して、と考えると難しそうな気がしてきた。ひょっとして無理なんじゃないか。

そもそも Firmata で何ができて、何ができないのか、全く把握していない。まあとりあえず  Tkinter でボタンを押すと LED が光るとか、そういうトリヴィアルなことから初めてみよう。

明日は通勤ラッシュが過ぎた後に出掛けても良いのだけれど、早起きするのに越したことはないだろうから、今日はもう寝よう。

追記

英語に holier-than-thou (attitudes) という表現があって、なんというか、身につまされる。

群れ

このところ朝の比較的早い時刻に出かける用が続いていた。ぴったりの時間に出ると通勤ラッシュに巻き込まれるので、必要より一段前倒しに移動を済ませることにして、早寝早起きを心がけていたのだが、早起きはともかく早寝の方がなかなかままならない。結局寝不足で昼前に眠くなってしまう。

こんなことでは困るのだけれど、どうしても通勤ラッシュは避けたい。バスが満員で乗れなかったり、電車の中では息をするのがやっとだったり、また車両も駅も人員も無茶な運用をしているわけだから往々にして遅延が発生したりする。

いや、そういうことはまだ観念できる。どうしても耐えられないのは、そうした状況に於ける人々のあまりにも非協調的な態度だ。

ホームに電車が到着し、ドアが開くなり平然と周りを押しのけて我さきに乗車する。少し奥に詰めれば良いものを、一度落ち着くと動こうともしない。駅に着けば、特に乗り換えの多い駅では、降りる人がいるのは当たり前だろうに、一旦降りて通り道を作ろうという気配も見せない。

お年寄りや身体の不自由な人に席を譲りましょうなどという水準の話ですらない。他人より先に乗車できたからといって、初めから満員の電車に於いて何の有利があるのか。降りようとしている人に道を開けることに、一体どれほどの不利があるのか。

こんな人々が背広を着て、この社会を動かしているのは俺たちだと威張ったり、チームで仕事をするには協調性が大事だとか宣ったりしているのだろうと思うと、心底世の中が嫌になる。

と同時に、そうやって無闇に世間を貶めて、自分は落伍者ではなく厭世家なのだとでも言いたがっているが如き僕自身にもうんざりする。

通勤ラッシュに巻き込まれると、いつもこうしたことを考えてしまい、およそ一日分の気力を使い果たす。だから多少無理にでも時間をずらして避けたほうが無難だと結論した次第だ。

とやかく言ううちに今日はもう眠くなってきた。

2015年11月29日

ダイスを転がせ

LED 表示プログラムに、ランダムなパターンを表示させる機能を追加したが、基板とArduinoの配線を間違えそうな気がして、実際に動かすまで半日ほどだらだらしてしまった。

Arduino言語で擬似乱数を得るのには random()、ランダムシードを与えるのには randomSeed() という関数を使う。Arduino.h を読んでみたら、やっぱり stdlib.h の random() と srandom() を呼び出している。別にどう実装されていようが、便利なものがあれば使うだけなのだが、出力ピンを操作する digitalWrite() が遅くて用に足りなかった一件以来、どうも疑心暗鬼になっている。

必要な機能だけが揃ったマイコンに移植すれば構成を小さくすることができるだろうが、それを視野に入れると Arduino が用意している便利な関数やマクロがいつでも利用できるとは限らない。一応パッと見で理解できる程度のところまでは遡って正体を知っておくのも、後々の役に立つかもしれないと思う。

役に立つ、と言って、別になにかの役に立つ様な事をする見込みはないのだが。

Our weapons are two

最近は Python で遊んだりしている。なぜ Python か、というと、きっかけは主に二つだ。

ひとつ目は、Raspberry Pi を買ったこと。七年間使い続けた MacBook に不満が募ってきたころ、少し目先を変えてみたくて五千円ほどの Raspberry Pi 2 B を買った。Raspberry Pi は公式に推薦している言語が Python なので、いろいろ遊ぶのには覚えておくのが良いのだろうな、と思った。

ふたつ目は、Pythonista だ。もともと Pythonista とは、Python の特徴を生かし、Python の設計思想をよく反映したコードを書く人のことを言うらしいが、ここでは同名の iPhone アプリのことだ。Python を覚えると言っても、実際に何かを書いてみなくては覚えられないだろうと思い、なにか学習に便利なソフトが iPhone にないものか、と探していて、Pythonista が目に止まった。

これは学習ソフトの類ではなく、iOS上に構築された Python 環境で、思った以上に色々なことができる。色々できすぎて Apple から機能の制限を求められたりもしたらしい(ネット経由で任意の Python コードを直接取り込める機能がかつて備わっていたが、脆弱性と見なされたようだ)。

野暮用で特定の日付が何曜日になるかを知りたい場面が多く、カレンダーを調べるのもいちいち煩わしいので、日付を入力すれば曜日が帰ってくるスクリプトなどを Pythonista で書いた。なかなか重宝している。

簡単なドット絵ソフトも Python で作ってみた。Arduino のコード内では、LEDマトリクスに表示するドットパターンを 0 と 1 の羅列として表現しているのだが、これを手で書くのは馬鹿らしいと思ったのだ。およそ GUI アプリケーションが備えるべき最低の要件すら満たしていないような荒い作りだけれど、それでも01直書きよりは大分ましになったと思う。

このあたりで当座の用は足りてしまったので、今はさしあたりすることがない。こうなると段々おろそかになり、そのうちぴたりと止んで、また数年先に何かのきっかけで再開する時には覚えなおしになるのだろう。

不毛といえば不毛だけれど、別にどこを目指しているわけでもなし、それもまた楽しいのかもしれない。

暇つぶし

しばらく前に知人が仕事を辞めた時、理由を訊ねてみたら、
「飽きたな、と思って」
との答えだった。

額面通りに受け取っていいものか分からない部分はあるが、かといって勝手にあれこれ忖度するものでもあるまい。それにしても、かれこれ十年近く勤めてきた会社のはずで、飽きるにしてはむしろ随分長続きしたのではないかと変な感心をする。

言うまでもなく、これは僕が飽きっぽいからそう思うのだ。大体なにをやっても半年持てば良い方で、あるとき急に没頭し始め、しばらくしてまた急に意欲を失う。

これも、取り立てて特殊な性向などではなくて、結局は意志が弱いことに帰せられるのだろう。初めたばかりで何もかもが目新しいうちはやる気が持続するが、伸び悩みの時期に至ると面倒になって投げ出す、というだけの話だ。

Twitter は五年近く続けていたのだろうか。しかしこれに関しては、どうも長続きをしたからと言ってさほど胸を張れる性質のものでもない様な気がする。毎日欠かさずテレビを見ている、とかいうのと大体同じで、受動的惰性的に関わっているだけでも一応「続けている」と称することができるものは、あまり継続を誇れるものとは思われない。

つまり、僕に於いて長続きするのは、そのような受動的惰性的な営みが精々のところである。こうなってくるともはや、三年の空白をもって再開したこのブログが、果たして次に更新を停止するまでどれくらい続くものか、逆に楽しみだという気がしてくる。

2015年11月28日

残像

手伝いの際に、LED マトリクスの表示を一定時間で切り替えてアニメーションにするコードを作ってあったので、こちらのものにも流用した。

(おそらく)トランジスタのスイッチが遅いために、光らせたい LED の一つ上の LED も少し光ってしまうという回路設計のミスがあったのだが、それならいっそ上から下に流れるアニメーションを作れば、ぼんやり軌跡を残しているように見えるのではないか。

そう思って、ドットが降ってくるアニメーションを作ってみた。単純だがわりと様になっている。

しかし、ぼんやり光っている LED の分だけ余計に電流が電源から引き出され、常に Arduino のピンに吸い込まれていっているわけだ。電源の側には余裕があるはずだが、Arduino の 1ポートあたりに流し込んで良い電流の総量はそう多くない。

1ピンあたりが扱える電流に対してもやや余裕がないので、真面目に考えれば抵抗をもう少し大きなものに変えるなどするべきだろう。さしあたりはポートを分散させてごまかすか。

過密


接続を間違えて冷や汗をかいたりもしたが、一応所定の動作をするようになった。

一応というのは何かというと、画像からも分かる通り、表示が滲んでいる。この滲みは何かというと、次の列で光るべき部分が前の列でも少し光ってしまっているのだ。

なぜこういうことが起こるのか。少し考えて、列を管理しているトランジスタの動作速度の問題ではないかと思い至った。オシロスコープを使って眺めてみると、実際トランジスタに入力されるコントロール信号とトランジスタの出力に、はっきりと時間差がある。

本当は具体的にどの程度の時間差があるのか、数字を記録するべきだと思うのだが、オシロで測ることを全く考えずに組んでしまったため、プローブを当てるのに必死で細かい操作ができなかった。後先考えず基板に部品を詰め込むことの弊害だ。

同じ元凶による弊害がもう一つあって、それは部品の追加がしにくいことだ。トランジスタのオン・オフが遅いのが問題と察せられるのだから、速くしてやるための処置が必要なわけだけれども、その方法というのが大体二通りあって、一つは写真左側に並んでいる七本の抵抗それぞれに対して並列にコンデンサを入れてやる方法。そしてもう一つは、トランジスタの真ん中の足と写真の天側になっている足とをダイオードでつなぐ方法であるらしい。

どちらにしてももはや基板に空きがない。裏側に実装する、という手もあるにはあるけれど、実は裏側にも被膜線を這わせて配線を行っているので、これを一度外してしまわないと修正は難しい。

どんな問題が起きるか把握できていないのに、実験段階からむやみに小さく組むとこうやって失敗することになる。なかなか教訓になったし、基本的な部分では想像通りに動いたので、とりあえず今回はこれで満足だ。

つまりめんどくさいのでわざわざ修正したくない。

光あれ

LED マトリクスを Arduino で光らせる回路とプログラムを組んでみたが、いざ通電してみると光らない。音関係はそこそこ実作したけれど、マイコンの経験は乏しいし、LED マトリクスは初めての分野だから、一度で完動しないのは半ば予期していた。

半ば予期してはいたものの、動かない理屈がわからない。各点の導通を確かめ、電圧を測ってみるところから始める。ところが、どうやらおおよそ事前に計算した通りの電圧が出ているようだ。IC や LED の配線間違いでもないらしい。いよいよ動かないはずがない。

ふと、LED の電流を調整している抵抗の両端で、電圧が変わっていないことに気がついた。抵抗を電流が通れば、その量に応じて電圧降下が起こるはずだ。つまり、抵抗の両端で電圧が同じであるということは、ここを電流が(ほぼ)通っていない、ということを意味するだろう。

トランジスタによる駆動回路の設計ミス、ないし電源の仕様を見誤ったかで、必要な電流を引き出せていないか、あるいは……

……単に半田付けのし忘れでしたね。ちゃんと半田付けしてある隣の端子を使うようにプログラムを書き換えたら光った。こういうこともある。

Freeze/Unfreeze

機嫌が悪いところに気に入らないものが目に入るとろくに考えもせず嫌味を言うという、我がことながら幼稚としか言いようがない振る舞いをしているのにふっと気がつき、一体僕はここまで卑しかっただろうかと思うと居た堪れなくなったので、当分のあいだ Twitter は止すことにした。

当て逃げのような形でやめてしまったのも卑劣だとは思う。

ともかく、見ろと頼まれたわけでもないものを勝手に見て、駄犬のごとく吠えかかるような行為に手段があるのは僕にとって良くない。さりとて、出力先がなくなったらなくなったで、早晩気が変になってくることは目に見えている。

それならばどうするか。ひとつ思案のしどころだが、漏れ聞くところによれば、なんでも世の中にはブログなるものがあるらしい。あまつさえ、さる筋によれば、僕のブログが既に存在しているという情報さえある。おあつらえ向きとはこのことではないだろうか。運命すら感じると言って過言ではない。

早速確認のため Google で検索してみたところ(自分で URL を忘れていたんですね)、果たして確かに僕のブログは存在していた。どうやら前に更新したのが二年前であるらしい。これだけ放置していたらボウフラでも沸いているのではないかと心配したが、そういうこともない様子でほっとした。これもひとえにネット技術の進歩、このころ頓に言うところの IoT というものだろう。

Internet of things that change, things that stay, and things that are forever under construction の略だそうだ。