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()