POV_pen
急な誕生会で、プレゼントを用意する暇がない。
そんな時も、Arduinoが最適です。
他人のsketchを旨く利用しましょう。
今回は簡単なのと以前から興味があった。POVをMake。
sketchは敬愛するスタバ斉藤先生らのものを流用。
http://pc.watch.impress.co.jp/docs/2008/1226/musashino024.htm
sketchのファイルのリンクが切れてるけど、本文中のものをつなげば全てです。
これのパターンだけ変えて、使わせて頂きました。
#define LEDPIN 2 // どのピンから使ったか(今回は2から9) #define DELAYMS 4 // 点滅間隔(ミリ秒で指定) #define BITMAPLEN1 47 // ビットマップの大きさ(行数に同じ) byte bitmap[] = { 0b00000000, 0b11111111, 0b00001000, 0b00001000, 0b11111111, 0b00000000, 0b00000000, 0b11111000, 0b00100110, 0b00100001, 0b00100110, 0b11111000, 0b00000000, 0b00000000, 0b00000000, 0b11111111, 0b00010001, 0b00010001, 0b00001110, 0b00000000, 0b00000000, 0b11111111, 0b00010001, 0b00010001, 0b00001110, 0b00000000, 0b00000000, 0b00000111, 0b00011000, 0b11100000, 0b00011000, 0b00000111, 0b00000000, 0b00000000, 0b00001000, 0b10001000, 0b11011000, 0b01111100, 0b00111110, 0b00111111, 0b00111110, 0b01111100, 0b11011000, 0b10001000, 0b00001000, 0b00000000 }; unsigned char pos = 0; // 現在のビットマップ中の位置 unsigned char i = 0; char sel = 1; void setup() { int len=13; // LEDが接続されたピンを出力に設定します int pin; for(pin=LEDPIN; pin<LEDPIN + 7; pin++) { pinMode(pin, OUTPUT); } } void loop() { for(i=0; i<8; i++) { // 表示する1byteから1bitを取り出してピンの状態に反映 digitalWrite(LEDPIN + i, (bitmap[pos] >> i) & 0b00000001); } if(pos++ == BITMAPLEN1) pos = 0; delay(DELAYMS); }
パターンはいきなりは書きづらいので、EXCELか何かで横書きしたものを変換するといいと思う。
自分は、赤色のセルに"1"を書いて、行列を入れ替えて貼り付け、取り付け位置でLSBかMSBかそろえて、8bitを連結した。
=CONCATENATE("0b",K13,L13,M13,N13,O13,P13,Q13,R13,",") とか。
物理的な実装は、ペンシル型第2段として、鉛筆にArduino pro miniを貼り付けることにした。3.3Vタイプにしたが、CR2032ではLEDが全部光らなかったんで、強引に二枚重ねにしてRAW端子から供給した。
LEDはチップタイプをと思ったが時間が無かったのと、前回のDrawdioで部品のむき出し感も面白いなと感じたので敢えて、ジャンクっぽくした。
スライドSWも付けて表示パターンを複数にしようと試みたが、loopでif分使うだけで表示に影響がでたみたいだったのと、時間切れで終了。
LEDも2個余っているし、将来の拡張用と言うことで。
デフォルトの”ニャ”の写真はスローシャッター撮ったのだが、自分の”HAPPY★”は取り忘れた。
もうあげちゃったんで、LEDの選定で3V電池一個、表示パターンの切り替え等課題が残ったので、もう一個作る予定。lilypadでもいいかもしれない。
変身ステッキっぽくて。
バレンタインデーにも是非!みたいな。