福野泰介の一日一創 - create every day

プログラミングは手芸! IchigoJamはんだづけ&プログラミング体験でクリエイターズランド出展

2018/06/30
#IchigoJam #sabae #event 

ハンドメイドクラフトの祭典「クリエイターズランド@サンドーム福井

手芸屋さんと電子パーツ屋さんは、たくさんのテンション上がるパーツがあるワクワク感がそっくり。 初心者用のキットもあって、道具もいろいろ。少しずつ技をゲットし、自分なりの作品を作ったらマーケットへ!という流れは一緒。 ものづくりの楽しさ、融合すると、きっともっと楽しい!

「プログラミングも電子工作も、手芸のひとつ」を知ってもらうべく出展。

ちょっとはんだづけ体験してみる・・・の予定が、結局全部一人ではんだづけした小学1年生!
子供にはまだ早いかも?と思う親心に反して、夢中になる子供たち。


キーボード(500円)も合わせて、自分だけのパソコンを買ってもらえることになりました!
良かったね!


初めてのキーボードでも大丈夫、ガシガシ打っても壊れません!壊れても500円〜1000円!
LEDを光らせてくれた!ロボットを動かせた!自分の意のままになる静かな感動体験が醍醐味です。


6足歩行ロボット「FOLO」をプログラミングして動かす体験


子供によってハマるポイントはちょっとずつ違っておもしろい


AquesTalk pico を使った、しゃべるIchigoJamで、呼び込みの自動化中

10 S="konnnitiwa":GSB@T:WAIT300 20 S="bokuwa itigoja'mu dayo":GSB@T:WAIT300 30 S="puroguraminngu site asobou":GSB@T:WAIT600 40 GOTO 10 300 @T:U=I2CW(46,S,LEN(S))+I2CW(46,13):RTN

ゆっくり実況だーっと小学生から声が上がるのがおもしろい!


怪しく光るボタン電池、食べたらお腹を切らなきゃいけない危険物。

LEDの点滅具合を自在に操りたくなったら、プログラミングして自作しよう!という流れ。
時々、キラッと光る目。暗くなったらゆっくりホタルのように点滅。サーボを使って動かすことも!

ゲジゲジっぽくて、積み木のように遊んでくれた、コンピューター LPC1114。
かわいくても計算能力は秒間5000万回。
このコンピューターが、2013年、わずか110円で登場してくれたことが、IchigoJam誕生のヒミツ!
110円で買えるコンピュータ


多くのクリエイター、クリエイター好きで賑わうサンドーム福井。
かわいく光るデジタル作品と融合できれば、もっと楽しくなっちゃうかも!?


共著で製作初のIchigoJam本「IchigoJamでプログラミング」のメイン著書、あっしーこと元福井高専の蘆田さんも立ち寄ってくれました。


鯖江市長も立ち寄ってくれました!


1500円パソコン、IchigoJamプログラミングxテクノ手芸
サンドーム福井にて、7/1 16時まで、サンドーム内2FのワークショップゾーンW27にて出展!


スイーツ


ミーゴレンなど、おいしいものもいろいろ!

links
- クリエイターズ ランド〜今、ワクワクが始まる〜
- 木製ペントミノパズルとプログラミング! はんだづけ人気だったクリエイターズランド出展2日目

熱中症対策を自動化しよう! ウェアラブル扇風機 BodyFan をIchigoJamで制御する

2018/06/24
#IchigoJam #maker 

暑い日の外、注意したい熱中症。
LinkDataの豊田さん開発、襟に掛けて中から冷やす、ウェアラブル扇風機「BodyFan
温度湿度に合わせて自動的にスイッチが入ると便利かも?ということで、IchigoJamによる制御実験。

開けて見ると、上部にちょっとしたスキマ。高精度な温度計とLPC1114FDH28を小さくまとめればぎりぎり入るかも?

取り急ぎシンプルに電源スイッチを横取りして、IchigoJamのOUT1で制御するには、この位置に接続。
(モーターを制御するPWM信号線を探して、なつかしの 1/f ゆらぎ出力などにも挑戦したい)

ボタンの片側は電源電圧3.7Vでプルアップされていて、押すとGNDになる標準的なタイプ。
IchigoJamから下記命令でスイッチを押したことなる。

OUT1,0:WAIT3:OUT1,0

ただ、このままでは電源投入時に毎回押したことになってしまうのと、出力時の電圧差が気になるので、IN1へ接続し、INと0出力の切り替えが良さそう。

OUT8,0:WAIT3:OUT8,-1

えりかけ扇風機、はんだづけ時の煙回避にも便利かも。
レッツ、ウェアラブル家電ハック!

links
- えりかけ扇風機BodyFan|ヘルメットファン|熱中症対策研究所
- Amazon | えりかけ扇風機 BodyFan(服の中へ送風可能)首かけ/手持ち/日傘/ベビーカー兼用 USB充電池式 携帯扇風機 (3インチファン, 白) | Cools.jp | 携帯扇風機 通販

150枚限定、IchigoJam - jig.jp 15th anniversary edition

2018/06/04
#IchigoJam #jig 

IchigoJam、jig.jp 15周年記念版!

"Hello World!" に替わる、プログラミングの世界への新しい入口、"LED1"


すっきりした基板!ピン名称が読みやすい!


LPC1114FDH28をはんだづけ。フラックスを使うと意外といけます。


あとは、いつものように、サクサク楽しくはんだづけ!


改良版基板を先取り!ピンソケットまわりが広がっていて、はんだづけしやすい。


電源スイッチが強化され、microUSBの足を曲げずにはんだづけもできるようになってます。


カラーリングはお好みでどうぞ。

すべてのこどもたちへ、プログラミングを!
学生も、おとなも、シニアの方も!

links
- IchigoJam
- jig.jp夏のインターン鯖江で働くエンジニア、共に募集中です!)

IoTネコライフ、ネコゴハンマシン改修とIchigoJam組み込みテクニック

2018/05/20
#IchigoJam #maker 

我が家のネコエサイノベーション、初代はシンプルなカウンター、二代目はぴったり時刻に開くマシン
プリンの箱のまま、1年近く問題なく稼働してましたが、ついにケースに収まりました。

隙間に、DIP化されたLPC1114のマイコンモジュール(350円)を使って収めます。

ソレノイドを動かすための巨大な大きなコンデンサ(6800uF 10V)は、元のマシンから拝借。作動時に電圧が大きく下がってしまうため、制御部分との電源共有化は断念、電源ケーブルは2本出しとなりました。

ソレノイドを動かすためのリレー。リレーを駆動するMOSFET、MOSFETを制御するIchigoJamからのマイコン信号。小さな電気信号を少しずつ大きな力に変えています。

リアルタイムクロック(RCT)モジュールをI2Cで接続できるように配線も合わせてユニバーサル基板に実装が意外と配線が多い!このくらいの規模でも、Upverterで作って基板頼んだ方が効率は良さそう。でも、その場でガシガシはんだづけして作る楽しさは格別。


マイコンモジュールを使った注意点としては、左右の電源とGNDをジャンパ線でつないでおくこと。電圧差が発生し、うまく自動起動しない状態になりました。

SLEEPコマンドを使う場合、BTNピンを1MΩでプルアップするのを忘れずに!自動起動前提で使う場合は、BTNをGND接続でOKです。シリアル接続でESCキーコード送信でメンテナンス可!

あとはシリアルで接続して、IchigoJamを書き込み、プログラムを流し込んでできあがり。

10 LET[10],700,1200,1700,2000,2300:C=5 20 GSB@GETHM:A=0 30 IF N>[10+A] ?N,[10+A]:A=A+1:IF A=C A=0:GSB@WAITM:ELSE CONT 50 @LOOP 60 GSB@GETHM:CLS:?" NOW:";N:?"NEXT:";[10+A] 70 IF N>=[10+A] ?"GOHAN!":GSB@MOVE:WAIT60:A=(A+1)%C:IF !A GSB@WAITM 80 WAIT 60*10:GOTO@LOOP 90 @WAITM:GSB@GETHM:CLS:?" NOW:";N:?"WAIT TOMORROW":IF !N RTN ELSE WAIT60*30:CONT 100 @MOVE:WAIT1:OUT1:WAIT1:OUT0:RTN 200 @GETTIME 210 IF I2CR(#68,0,#700,7) ERR 220 FOR I=0 TO 6:[I]=PEEK(#706-I):[I]=[I]>>4*10+[I]&15:NEXT:RTN 240 @GETHM:GSB@GETTIME:N=[4]*100+[5]:RTN

ACアダプター動作させるので、省電力化しないメンテナンス性と応答性重視のコード。
10行で、7時、12時、17時、20時、23時の1日5回動作するよう設定してます。


時刻設定をいつでも変えられるように、シリアル通信ポートも外に引き出すことにしました。これで、箱を開ける手間なく、設定変更できます。


こちらが元の、IchigoJam完成版をそのまま使ったネコゴハンマシン。1台、回収できました。

他、ネコ関係、外出先からの確認に便利なネコIoTとして、ネコトイレIoTと、IO-DATAの「Qwatch」が活躍中!

ICTで良いネコライフを!

変換基板到着! IchigoJam for STM32 でも動くArmマシン語3x3キャラ描画

2018/02/21
#IchigoJam #stm #KidsIT #asm 

注文していたプリント基板(PCB)が到着、動きました!

IchigoJam for STM32
LEDをつけるけすはもちろん、IchigoJam BASICのツールやゲームはそのまま動作。
Armマシン語も、仮想RAMしか使わないものならそのまま動きます!
第3回こどもプログラミングサミット」のIchigoJamワークショップにて初お披露目!

つくりかた手順
1. 変換基板を入手(PCB発注など)
2. テスターで変換基板の回路パターンを確認(電源とGNDがショートしていないかなど)
3. CPU、STM32F030K6T6をはんだづけ(0.8mmピッチなのでLPC1114FDH28より少し簡単)
* 秋月電子で入手可能なSTM32F042K6T6でもOK
4. CPUを実装していないIchigoJamを準備(IchigoJam 完全組立キットTなど)
5. 変換基板をCPUとして接続(ピンヘッダーではんだづけや、抜き差しできるようになどお好みで)
6. USBシリアルを使い、STM用のファームウェア、IchigoJam BASICをstm32writerを使って書き込みます
* ファームウェアはIchigoJam-FANにてβ公開予定、書き込み時に接続待ちがでた場合、RESETピンを一瞬GNDに

変換基板とSTM32F030K6T6。

ミニテクニック
IchigoJam BASIC、GOTOを使わないFORコマンドを使ったエルチカ無限ループ。

FOR I=0 TO 1 STEP 0:LED A:WAIT10:A=1-A:NEXT

キャラクター9つで3x3サイズの大きなキャラとして表示する、Armマシン語。
配列の先頭2つで座標を指定して、9文字分の文字列を渡すと表示します。

10 POKE#700,8,68,8,35,27,2,11,68,26,136,89,136,128,51,128,51,19,68,73,1,11,68,3,33,2,120,26,112,66,120,90,112,130,120,154,112,3,48,32,51,1,57,245,209,112,71 20 LET[0],RND(30),RND(20):U=USR(#700,"ABCDEFGHI") 30 GOTO 20

asm15でアセンブルできるプログラムはこちら
(R1を使った仮想メモリアドレスを物理メモリアドレスへ変換がポイント)

R0+=R1 R3=8 R3=R3<<8 R3+=R1 R2=[R3]W ' [0]=X R1=[R3+1]W ' [1]=Y R3+=128 R3+=128 R3+=R2 R1=R1<<5 R3+=R1 R1=3 @LOOP R2=[R0] [R3]=R2 R2=[R0+1] [R3+1]=R2 R2=[R0+2] [R3+2]=R2 R0+=3 R3+=32 R1-=1 IF !0 GOTO @LOOP RET

高速化したい時、メインループの一番内側から順にマシン語化してみましょう
Armマシン語入門

Armマシン語でライフゲーム - IchigoJamとRaspberry Pi用IchigoJam RPi(beta)で動く!

2018/01/28
#arm #IchigoJam #rasppi 

1995年のMSX-FANで出会ってから、シンプルな法則から生まれる多彩な結果に魅了されたライフゲーム。
一日一創でも、広大なライフゲームチェックボックスでつくったもの光の3原色をレイヤー表示したものなど作ってました。

IchigoJam BASICでも、10x10くらいなら配列を使ったプログラミングの練習にもちょうどいい感じでできます。
シミュレーション入門 / こどもパソコン IchigoJam でつくるライフゲーム
IchigoJam でも IchigoJam RPi(1.2b16以降) でも同じプログラムで動きます!

IchigoJam-FANにて、紹介あったArmマシン語でサクサク全画面で動くライフゲーム!
IchigoJam RPi vs LPC1114 マシン語ルーチンで動作違いを確認(戻り値の動き)
asm15 assembly表記にしてみました。

こちらちょうど1kbyte(=1024byte)になったライフゲームプログラム。(ベースプログラム by KubotaProject

1 'L-GAME 10 POKE#7D0,240,181,132,70,0,32,0,35,0,36,37,0,0,38,45,66,6,208,1,45,4,208,2,45,2,208,3,61,1,54,246,231,66,9,87,1,199,27,2,180 20 POKE#7F8,0,33,18,66,4,209,54,66,9,209,23,33,73,1,6,224,22,42,4,209,2,46,2,209,23,33,73,1,73,66,63,66,3,209,45,66,6,209,32,49 30 POKE#820,4,224,31,47,2,209,2,45,0,209,32,57,10,0,2,188,23,24,127,25,32,37,110,67,191,25,33,63,9,34,18,2,191,24,125,92,101,69,0,209 40 POKE#848,1,51,1,52,9,44,196,209,143,36,36,1,100,90,198,8,247,0,199,27,53,25,7,38,246,27,111,92,132,24,1,34,178,64,102,92,102,69,7,209 50 POKE#870,3,43,9,208,4,43,7,208,255,36,98,64,23,64,2,224,3,43,1,209,23,67,111,84,64,28,66,9,23,42,162,209,0,224,132,70,0,32,9,34 60 POKE#898,18,2,143,35,27,1,91,90,0,36,230,8,247,0,231,27,245,24,7,38,246,27,111,92,247,64,1,37,47,64,165,24,1,47,1,209,64,28,103,70 70 POKE#8C0,111,84,100,28,101,9,23,45,235,209,240,189 100 CLS:S=#700:W=0:FORI=0TO95:POKES+I,0:NEXT 110 FORI=0TO255:G=RND(736):M=G/8+S:F=7-G%8:R=PEEK(M):R=R|1<<F:POKEM,R:NEXT 120 WAIT3:LC0,23:?DEC$(USR(#7D0,#ED),5);:CONT

#700からのメモリに1マス1bitの生命データを置き、USRのマシン語読み出しで1世代進めています。
asm15形式にした、Armマシン語プログラムはこちら。(ベースプログラム by KubotaProject

' LIFE GAME - START ADDRESS #7D0 PUSH {LR,R4-R7} R12=R0 R0=0 @LP0 R3=0 R4=0 @LP1 R5=R4<<0 R6=0 @LP2 R5&R5 IF 0 GOTO @JP1 R5-1 IF 0 GOTO @JP1 R5-2 IF 0 GOTO @JP1 R5-=3 R6+=1 GOTO @LP2 @JP1 R2=R0>>5 R7=R2<<5 R7=R0-R7 PUSH {R1} R1=0 @TOP R2&R2 IF !0 GOTO @BOTTOM R6&R6 IF !0 GOTO @LEFT R1=23 R1=R1<<5 GOTO @LEFT @BOTTOM R2-22 IF !0 GOTO @LEFT R6-2 IF !0 GOTO @LEFT R1=23 R1=R1<<5 R1=-R1 @LEFT R7&R7 IF !0 GOTO @RIGHT R5&R5 IF !0 GOTO @JP5 R1+=32 GOTO @JP5 @RIGHT R7-31 IF !0 GOTO @JP5 R5-2 IF !0 GOTO @JP5 R1-=32 @JP5 R2=R1<<0 POP {R1} R7=R2+R0 R7=R7+R5 R5=#20 R6*=R5 R7=R7+R6 R7-=#21 R2=9 R2=R2<<8 R7=R7+R2 R5=[R7+R1] R5-R12 IF !0 GOTO @JP2 R3+=1 @JP2 R4+=1 R4-9 IF !0 GOTO @LP1 @PREP R4=143 R4=R4<<4 R4=[R4+R1]W R6=R0>>3 R7=R6<<3 R7=R0-R7 R5=R6+R4 R6=7 R6=R6-R7 R7=[R5+R1] R4=R0+R2 R2=1 R2<<=R6 @JUDGE R6=[R4+R1] R6-R12 IF !0 GOTO @JPB R3-3 IF 0 GOTO @JP3 R3-4 IF 0 GOTO @JP3 @DEATH R4=#FF R2^=R4 R7&=R2 GOTO @JPMEM @JPB R3-3 IF !0 GOTO @JP3 R7|=R2 @JPMEM [R5+R1]=R7 @JP3 R0=R0+1 R2=R0>>5 R2-23 IF !0 GOTO @LP0 GOTO @JPX2 @MEM2VRAM R12=R0 @JPX2 R0=0 R2=9 R2=R2<<8 R3=#8F R3=R3<<4 R3=[R3+R1]W R4=0 @LPX1 R6=R4>>3 R7=R6<<3 R7=R4-R7 R5=R6+R3 R6=7 R6=R6-R7 R7=[R5+R1] R7>>=R6 R5=1 R7&=R5 R5=R4+R2 R7-1 IF !0 GOTO @JPX1 R0=R0+1 R7=R12 @JPX1 [R5+R1]=R7 R4=R4+1 R5=R4>>5 R5-23 IF !0 GOTO @LPX1 POP {PC,R4-R7}

asm15 assemblerでアセンブルできます。

asm15 assemblerのアップデート
- R8からR15レジスタに未対応の一部命令を追加しました。
- レジスタに代入できるのは8bit/1byteの符号なし定数までなど、範囲制限のある数値で超える場合にエラーが出るようにしました。

IchigoJam、ラズパイ、スマホで動くArmマシン語、興味持った方はこちらからどうぞ!
はじめてのマシン語 - IchigoJamではじめるARMマシン語その1

My First Machine language - the simplest course of Arm machine language with IchigoJam step1

2018/01/25
#IchigoJam #KidsIT #Arm #rasppi #english 

Computers only know them binary machine language using just 0(off) and 1(on).
How do we make binary number sequence? It's depends on computers.


"RUN the Arm machine language on IchigoJam RPi after 1.2b16 (Raspberry Pi 2)"

The computer of IchigoJam understands 16 bit words (0 or 1 x 16).

0011000000000001

This machine language means to add 1 to R0 register. (resisters are kind of memories in the computer)

First 5 bit means "to add", next 3 bit means the resister number, last 8 bit means number to add.

00110 000 00000001

Let's write to RAM using POKE command of IchigoJam BASIC. (*IchigoJam BASIC reference ver 1.2)

POKE#700,`00000001,`00110000

#700 is position of RAM. Number starts with ` means binary number. (# for hexadecimal number)
To write last 8 bit in the first is a rule of this computer. (little-endian)

You need an other machine language word to work, "return" to IchigoJam BASIC.

0100011101110000

Write this word to RAM in the same way.

POKE#702,`01110000,`01000111

You are ready to run!

?USR(#700,1)

Did you get a number 2 as a right result?

USR command needs an start address of the machine languages and a number as a parameter.
Please check using 100 as a parameter.

?USR(#700,100)

Try to make to add 5 program using the machine language.

POKE#700,5 ?USR(#700,100)

You did it!

Speed is the greatest advantage of using the machine language.
The disadvantage is wrong machine language program doesn't protect your system.
So, please save before run if you make long program with machine language.

IchigoJam will stop if you write wrong machine languages.
Try to freeze your IchigoJam.

?USR(#704,0)

Computers work with some machine language words such them.
CPU of IchigoJam (LPC1114 Arm Cortex-M0) knows only 56 words Arm Thumb machine language.
It's very simple to understand!

If you use IchigoJam RPi after 1.2b16 (Raspberry Pi2/3 Arm Cortex-A7/A53), it knows more words.

It's a sample code to use SIMD(single instruction multiple data) machine language.
QADD8 can calculate 4 number as parallel during just 1 CPU cycle.

POKE#700,#80,#FA,#10,#F0,#70,#47 ?HEX$(USR(#700,#1234)) 2468

*It can calculate 8bit x 4 numbers but variables of IchigoJam BASIC are 16bit.

To be continued!

references
- Cortex-M0 Technical Reference Manual - Instruction set summary / ARM Information Center
- Cortex-A7 MPCore Technical Reference Manual - About the programmers model / ARM Information Center

links (now in Japanese)
- asm15 - simple Arm assembly language and machine language table
- asm15 assembler for IchigoJam
- series of "My First Arm Assembly language"

IchigoJamが音痴な理由と対処法、STM32F0版IchigoJamは音痴が解消する見込み

2018/01/04
#IchigoJam #stm32 #maker 

IchigoJamには懐かしのBEEP音とPLAY文によるMML演奏が可能です。
ただ訳あってちょっと音痴です。

音痴な理由、2つ

1. 標準で付属しているサウンダーの周波数特性
音楽再生用じゃないので、与えた周波数通りには鳴りません。
別途エイリアンスピーカーなどに接続することである程度解消されます。

2. 元々音痴で鳴らしている
標準のオクターブ(O4)で、ドのシャープで1.2%、ファで2.2%ずれています。
ディスプレイ表示用の水平同期信号を最低周期として使っているために、ちょうどいい周波数になっていないのです。
PWMコマンドやマシン語を使って、目的の周波数に合わせて鳴らすことで一応対策可能ですが、PanCakeや、FM音源や、MIDIなどでいい音につなぐのもいいですよ!

開発中のSTM32F0版IchigoJamでは、タイマーが豊富なので、PLAY文用にタイマーが使える見込みです!

きれいな440Hzが鳴っています!音域も低音O1から超音波に突入するO9まで拡げられそう。
LPC1114のハードウェア(CPU)によるタイマーはディスプレイ表示、2つはサーボ制御用PWMを優先させ、音痴で妥協していましたが、念願の音痴解消!?(ただし、理由1対策に、いいスピーカーは必要です)

音は波。
昔、MSXturboR標準ソフトで、音声を録音して、波形を見ていろいろいじって楽しかったことを思い出します。
音の正体とプログラム作曲 / はじめてのプログラミングその8

links
- IchigoJam電子工作パーツセット エイリアンスピーカー / ASP-JamP

だいたい動いたSTM32F0版IchigoJam、画面&キーボード可能バージョンβ

2018/01/03
#IchigoJam #stm32 #maker 

シリアルで動いたSTM32F0版IchigoJam、NTSC信号を作成し、SPIで受け取るPS/2キーボード入力部分を作って、IchigoJamっぽくなりました!

CPUを実装していないIchigoJam T基板につないで、起動からLEDチカチカ、かわくだりゲームの読み込み、保存までを動画にしてみました。 ベンチマークしてみたところ、LPC1114版とほぼ同速度でした。

LPC1114と違って、1KBずつファイルが書き込めるので、今まで同様4ファイル保存するとして、4KB増の28KBまでOSで使えます! アナログが豊富にあったり、タイマーがたくさん使えたりするので、いろいろできなかったこともできるかも。(参考、LPC1114での4ファイル保存


開発中、たいへん役だってくれたオシロスコープくん。電子工作のデバッグに便利です!

STM32F0版IchigoJam、シリアル通信バージョンβ

2018/01/02
#IchigoJam #stm32 #asm #maker 

お気に入りCPU、Arm Cortex-M0NXP社製LPC1114シリーズと同じクラス、STMicroelectronics社製STM32F0シリーズでIchigoJamが動きました!


シリアル通信でIchigoJamを便利に使える、IJUtilitiesを使うとスクリーンを使ったゲームも動かせます!


今回は、秋月電子で手に入るSTM32F042K6T6へ書き込んだら、そのままシリアル通信で使えます。 (Nucleoにbinファイル書き込みでも動くかもしれません)

I/Oは、まだLED(PB3とPA7)のみ使えます。他、配置と機能、検討中です。

同じArmなので、USRコマンドを使ったマシン語はそのままで動きます!
ハンドアセンブルで超速計算! - IchigoJamではじめるArmマシン語その2
I/Oを使うマシン語は、LPC1114とSTM32F0、I/Oのメモリマップが違う点に注意です。

ターゲットにしている、STM32F030K6T6TRは、LPC1114と同じ48MHz/Flash32KB/RAM4KBで、1コ175円、12,000コ買えば1つあたりなんと74円

STM32で始めるC言語」で紹介した上級者向けミニマム開発環境サンプルも拡充
(GPIO/Clock変更/UART/割り込み/TIM/SPI/Flash書き込み)

ちっちゃいコンピューターをプログラミングで味方に付け、身の回りをどんどん便利にしちゃいましょう!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像