2018-12-21
毎年恒例、鯖江の忘年会用の500円のクリスマスプレゼント、今年の和紙あかり!
色相をゆったりと変えながらほのかに光るオブジェです。

水風船、木工用ボンド、ハケを購入、300円(今回使用した和紙はもらいもの)
マイコンLPC810 75円電池ケース110円、WS2812B 12円、と合わせて500円!

和紙をいい感じにちぎります。

和紙を水に浸し、水で溶いた木工用ボンドをハケで塗って、膨らませた水風船に貼っていきます。

和紙で包んだ水風船。

ドライヤーでざっと乾かしますが、時間がかかりそうだったので吊り下げて放置。

乾いたら風船を割って、ハサミで形を整えてできあがり!

LPC810の開発は、IchigoJam上で可能!
マシン語をIchigoJamからLPC810へシリアルケーブルと制御信号を使って書き込み!
(接続方法、LPC810 - IchigoJamプリント

こちら書き込みプログラムと、WS2812Bで色相環のマシン語プログラム(ソースは末尾に)

1 'LPC810 Writer 110 UART3,2:OUT2,0:OUT1,0:WAIT9:OUT1,1 120 CLS:?"?":GSB@R 130 ?"Synchronized":GSB@R 140 ?12000:?:GSB@R:GSB@R 150 ?"A 0":GSB@R:GSB@R 160 ?"U 23130":GSB@R 170 ?"W 268436096 ";L:GSB@R:UART1,2:LC0,-1:FORI=0TOL-1:?CHR$(PEEK(A+I));:NEXT:UART3,2:LC0,6:? 180 ?"P 0 0":GSB@R 190 ?"E 0 0":GSB@R 200 ?"P 0 0":GSB@R 210 ?"C 0 268436096 256":GSB@R 220 OUT2,1:OUT1,0:OUT1,1:END 300 @R:K=INKEY():IF K=13 K=INKEY():WAIT9:RTN ELSE CONT SAVE1 NEW 10 POKE#700,0,4,0,16,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,251,255,239,41,72,223,33,1,96,41,72,1,104,3,34,210,67,17,64,1,96,39,72,39,73,1,96,39,72,12,33,1,96,40,76,10,38,48,2,32,96 20 POKE#746,0,32,0,33,2,70,2,42,0,221,3,58,0,35,1,37,40,66,0,208,51,70,91,26,0,43,0,218,91,66,163,84,127,180,0,240,10,248,0,240,40,248,127,188,1,49,177,66,232,209,1,48,6,40,228,209,226,231,3,32 30 POKE#782,23,73,21,76,4,34,128,37,11,120,34,96,43,66,8,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,96,7,224,0,0,34,96,0,0,0,0,0,0,0,0,0,0,0,0,109,8,233,209,73,28,1,56,228,209,112,71,8,79,1,63,253,209,112,71 40 POKE#7C8,128,128,4,64,16,0,4,64,192,193,0,64,191,255,255,255,0,32,0,160,0,35,0,160,0,0,0,16,128,26,6,0 50 A=#700:L=232:LRUN1 SAVE2 RUN

LPC810へ書き込んだら、電源をつなぐだけで光ります!

立てて使いたいので、単4電池2本のスイッチ付き電池ケースの線を出す方向を変更。

照明を正面にすることにこだわった結果、マイコンLPC810がちょっとはみ出しました。

できあがり!

とっておいたちょうど箱でパッケージング!

ラベルプリンターで製品名を貼り付け。リボンは自分では結べませんでした。

喜んでくれて何より!
和紙とのりの工作、簡単で良い仕上がりになるのでおすすめ!
中身のライト、IchigoJam制御にしたり、100均で買ってきてもいいですね。


IchigoJamからLPC810へ書き込んでいる様子

WS2812Bを色相環制御するLPC810用 Armマシン語プログラム、asm15表記
@MAIN内のR6が最大輝度、@WAIT_Nが色を切り替える待ち時間
色相環アルゴリズムは、PCN秋葉原 Assemblage 発のBASICプログラムから移植

DATA L #10000400 ' stack DATA L #21 ' entry point DATA L 0, 0, 0, 0, 0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=#DF 'SWM, GPIO, I2C:off, FLASH, FLASHREG, RAM, ROM, SYS [R0]L=R1 R0=[@FLASHCFG]L R1=[R0]L R2=3 ' flash no wait: set 0b00 R2=~R2 R1&=R2 [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 @MAIN R4=[@RAM]L R6=10 ' =V R0=R6<<8 [R4]L=R0 ' HUE @HUE ' R4 color address R0=0 ' 0 to 5, =I @HUE_LOOP1 R1=0 ' to T, =H @HUE_LOOP2 R2=R0 R2-2 IF LE GOTO @HUE_SKIP1 ' if A>2 R2-=3 @HUE_SKIP1 R3=0 R5=1 R0&R5 IF 0 GOTO @HUE_SKIP2 R3=R6 ' =T @HUE_SKIP2 R3=R3-R1 R3-0 IF GE GOTO @HUE_SKIP3 R3=-R3 @HUE_SKIP3 [R4+R2]=R3 PUSH {R0-R6} CALL @WS2812B CALL @WAIT POP {R0-R6} R1+=1 R1-R6 ' =T IF !0 GOTO @HUE_LOOP2 R0+=1 R0-6 IF !0 GOTO @HUE_LOOP1 GOTO @HUE 'WS2812B x1 driver 'param ' R1 - address (G, R, B) 'use ' R0 - data count (ex WS2812B x 3) == 3 ' R2 - OUT value ' R3 - data value ' R4 - GPIO address ' R5 - bit count @WS2812B R0=3 R1=[@RAM]L R4=[@GPIO_NOT0]L R2=`100 ' PIO0_2 @LOOP_DATA R5=#80 R3=[R1] @LOOP_BIT [R4]L=R2 R3&R5 IF 0 GOTO @ZERO NOP NOP NOP NOP NOP NOP NOP [R4]L=R2 GOTO @JOIN @ZERO NOP [R4]L=R2 NOP NOP NOP NOP NOP NOP @JOIN R5=R5>>1 IF !0 GOTO @LOOP_BIT R1=R1+1 '+6clock R0-=1 IF !0 GOTO @LOOP_DATA RET 'WAIT 'use ' R7 - wait count @WAIT R7=[@WAIT_N]L R7-=1 'wait R7*3+1 clock IF !0 GOTO -1 RET ' init @SYSAHBCLKCTRL DATA L #40048080 @FLASHCFG DATA L #40040010 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_NOT0 DATA L #A0002300 ' WS2812B @RAM DATA L #10000000 @WAIT_N DATA L 400000

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS