[]小ネタ:電池を付けて持ち歩き

IchigoJam工作物をいろいろ持ち歩いて見せている私ですが、その際はIchigoJamの裏に電池ボックスを付けています。電源を気にせずにどこでも動作できるので便利です。
そうした工作方法が案外どこにも書いていないので、ちょっと書いてみました。

材料:電池ボックス(単4×3本)リード線付き
秋月電子 http://akizukidenshi.com/catalog/g/gP-03195/
f:id:shiro0922:20180619093121j:image:w360

電池ボックスの赤・黒のリード線を短く切って、IchigoJamのCN5ソケットの裏側にハンダ付けします。
f:id:shiro0922:20180619093040j:image:w360

CN5ソケット周辺の詳細。黒(−)のリード線を電源スイッチに一番近い側の端子、赤(+)のリード線を反対側の端子に付けます。
f:id:shiro0922:20180619093055j:image:w360

電池ボックスを、厚みのある両面テープで貼り付けます。
私はホームセンターで買った3Mの両面テープ(2mm厚)を使っています。

IchigoJamのIC裏に両面テープを貼り付け。
f:id:shiro0922:20180619093236j:image:w360

リード線を折り返して電池ボックスを貼り付け。
f:id:shiro0922:20180619093440j:image:w360

単4電池を装填して完成。
f:id:shiro0922:20180619093515j:image:w360

横から見るとこんな感じ。
f:id:shiro0922:20180619093551j:image:w360

これで、IchigoJam工作物をどこでも持ち歩いて見せられます(^_^)
f:id:shiro0922:20180619093910j:image:w360
電源スイッチより前の部分で給電しているので、ちゃんとスイッチで電源ON/OFFできます。

コメント
0件
トラックバック
0件
ブックマーク
0 users

[]8LED Sendor Shield

8個のLEDと光センサー(フォトトランジスタ)を搭載した亀の子基板「8LED Sensor Shield」が完成しました。

f:id:shiro0922:20180615235409j:image:w360

f:id:shiro0922:20180615220134j:image:w360

f:id:shiro0922:20180617194905p:image:w640

f:id:shiro0922:20180618021629p:image:w360
右上にブザー、右下に通信用のTX/RX/GND端子を搭載。
左側にはオプションのセンサー用端子(IN4)があります。

Lチカで遊ぶもよし、POVに挑戦するもよし、2台をケーブルでつないで通信するもよし。
いろいろ使えるボードです。いかがでしょうか。

基板データ

※6/18 v0.5 部品配置を若干修正しました。

*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。
f:id:shiro0922:20180316072743p:image
(C) 2018 Shiro Saito (http://d.hatena.ne.jp/shiro0922/)

このファイルをそのままFusion PCBで登録すれば、基板を発注できます。
基板寸法は47.3×41.8mmです。

部品表

f:id:shiro0922:20180618024056p:image:w480

プログラムいろいろ

セレクタ

スロット0に入れて自動起動します。1秒ごとにLED1〜3が光るので、ボタンを押すとスロット1〜3のプログラム選択起動できます。

10 '*Selecter
20 CLV
30 FOR P=1 TO 8:OUT P,0:NEXT
40 '@LOOP
50 OUT 1<<N
60 CLT
70 '@INBTN
80 IF BTN() LRUN N+1
90 IF TICK()<60 GOTO 70
100 N=N+1:IF N>2 N=0
110 GOTO 40
ルーレット

LED1〜8がランダムにピカピカと光ります。ボタンを押すとゆっくりになって止まります。再度ボタンを押すとリプレイします。

10 '*Roulette
20 CLV
30 OUT 0
40 '@START
50 IF !BTN() CONT
60 IF BTN() CONT
70 '@LOOP
80 OUT 0
90 BEEP 10,2
100 L=RND(8)+1
110 OUT L,1
120 WAIT 6
130 IF !BTN() GOTO 70
140 FOR I=1 TO 5
150 OUT 0
160 BEEP 10,2
170 L=RND(8)+1
180 OUT L,1
190 WAIT 20
200 NEXT
210 GOTO 40
●照度計

フォトトランジスタで受ける光量をメーター式に表示します。中学校技術科の単元「計測と制御」を意識したプログラムです。
D

10 '*Luminometer
20 A=ANA(2)
30 PRINT A
40 OUT 0
50 FOR L=1 TO 8
60 IF A>L*128-64 THEN OUT L,1
70 NEXT
80 GOTO 20
●バーサライタ(POV

起動するとLEDが細かく点滅します。IchigoJamを手に持って左右に振ると、眼の残像効果でハート型が見えます。配列変数にセットするデータを変えれば、様々な文字が表示できます。

10 '*POV Heart
20 CLV:OUT 8,0
30 [0]=`00001110
40 [1]=`00011111
50 [2]=`00111111
60 [3]=`01111110
70 [4]=`11111100
80 [5]=`01111110
90 [6]=`00111111
100 [7]=`00011111
110 [8]=`00001110
120 L=9
130 FOR I=0 TO L
140 OUT [I]
150 NEXT
160 GOTO 130
通信対戦スカッシュ

2台をケーブルでつなげば遊べます。新学習指導要領での中学校技術科「ネットワークを利用した双方向プログラミング」に対応。詳しくはこちら。
D

ペーパー

コメント
0件
トラックバック
1件
ブックマーク
0 users

[]通信対戦スカッシュ

IchigoJamに載せるシールド基板「8LED Sensor Shield」を現在試作中です。
通信用のTX/RX/GND端子を搭載した基板ができたので、2台のIchigoJam通信対戦するスカッシュゲームを作ってみました。
プレイ動画はこちら。
D

f:id:shiro0922:20180614235326j:image:w360
2台のIchigoJam通信ケーブルで接続。

f:id:shiro0922:20180614235355j:image:w360

f:id:shiro0922:20180614105129j:image:w360
通信ケーブルは0.65mm径の単芯線を使います。
黒・白・緑の3本をより合わせました。

f:id:shiro0922:20180614235232j:image:w360
黒のケーブルで2台のGND同士を接続。
TX/RXは白と緑のケーブルでクロス接続します。

f:id:shiro0922:20180615001429j:image:w360
携帯できるように、裏側に単4×3本の電池ボックスを装着。
CN5端子(5V/GND)の裏側に配線します。

プログラムリスト

※ボールの加速を大きくして、早く勝負が着くように変更しました。

10 '*Squash
20 IF BTN()=1 THEN CONT
30 '@RESTART
40 CLV
50 UART 1,1
60 CLK
70 OUT 8,0
80 W=30
90 '@START
100 IF BTN()=1 THEN GOTO 140
110 K=INKEY()
120 IF K>0 AND K<255 THEN GOTO 180
130 GOTO 90
140 '@GAMELOOP
150 GOSUB 290
160 CLK
170 K=0
180 '@GAMERE
190 IF K=0 THEN K=INKEY():CONT
200 W=K-32
210 K=0
220 GOSUB 370
230 IF M=0 THEN GOTO 140
240 OUT 8,1
250 BEEP 30,60
260 WAIT 60
270 IF BTN()=0 THEN CONT
280 GOTO 30
290 '@SERVE
300 FOR X=6 TO 1 STEP -1
310 OUT X,1
320 WAIT W
330 OUT X,0
340 NEXT
350 PRINT CHR$(W+32)
360 RETURN
370 '@RECEIVE
380 B=0
390 FOR X=1 TO 6
400 OUT X,1
410 WAIT W
420 OUT X,0
430 NEXT
440 IF BTN()=1 THEN GOTO 500
450 OUT 7,1
460 CLT
470 '@WAITLOOP
480 IF BTN()=1 THEN GOTO 540
490 IF TICK()<W THEN GOTO 470
500 '@MISS
510 OUT 7,0
520 M=1
530 RETURN
540 '@STRIKE
550 BEEP
560 OUT 7,0
570 W=W-2
580 RETURN

やっていることは単純で、ボールの速度(WAITの数)を1文字(1バイトの文字コード)で互いに送受信しているだけです。
そのままの値(0〜30)だとコントロールコード領域になってしまい、IchigoJamがおかしな動作をするので、送信側は32を加えた値を出力して、受信側は32を引いて受け取っています。

新しい学習指導要領で、「2020年から小学校でプログラミング必修」が大きな話題になっていますが、実は2021年から施行される中学校でも、技術科の単元「計測と制御」でのプログラミングが拡充され、「ネットワークを利用したプログラミング」をやらなければならないことになっています。
先日視察した「教育ITソリューションExpo」でも、ロボット2台をケーブルでつないでネットワークプログラミングをする教材が展示されていました。
それを見て「IchigoJamでも簡単にネットワークプログラミングできないか?」と考えて、これを作ってみました。
本当はMixJuiceやIchigoSodaとサーバープログラムを使って、インターネットを介した通信をすると今時っぽいのですが、それはまた別の機会に。

コメント
0件
トラックバック
1件
ブックマーク
0 users

[]バーコードJamカムロボ

以前からタミヤのカムロボを工作してきましたが、さらに改造して液晶で顔を付けてみました。
f:id:shiro0922:20180605125344j:image:w360

顔を付けるための専用基板を、Fusion PCBへ発注して作りました。
f:id:shiro0922:20180605155725p:image:w360

f:id:shiro0922:20180529214557j:image:w360

基板にaitendoのSPI液晶とピンヘッダをハンダ付け。
IchigoJam+Maplesyrupのソケットに差します。
f:id:shiro0922:20180605113657j:image:w360

さらにこのロボットに、以前作ったバーコードJam USB版システムを改造して搭載。
バーコードカードでカムロボの動きをプログラミングできるようにしました。
f:id:shiro0922:20180605125917j:image:w360

カードはこんな感じ。OUT命令を追加、WAIT命令の仕様を変更しています。
f:id:shiro0922:20180605125841j:image:w360

アンプラグド教材のカードと、実際にロボットを動かすプログラミングが融合。
これで小学校低学年の子どもでも楽しいプログラミングができそうです。

顔表示プログラム

20〜70行のカムロボ動作部分はサンプルです。動きによって顔の表情を変えると面白いかも。

10 GSB 80
20 '@LOOP
30 OUT 33
40 WAIT 120
50 OUT 17
60 WAIT 40
70 GOTO 20
80 '@FACE
90 CLS
100 ?
110 ?"    **    **"
120 ?"    **    **"
130 ?
140 ?"  *          *"
150 ?"   *        *"
160 ?"    ********"
170 RTN

バーコードJamカムロボ版

カムロボ用のOUT命令に対応。細かく制御したいのでWAIT命令の仕様を変更。

プログラム0(本体)
1 SWITCH1:CLS:?"*Barcode Jam*"
2 CLV:F=FILE():WAIT60:CLK
3 OUT0:Z=0:L=0
4 ?"OK"
5 ?CHR$(1);:R=1
6 B=INKEY():IF!BCONT
7 GSB29
8 ?CHR$(8);:IF!CGOTO15
9 IFTGSB14 ELSEGSB12
10 GOTO23
11 GOTO5
12 Z=Z+1:[Z]=C*16+O:IFC=8L=L+1:[70+L]=Z
13 ?">";Z*10;" ";:RTN
14 [Z]=[Z]|((C*16+O)<<8):T=0:RTN
15 BEEP30,30:IFO=1?"RUN":R=0:GOTO20
16 IFO=2?"LIST":R=2:GOTO20
17 IFO=3?"NEW":GOTO3
18 IFO=4CLS:GOTO4
19 GOTO5
20 A=0
21 A=A+1:IFA>ZGOTO4
22 C=[A]&#F0/16:O=[A]&15:?A*10;" ";
23 IFC=15&&O=15LRUNF+1,150
24 IFC&12=4O=C&3*16+O:C=4
25 LRUNF+1,C*10
26 IFT&&(R!=1):C=([A]&#F000)>>12:O=([A]&#F00)>>8:T=0:GOTO23
27 B=INKEY()&#FF:IFBGSB29:IFC=15&&O=15BEEP30,30:?"ESC":GOTO4
28 GOTO21
29 I=89
30 I=I+1:[I]=B-48
31 B=INKEY():IF!BCONT
32 IFB!=10GOTO30
33 D=0:FORJ=90TOI:D=D*10+[J]:NEXT
34 C=D/16:O=D%16:BEEP:WAIT30:CLK:RTN
プログラム1(命令解析部)
1 '*Barcode Jam-1
10 @LED
11 ?"LED ";O:IFR=1LRUNF,11
12 IFR=2LRUNF,26
13 LEDO:LRUNF,26
20 @WAIT
21 IFO<8O=O*60ELSEO=(O&7)*10
22 ?"WAIT ";O:IFR=1LRUNF,11
23 IFR=2LRUNF,26
24 WAITO:LRUNF,26
30 @BEEP
31 ?"BEEP":IFR=1LRUNF,11
32 IFR=2LRUNF,26
33 BEEP:LRUNF,26
40 @OUT
41 ?"OUT ";O:IFR=1LRUNF,11
42 IFR=2LRUNF,26
43 OUTO:LRUNF,26
80 @LABEL
81 ?"@";O:IFR=1LRUNF,11
82 LRUNF,26
90 @GOTOL
91 ?"GOTO @";O:IFR=1LRUNF,11
92 IFR=2LRUNF,26
93 A=[70+O]-1:LRUNF,26
100 @IFBTN
101 ?"IF BTN()=";O;" THEN ";:T=1:IFR=1LRUNF,11
102 IFR=2LRUNF,26
103 T=(BTN()=O):IF!T?
104 LRUNF,26
120 @FOR
121 ?"FOR I=1 TO ";O:IFR=1LRUNF,11
122 IFR=2LRUNF,26
123 I=1:J=O:S=A:LRUNF,26
130 @NEXT
131 ?"NEXT":IFR=1LRUNF,11
132 IFR=2LRUNF,26
133 I=I+1:IFI<=JA=S
134 LRUNF,26
150 @END
151 ?"END":IFR=1LRUNF,11
152 IFR=2LRUNF,26
153 A=Z:LRUNF,26

関連ファイル

カトラリーカード(バーコード付き)PDFファイル
命令表

f:id:shiro0922:20180605113944p:image:w360
以前の命令表から、OUT命令を追加、WAITの仕様を変更。

Camrobo Face基板データ

Fusion PCB用ガーバーデータ(ZIP)
*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。
f:id:shiro0922:20180316072743p:image
(C) 2018 Shiro Saito (http://d.hatena.ne.jp/shiro0922/)
このファイルをそのままFusion PCBで登録すれば、基板を発注できます。

コメント
0件
トラックバック
1件
ブックマーク
0 users

[]Ichigoプリントス

チェキのフィルムでスマホの画面を撮影できる「プリントス」(タカラトミー)。大人気で現在品薄のようです。
プリントスのレビュー記事を見て、「スマホの画面が撮れるんならIchigoJamの画面も撮れるんじゃ?」と思って、改造してみました。
f:id:shiro0922:20180524225928j:image:w360

プリントスの撮影フレームに、3.5インチ液晶ユニットを装着。
本体にIchigoIgai、単3×4本の電池ボックスを付けて完成。
f:id:shiro0922:20180524231439j:image:w360

撮影してみた写真がこちら。
f:id:shiro0922:20180524230111j:image:w360
チェキなのであまりいい画質ではありませんが、デジカメには無い味わいがあります。
短時間のプログラミング体験教室で、何もおみやげが無いけれど、せめて入力したプログラム画面だけでも持って帰ってもらいたい…なんて時に使えるかもしれません。

コメント
0件
トラックバック
0件
ブックマーク
0 users

[]バーコードJam USB版

FacebookのIchigoJam-FANグループにも参加している渡邊さんが、「USB-PS/2逆変換アダプタ」を作って、スイッチサイエンスで発売しました。
f:id:shiro0922:20180412175051j:image:w360
USBキーボードの信号をPS/2へ変換するアダプタで、これを介すると普通のUSBキーボードをIchigoJamにつないで使うことができます。

以前「バーコードJam」を作る際に、USBタイプのバーコードリーダーをIchigoJamにつなごうとして失敗していました。
このアダプタでつなげば行けるんじゃ?と思って、IchigoJamにUSBバーコードリーダーをつないで試してみました。
その結果、読み取り速度を調整すれば、バッチリ読めました!
f:id:shiro0922:20180412174518p:image:w360

使用したバーコードリーダーは、ビジコム社の「BC-BR900L」です。設定マニュアルをサイトからダウンロードして印刷し、リーダーでバーコードを読み取ると動作を設定できます。設定値は以下のとおり。

バーコードから読み込んだ文字+EnterキーがそのままIchigoJamへ入力されるので、とてもわかりやすいです。
これで電子工作無しで簡単に「バーコードJam」が作れます! 作ってみたのがこちら。
f:id:shiro0922:20180412172725j:image:w640
USBバーコードリーダーと変換アダプタがあればすぐ試せるので、子ども向けのカードプログラミングにいかがでしょうか。

USBバーコードリーダーに対応したプログラムは以下のとおり。読み込み部分が簡単になりました。

プログラム0:メインプログラム

1 SWITCH1:CLS:?"*Barcode Jam*"
2 CLV:F=FILE():WAIT60:CLK
3 OUT0:Z=0:L=0
4 ?"OK"
5 ?CHR$(1);:R=1
6 B=INKEY():IF!BCONT
7 GSB28
8 ?CHR$(8);:IF!CGOTO15
9 IFTGSB14 ELSEGSB12
10 GOTO23
11 GOTO5
12 Z=Z+1:[Z]=C*16+O:IFC=8L=L+1:[70+L]=Z
13 ?">";Z*10;" ";:RTN
14 [Z]=[Z]|((C*16+O)<<8):T=0:RTN
15 BEEP30,30:IFO=1?"RUN":R=0:GOTO20
16 IFO=2?"LIST":R=2:GOTO20
17 IFO=3?"NEW":GOTO3
18 IFO=4CLS:GOTO4
19 GOTO5
20 A=0
21 A=A+1:IFA>ZGOTO4
22 C=[A]&#F0/16:O=[A]&15:?A*10;" ";
23 IFC=15&&O=15LRUNF+1,150
24 LRUNF+1,C*10
25 IFT&&(R!=1):C=([A]&#F000)>>12:O=([A]&#F00)>>8:T=0:GOTO23
26 B=INKEY()&#FF:IFBGSB28:IFC=15&&O=15BEEP30,30:?"ESC":GOTO4
27 GOTO21
28 I=89
29 I=I+1:[I]=B-48
30 B=INKEY():IF!BCONT
31 IFB!=10GOTO29
32 D=0:FORJ=90TOI:D=D*10+[J]:NEXT
33 C=D/16:O=D%16:BEEP:WAIT30:CLK:RTN

※1行目の「SWITCH1」を削除すれば、普通の液晶モニタで動きます。

プログラム1:コマンドサブルーチン

1 '*Barcode Jam-1
10 @LED
11 ?"LED ";O:IFR=1LRUNF,11
12 IFR=2LRUNF,25
13 LEDO:LRUNF,25
20 @WAIT
21 ?"WAIT ";O*60:IFR=1LRUNF,11
22 IFR=2LRUNF,25
23 WAITO*60:LRUNF,25
30 @BEEP
31 ?"BEEP":IFR=1LRUNF,11
32 IFR=2LRUNF,25
33 BEEP:LRUNF,25
80 @LABEL
81 ?"@";O:IFR=1LRUNF,11
82 LRUNF,25
90 @GOTOL
91 ?"GOTO @";O:IFR=1LRUNF,11
92 IFR=2LRUNF,25
93 A=[70+O]-1:LRUNF,25
100 @IFBTN
101 ?"IF BTN()=";O;" THEN ";:T=1:IFR=1LRUNF,11
102 IFR=2LRUNF,25
103 T=(BTN()=O):IF!T?
104 LRUNF,25
120 @FOR
121 ?"FOR I=1 TO ";O:IFR=1LRUNF,11
122 IFR=2LRUNF,25
123 I=1:J=O:S=A:LRUNF,25
130 @NEXT
131 ?"NEXT":IFR=1LRUNF,11
132 IFR=2LRUNF,25
133 I=I+1:IFI<=JA=S
134 LRUNF,25
150 @END
151 ?"END":IFR=1LRUNF,11
152 IFR=2LRUNF,25
153 A=Z:LRUNF,25

プログラム0とプログラム1は、連続したスロットに置いてください。
(スロット0と1でなくても構いません。が、スロット0と1に置いて自動起動すると便利です)

関連ファイル

カトラリーカード(バーコード付き)PDFファイル

命令表
f:id:shiro0922:20180128143751p:image:w640

コメント
0件
トラックバック
1件
ブックマーク
0 users

[]Questダッシュ

RPG風インターフェースでプログラミングできる「IchigonQuest」の正式ファームウェアが、公式サイトで公開されました
さっそくそれを使って、「IchigoJamスポーツ」ペーパーの「100mダッシュ」をIchigonQuestへ移植してみました。
キミは世界記録を破れるか?

f:id:shiro0922:20180403141213p:image:w480

プログラムリスト

IJUtilitiesで転送したリストです。キャラクター文字は化けていますが、IJUtilitiesで転送すれば使えます。
表示キャラクターに「.」(小数点)が欲しかった…。

1 CLS
2 ?"?
3 A=0
4 CLT
5 [0]=BTN(RIGHT)
6 IF[0]=1GOTO5
7 [0]=BTN(RIGHT)
8 IF[0]=0GOTO7
9 B=A
10 B=B%32
11 C=A
12 C=C/32
13 LCB,3
14 ?"瓣
15 A=A+1
16 B=A
17 B=B%32
18 C=A
19 C=C/32
20 LCB,3
21 ?"?
22 [0]=A
23 IF[0]<100GOTO5
24 [0]=TICK()
25 A=[0]
26 [0]=[0]/60
27 ?[0]
28 A=A%60
29 A=A/10
30 ?A
31 [0]=BTN(ENTER)
32 IF[0]=0GOTO31
33 GOTO1
コメント
0件
トラックバック
0件
ブックマーク
0 users

[]パスワードバトル

パスワードネタの第3弾、バトルゲームを作ってみました。
キミは最強のパスワードを作れるか?

f:id:shiro0922:20180329220956p:image:w640

プログラムリスト

※3/30 攻撃時の効果音を追加しました。

1 CLV:CLS:?"Password(<10c)?"
2 K=INKEY():IF!KCONT
3 IFK<>10?CHR$(K);:GOTO2
4 FORJ=0TO9:[J]=PEEK(#920+J):NEXT
5 GSB14:A=B:D=E:S=T:G=I:SRND(TICK())
6 CLS:W=W+1:?"[BATTLE";W;"]":H=G
7 M=M+(M<10):O=20:GSB21:GSB14
8 GSB22:O=0:GSB22
9 X=A*2+S/2-E-T/2:O=20:GSB29:WAIT20:IFI<=0GOTO12
10 X=B*2+T/2-D-S/2:O=0:GSB29:WAIT20:IFH<=0GOTO13
11 GOTO9
12 LC0,10:?"You WIN!":BEEP10,30:WAIT60:GOTO6
13 LC0,10:?"You Lose":BEEP30,30:END
14 I=10:B=10:E=10:T=10
15 FORJ=0TO9:Z=[O+J]:IF!ZGOTO20
16 IFZ>96&&Z<123B=(B*2)^Z:GOTO20
17 IFZ>64&&Z<91E=(E*2)^Z:GOTO20
18 IFZ>47&&Z<58I=(I*2)^Z:GOTO20
19 T=T^Z
20 NEXT:RTN
21 FORJ=0TOM-1:[O+J]=RND(94)+33:NEXT:RTN
22 LCO,2:IFO?"@Monster"ELSE?"*You"
23 LCO,3:FORJ=0TO9:?CHR$([O+J]);:NEXT
24 LCO,5:?"HP=";:IFO?IELSE?H
25 LCO,6:?"AT=";:IFO?BELSE?A
26 LCO,7:?"DF=";:IFO?EELSE?D
27 LCO,8:?"SP=";:IFO?TELSE?S
28 RTN
29 X=X*(X>0)+RND(11)
30 FORJ=1TO3:LCO,5:?"HP=";:IFO?IELSE?H
31 BEEP30,1:WAIT5:LCO,5:?"        ":WAIT5:NEXT
32 IFOI=I-XELSEH=H-X
33 LCO,5:?"HP=";:IFO?IELSE?H
34 RTN

Web版

IchigoJam web版はこちら。

ヒント

相手に与えるダメージ量は、自分の攻撃力・相手の守備力・お互いのすばやさで決まります。(乱数が若干足されます)
各パラメータは、以下の文字種から算出されます。

基本的にはその種類の文字数が多いほど数値が上がりますが、文字によっても変わります。また、すばやさ(記号)のみ文字数によらない計算をしています。
全体で最大10文字なので、その中でバランスを探ってください。

コメント
0件
トラックバック
0件
ブックマーク
0 users

[]パスワード自動作成

先日、【パスワードアタック】で「簡単なパスワードはダメだぞ!」と警告したのですが、難しいパスワードをなかなか考えられない人のために、パスワードを自動生成するプログラムを作りました。
f:id:shiro0922:20180327161221p:image:w480

個人での利用の他、業務で何個もパスワードを考えないといけない時にも使えるでしょう。

プログラムリスト

10 '*Password Make
20 CLV:P=8
30 GSB 300:GSB 340:GSB 380:GSB 420
40 '@LOOP
50 GSB 140:BEEP:CLK
60 K=INKEY():IF !K CONT
70 IF K=49 GSB 300
80 IF K=50 GSB 340
90 IF K=51 GSB 380
100 IF K=52 GSB 420
110 IF K=43 P=P+(P<32)
120 IF K=45 P=P-(P>1)
130 GOTO 40
140 '@PRT
150 CLS
160 ?"*SET(1=ON,0=OFF)":?
170 ?"1)Lower case letter=";L
180 ?"2)Upper case letter=";U
190 ?"3)Number=";N
200 ?"4)Symbol=";S
210 ?"+-)Length=";P
220 ?"Else)Remake"
230 ?:?"*Password"
240 IF L|U|N|S=0 RTN
250 FOR I=1 TO P
260 C=RND(94):IF ![C] CONT
270 ?CHR$(C+33);
280 NEXT
290 RTN
300 '@LOWER
310 L=!L
320 FOR I=64 TO 89:[I]=![I]:NEXT
330 RTN
340 '@UPPER
350 U=!U
360 FOR I=32 TO 57:[I]=![I]:NEXT
370 RTN
380 '@NUM
390 N=!N
400 FOR I=15 TO 24:[I]=![I]:NEXT
410 RTN
420 '@SYM
430 S=!S
440 FOR I=0 TO 14:[I]=![I]:NEXT
450 FOR I=25 TO 31:[I]=![I]:NEXT
460 FOR I=58 TO 63:[I]=![I]:NEXT
470 FOR I=90 TO 93:[I]=![I]:NEXT
480 RTN

web版

web版はこちら。

コメント
0件
トラックバック
0件
ブックマーク
0 users

[]パスワードアタック

いわゆる「総当たり攻撃」(ブルートフォースアタック)で、パスワードをクラッキングするシミュレーションプログラムです。
f:id:shiro0922:20180325190456p:image:w360

よく情報モラルの授業で「パスワードはできるだけ長く複雑なものにしましょう」と説明されます。
実際にアタックする様子を見て、子ども達に危機感を感じて欲しいと思って、このプログラムを作りました。
ちなみにパスワードが「AB」の2文字だと、IchigoJam webで5分、ThinkPad上のIchigoJam appでは数秒で破られます。
あとはIchigoJam appで試すと、「ABC」の3文字は2分、「ABCD」の4文字は230分(4時間弱)で破られました。
f:id:shiro0922:20180325181328p:image:w360

f:id:shiro0922:20180325190201p:image:w360
画面の文字表示をやめるなど、プログラムを改良すればもっと速くなるはず。
みんな、簡単なパスワードはダメだぞ!

プログラムリスト

10 '*Password Attack
20 CLV:CLS
30 ?"Password(<10chr.)="
40 '@INLOOP
50 K=INKEY():IF !K CONT
60 IF K<>10 ?CHR$(K);:GOTO 40
70 L=1
80 '@READLOOP
90 [90+L]=PEEK(#91F+L)
100 IF [90+L] L=L+1:GOTO 80
110 LC 0,5:?"Attacking..."
120 L=0:CLT
130 '@ATTACKLOOP
140 L=L+1:M=0
150 GSB 190
160 IF E GOTO 130
170 ?:?"FIND!! Time=";T;"min."
180 BEEP10,30:END
190 '@ATTACKSUB
200 M=M+1
210 FOR [M]=33 TO 127
220 [50+M]=[M]
230 IF M<L GSB 190:M=M-1
240 E=0:LC 0,6
250 FOR D=1 TO L
260 ?CHR$([50+D]);
270 IF [90+D]<>[50+D] E=1
280 NEXT
290 IF [91+L] E=1
300 IF TICK()>3600 T=T+1:CLT
310 IF !E [M]=127:NEXT:RTN
320 NEXT
330 RTN

プログラムリスト(数字限定)

10 '*Password Attack
20 CLV:CLS
30 ?"Password(<10chr.)="
40 '@INLOOP
50 K=INKEY():IF !K CONT
60 IF K<>10 ?CHR$(K);:GOTO 40
70 L=1
80 '@READLOOP
90 [90+L]=PEEK(#91F+L)
100 IF [90+L] L=L+1:GOTO 80
110 LC 0,5:?"Attacking..."
120 L=0:CLT
130 '@ATTACKLOOP
140 L=L+1:M=0
150 GSB 190
160 IF E GOTO 130
170 ?:?"FIND!! Time=";T;"min."
180 BEEP10,30:END
190 '@ATTACKSUB
200 M=M+1
210 FOR [M]=48 TO 57
220 [50+M]=[M]
230 IF M<L GSB 190:M=M-1
240 E=0:LC 0,6
250 FOR D=1 TO L
260 ?CHR$([50+D]);
270 IF [90+D]<>[50+D] E=1
280 NEXT
290 IF [91+L] E=1
300 IF TICK()>3600 T=T+1:CLT
310 IF !E [M]=57:NEXT:RTN
320 NEXT
330 RTN

アタック範囲を数字(0〜9)に限定すると、4桁の「9999」は数秒で、5桁の「99999」でも1分以内に破られてしまいます。短時間で済むので、子ども向け教材には数字限定でもいいかもしれません。
なお、6桁の「999999」を試すと、スタックが足りなくなってエラーになってしまいます。1桁ごとに再帰でサブルーチンを呼んでいるので仕方ないのですが。

コメント
0件
トラックバック
1件
ブックマーク
0 users
shiro0922
shiro0922