真夜中の工作室 midnight craftcenter

電子工作とカメラ、写真の趣味のブログ

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でもいいかもしれない。
変身ステッキっぽくて。
バレンタインデーにも是非!みたいな。