E3 任天堂カンファレンスの生中継動画を見てたらこんな時間、、、
3DS用ソフト第一弾が、昔なつかしい「パルテナの鏡」のリメイクだっていうのには、ちょっとびっくり。
Japaninoに付属の光残像ユニット(POV)
LEDを動かしながら点滅することで、残像によって文字などを表示できるという面白グッズ。
データをいちいち手で作成するのは大変なので、フリーの8×8日本語フォント「美咲フォント」を、Arduino言語用のデータ文字列にコンバートするスクリプトをPythonで書いてみました。
- 大人の科学マガジン vol.27 「ジャパニーノ」(その4)P.O.Vライブラリ
ライブラリ化されてます。 こちらのデータを差し替えるだけでもいろいろ遊べます。 - 実行環境 Python2.5 (多分、2.6でも動きます)
- 必要なライブラリ PIL
- 必要なファイル 8*8ドット日本語フォント「美咲フォント」
スクリプトと同じフォルダに解凍してください。
フォント作者さんに感謝
がんばれば、twitterのツイートを拾ってきてPOVへシリアル転送して表示させる、、、 みたいなことも可能かと。(アルファベット+かな+画数の極少ない漢字なら)
シリアルでPCからJapaninoへビットマップデータを転送しながら、メモリに収まらない長さの文字を表示するのは実験済み。
、、、ですが、ジュゲムをまるまる表示させようとすると、最後まで行く前に手が疲れてきます。 というか飽きます(汗
たぶん、普通に長い文字を表示させたいだけなら、フラッシュメモリに格納してやるだけで足りるんじゃなかろうか、という気がします。
ustreamで、アイドルの女の子が生放送中に送られてきたツイートを読み上げながらPOVを回してツイートを表示する、、、みたいな、 深夜ラジオのハガキコーナーみたいなのをやれば それなりに面白いかも、、、と思ったけど、オサーンなので止めw
- 大江麻理子さんの番組用Twitterアカウント(期間限定にて更新終了)
- モヤモヤさまぁ~ず2
週変わりハガキコーナー動画有り。
地元は、「ジャパネットたかだ 生放送通販」と重なった週は お休みなのです。悲しい、、、
import Image,ImageDraw,ImageFont from Image import NEAREST,ROTATE_270 try: range=xrange except: pass DEBUG=True #変換した文字列 #あまり長いと、SRAMに収まりません。 多分 jugem=u"じゅげむじゅげむごこうのすりきれ" #かな16文字でビットマップデータ128バイト使用 #16 x 8 =128 class PovText(object): def __init__(self,font="MISAKI.TTF"): self._im=Image.new("1",(1024,8)) self._draw=ImageDraw.ImageDraw(self._im) self._font=ImageFont.truetype(font,8) self._slen=1024//8 #safety length self._slen=4 #実験用 def convert(self,txt): "convert text to Pov BitData" dat=[] font=self._font im=self._im draw=self._draw slen=self._slen totalWidth=0 for i in range(0,len(txt),slen): t= txt[i:i+slen] w,h=draw.textsize(t,font) if DEBUG : print t,w draw.rectangle((0,0,2048,8),fill=0) draw.text((0,0),t,font=font,fill=255) self.s=im.transpose(ROTATE_270).tostring() dat.append(self.s[:w]) totalWidth+=w return "".join(dat),totalWidth def bin(c): dat=[] msk=0x80 for i in range(8): if msk&c : dat.append("1") else : dat.append("0") c<<=1 return "0b"+"".join(dat) def text2bin(txt): u"じゅげむ をバイナリーデータ文字列に" p=PovText() dat,h=p.convert(txt) if DEBUG : Image.fromstring("1",(8,len(dat)),dat).save("text2bin.png") tlist=[] for i in dat: t="%s,"%bin(ord(i)) if DEBUG: print t tlist.append(t) txt="\n".join(tlist) return txt if __name__=="__main__": t=text2bin(jugem) fp=open("jugem.txt","wb") fp.write(t) fp.close()