iizukakの作業ログ

忘れる前にメモしよう

フリップドットディスプレイ時計を作る(完成)

さて、前回までフリップドットディスプレイで時計、名付けてフリップドットクロックをつくるための何やかやを用意していたのですが、完成しました。

f:id:iizukak:20160924174519p:plain

f:id:iizukak:20160924174552p:plain

f:id:iizukak:20160924174818p:plain

基盤のほうはこんなかんじ。

f:id:iizukak:20160924174922p:plain

基盤は、秋月のユニバーサル基板の適当なサイズのやつにドリルで穴をあけて、フリップドットディスプレイに固定しています。ぴったりサイズの基盤があったので、カットする手間を省けました。

電源投入時に自分のIDを表示する小昨日をつけたり…。

f:id:iizukak:20160924175302p:plain

フリップドットディスプレイはわりかし高価なので多用するのは難しそうですが、いろいろ使ってみたくなる一品でした。

フリップドットディスプレイ時計を作る

ブレッドボードで仮組みして、時計として動くところまできたので、使ったパーツと接続をメモしておこうと思います。

使用パーツ。

接続は次の通り

フリップドットディスプレイ部

Arduino RS485 Module Flip-Dot Boards XY5
RX RO -
TX DI -
8 DE+RE -
5V VCC -
GND GND -
- A +485
- B -485

RTC モジュール部

Arduino RTC Module
A4 Sda
A5 Scl
5V Vcc
GND Gnd

AC アダプタとフリップドットディスプレイの接続は、自明だと思います。また、いまは Arduino は USB ケーブル経由で給電していますが、ちゃんと組むときには三端子レギュレータで 24V 電源を 9V まで落として接続する予定です。

コードは Gist にあげてあります。

時計用の木材をシマホで切ってもらったので近いうちにちゃんと組んで動画をアップします。今日は大雨でシマホまで歩くのがたいへんであった。

Pocket CHIP が届きました

5 月末ごろに注文していた Pocket CHIP が、4 ヶ月の時を越えやってきました。Mac から SSH 接続するところまでメモ。

f:id:iizukak:20160919235841p:plain

f:id:iizukak:20160919235911p:plain

f:id:iizukak:20160919235942p:plain

まず知りたいことは root のパスワードですが、初期では chip が設定されています。

箱から取り出して最初にすることは充電だと思います。Pocket CHIP は Micro-USB ケーブルで充電できるのですが、ケーブルを接続しても背面の LED が一瞬フラッシュするだけで、充電されているかどうかよくわからないんですね。充電中かどうかは次のコマンドで確認することができます。

充電中の例

chip@chip:~$ sudo battery.sh
BAT_STATUS=0
CHARG_IND=1
BAT_EXIST=1
CHARGE_CTL=0xc9
CHARGE_CTL2=0x45
Battery voltage = 4204.2mV
Battery discharge current = 0mA
Battery charge current = 399.5mA

放電中の例

chip@chip:~$ sudo battery.sh
BAT_STATUS=0
CHARG_IND=0
BAT_EXIST=1
CHARGE_CTL=0xc9
CHARGE_CTL2=0x45
Battery voltage = 4074.4mV
Battery discharge current = 270.0mA
Battery charge current = 0mA

充電中だと、 Battery charge current が数百 mA になるようです。

Pocket CHIP に使われている Linux は、Github 上で管理されているようです。Debian ベースなのでしょうか、 apt コマンドが使えます。 SSH したいので、次のコマンドで必要なものをインストールしました。

$ sudo apt-get update
$ sudo apt-get install openssh-server

これで再起動すれば、 sshd が起動しています。

次に

$ ip add show wlan0

で IP アドレスを調べます。

chip@IPアドレス

SSH できます。パスワードは root と一緒で chip です。これで SSH できるようにはなるのですが、なんとなく接続が不安定です。どうも無線 LAN がパワーセーブモードになったりすると、接続が切れる疑惑があります。

sudo iw wlan0 set power_save off

でパワーセーブをオフにします。これで、ブツブツ切れるのはなくなったような。

これで快適に SSH 接続して Pocket CHIP 上で開発できるようになりました。Pocket CHIP についているキーボードは、お世辞にも押しやすいとはいえないので、本体のキーボードは外出時やちょっと動作確認したい時用ということになりそうです。

さて、 いろいろ試しにインストールしてみましたが、けっこう普通に動きます。Python はデフォルトで動作しますし、Julia も ARM 用バイナリをとってくるだけで起動しました。vim ももちろん入ります。

おまけに cpuinfo と、ちょっと動かしたあとの df の出力を貼っておきます。

chip@chip:~$ cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 2 (v7l)
BogoMIPS        : 100.24
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x3
CPU part        : 0xc08
CPU revision    : 2

Hardware        : Allwinner sun4i/sun5i Families
Revision        : 0000
Serial          : 1625420c0d02e958
chip@chip:~$ df
Filesystem     1K-blocks   Used Available Use% Mounted on
udev               10240      0     10240   0% /dev
tmpfs             101584   6780     94804   7% /run
ubi0:rootfs      3777124 580380   3196744  16% /
tmpfs             253956      0    253956   0% /dev/shm
tmpfs               5120      4      5116   1% /run/lock
tmpfs             253956      0    253956   0% /sys/fs/cgroup
tmpfs              50792      0     50792   0% /run/user/1000

多くの情報は、 Pocket CHIP のフォーラム で入手しました。フォーラムが活発なのは良いですね。

フリップドットディスプレイ Flip-Dot Boards XY5 を購入

フリップドットディスプレイ という表示デバイスがあります。マトリクス状に配置された黒/有色のパネルを電磁石を使って反転させることで模様を描くデバイスです。昔はバスの行き先表示や電車の時刻表にも使われていたようですが、最近ではあまり使われていないようですね。少なくとも日本では見かけたことはありません。フリップドットディスプレイについてはウェブを眺めているうちに知ったのですが、Youtubeなどを見てみると、かなり面白そうなデバイスです。

買ってみようかなと eBay などで調べると、中古品がちらほら出品されているのですが、5x7と小さいものが多く、仕様もよくわからない物が多いです。さらに調べると、ポーランドAlpha Zeta という会社が現行でフリップドットディスプレイを生産していることがわかりました。ただ、オンラインショップなどはなく、メールで注文する形式です。値段も、メールで問い合わせです。個人向けに売る気はあまり無いのかもしれませんが、メールにて少量買いたいという旨を伝えると、問題ないという返信が来ました。また、日本にも発送してくれるそうです。商品名は、 Flip-Dot Boards XY5 です。

www.youtube.com こちらの動画で使われているのが、おそらく Flip-Dot Boards XY5 の 14x28 ドットのものです。

いくつかサイズがあるようで、今回は 7x28 ドットと 14x28 ドットのもので迷ったのですが、試しに 7x28 を一台だけ注文しました。注文したいよとメールすると、PayPal のリンクが送られてくるので、PayPal 経由で支払います。発送はポーランドからでしたが、一週間ほどで届きました。UPS でけっこう迅速です。梱包はかなり厳重で、二重のダンボールに入っています。それぞれのダンボールがガムテープでバリバリにかためてあるので、開くのが大変でした。安心感はあります。

入っているものはパネルのみで、付属物などはありません。試しに動かしてみる場合、24V の AC アダプタのみ必要です。デモ動作がコントローラに入っているので、デモを動作させて動作確認を行うなら、AC アダプタだけあれば動きます。AC アダプタは、1 パネルなら 1A で余裕を持って動作するようです。ちなみに、仕様については、これまたメールを送るといくつか PDF で送ってくれます。仕様書は制御しようと思うと必須なので、確実にもらったほうがいいです。返信は早く、全てのメールの返信が 1 日で来ました。ちなみに、「Arduino で使ってみたいからサンプルコードありませんか」みたいな素人っぽい質問にも、サンプルコードを添えて返してくれたりとけっこうユーザーフレンドリーです。

デモを動作させるためには、背面の DIP スイッチの 8 個のほうを、"00000001" にします。最後の二桁がテスト用のコードになってまして、 01 にセットして AC アダプタを刺すと、デモが起動します。このとき、いくつかパネルが反転しなかったのですが、デモを数回流しているうちに改善しました。また、パネルは自立するのですが、完全に地面においてしまうと、一番下のパネルが回転できないことがあるようです。このため、ちょっとパネルの前の方を浮かせてやる必要がありました。また、大容量のコンデンサを積んでいるからなのか、キーンという音が動作中します。分からない人は分からないだろうなというくらいの音量なのですが。

Arduino とこれを使って時計を作っているので、進捗をまた書きます。

Arduino で RS485 通信(その2)

前回、RS 485 モジュールで通信を試みましたが、どうもデータの取りこぼしがあるようで、文字化けが発生していました。いろいろ Google で調べてみた結果、Arduino の SoftwareSerial は取りこぼしやエラーが多々あるようです。というわけで、TX, RX ピンを使ったハードウェアシリアルを試してみました。結果、取りこぼしなどはなくなりました。

今回も前回に引き続き aitendo さんの RS485 モジュール 2 つと Arduino Uno R3 を 2 つ使いました。接続は以下の通り

Arduino RS485 モジュール
RX RO
TX DI
8 DE+RE
5V VCC
GND GND

RS485 モジュールふたつは、 A<-->A, B<-->B と接続します。

f:id:iizukak:20160917141049p:plain

(参考にならなさそうだけど接続参考画像)

コードはこちらのブログを参考に、txden 変数を 8 番 pin に変更して試しました。

Arduino で RS485 通信

Arduino で RS485 通信をしてみます。使ったのは、aitendo さんの RS485モジュール です。これが、ひとつ300円程度で売っていたので 2 つ購入しました。Sparkfun の RS485 モジュールが 1000 円くらいするので、格安です。ただ、信頼性は謎ですが…。乗っているチップを見てみると、MAX485 が搭載されているようです。

f:id:iizukak:20160914233641p:plain

こちらのページ にある通り、Arduino Uno 2 台と RS485 モジュール 2 台を接続して試してみました。スクリプトもリンク先のページのものをまるっとコピーして使います。Arduino は無駄に複数台持ってます。すると、通信できているにはできているのですが…

f:id:iizukak:20160914233728p:plain

このように文字化けが。もうちょっと追ってみようと思います。

ちなみに、秋葉原の aitendo さんの店舗でこのモジュールを購入したのですが、初 aitendo でした。普段秋葉原でパーツ買い出しをするときには、秋月・千石・マルツで買ってしまうことが多いです。aitendo は、良い意味でカオスですね。Nokia 5110 液晶 が 500 円で売っていたので買ってみたのですが、こういう不思議系パーツがたくさん置いてあります。7 セグ LED やドットマトリクス LED なども、格安中古で出ています。LCD パネルも、中古のがたんまりと。なかなか面白いお店なので、秋葉原に行くときの巡回ルートに追加しました。

UNIX 時間時計(物理)を作る

UNIX 時間を表示する時計(物理)があったら面白いのではなかろうか、と思い作ってみました。

f:id:iizukak:20160911220021p:plain

f:id:iizukak:20160911220128p:plain

物理世界の UNIX 時間時計というアイディアは僕が一番最初に考えたものではなく、 MobileHackerzさん などが、よりスマートに作った例があります。今回は、汎用的なパーツで作ってみました。秋月電子で買えるものしか使ってません。

使用したパーツはつぎの通りです。

  • Arduino Pro Mini 互換機 x1
    • 5V, 16Mhz のものです
    • 今回のメイン
  • SainSmart の RTC モジュール x1
    • Arduino には基本的に RTC モジュールがついていないので、電源を切っても時刻を保持したいといった場合、充電池付きの RTC モジュールを使います。RTC モジュールはなにを使ってもいいと思うのですが、今回は秋月で売っている電池付きのものを選んだらこれになりました。
    • DS1307RTC というライブラリを使ったのですが、すこぶる便利でした。ライブラリの使い方については、以前の記事で書きました。
  • 横長のユニバーサル基板 x2
    • 制御用のパーツ( Arduino と RTC モジュール等)を乗せるものと、7セグ表示器をのせるものの2枚使っています。
    • ちょうどよく横長のユニバーサル基盤が秋月に売っていてラッキーでした。
  • 74HC595 x1
    • シフトレジスタです
    • 今回は、7セグ4桁の表示器を3つ使ったのですが、Arduino Pro Mini のポート数を節約する必要があったので、シフトレジスタを使うことにしました。
  • 12V AC アダプタ x1
    • Arduino を駆動できるものならなんでもよかったですが、手元にあった 12V 1A のものを使いました。
  • ブレッドボード用DCジャックDIP化キット x1
    • AC アダプタをユニバーサル基板に繋げられればなんでもいいのですが、DIP 接続できるこれはけっこう便利でした。
  • アクリルパネル 15cm x 4cm
    • 今回は、秋月のアクリルパネル をPカッターで切って、ドリルで穴を開けて使いました。2mm くらいなら、Pカッターで切れますね。切断中にメガネ屋三みたいなにおいがします。
    • だめだったらプロの加工屋さんに依頼しようと思ったのですが、手でいけてラッキーでした。
  • 7セグ3桁表示器 x3
  • 220Ωの抵抗 x8
  • 3mm のスペーサーとナット、ネジ x適量
    • 個人的な好みで樹脂製のものを使っています。
  • ピンヘッダ x適量

作り方は、基本的に Arduinoで遊ぶ さんのページと、ブログの前の記事 を合体させるだけです。Arduino ピンのコンフリクトはしないようになっています。参考までに、組み上げ前の基板の写真をあげておきます。

f:id:iizukak:20160911232809p:plain

f:id:iizukak:20160911232840p:plain

時刻合わせについては、DS1307RTC の Github リポジトリ をそのまま Arduino IDE から書き込む形で行っています。なので、時刻合わせは PC がないとできないのですが、RTC もあるし、頻繁に時刻合わせはしないよなぁと思いこれでよいことにしました。

本体のスクリプトGist にあげてあります。デバッグ出力など残したままになっているので、参考程度にどうぞ。

いやはや、こんなシンプルなものでも、いざ作るとなるといろいろ考えなければいけないことが多発して面白いですね。例えば、Arduino では UNIX 時間を保持しようとすると long 型を使わなければいけないんですが、long 型を使うと動作が著しく遅くなる現象が発生してしまったりしたので、4 桁ごとの int 型に分けて処理したりしています。