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

しゃべるIchigoJamで、聞くプログラミング - 音声合成版ブラインドプログラミング

2018/04/03
#KidsIT #IchigoJam 

先日作った盲ろう者向けプログラミング環境
盲ろう者には、難聴や弱視の方も含まれます。(盲ろう者とは - 全国盲ろう者協会

全く見えずに全く聞こえない、全盲ろう者は盲ろう者の8.2%。 盲ろう者の内69%は、補聴器などを併用した音声によってコミュニケーションを受けているとのこと。 (厚生労働省 平成24年度盲ろう者に関する実態調査報告書

しゃべるPM2.5計でも使った「AquesTalk pico
IchigoJam用ボードをゲットしたので、これを使ったコンパクトなしゃべるIchigoJamが実現!

このボードでは、I2Cモードで使います。次のコマンドでまずは実験。

?I2CW(#2E,"ichigo'jamu",11):?I2CW(#2E,13)

* ver1.2以前の場合 POKE#700,13:?I2CW(#2E,#700,1) と記述

こちらが打ち込んだアルファベット小文字を中心に書く、発音記号を打ち込めばしゃべってくれるプログラム

10 CLS 20 INPUT N 30 ?I2CW(#2E,#901,LEN(#901)):?I2CW(#2E,13) 40 GOTO 10

発音記号を使って、抑揚をコントロールする方法、慣れると楽しいですよ!

アルファベットや、数字をしゃべってくれるコマンドを使って、キーやシリアルから入力した文字を読み上げるプログラムを作ります。

10 FOR I=0 TO 1 STEP 0 20 K=INKEY():IF !K CONT 30 ?CHR$(K); 40 IF K>=ASC("a") AND K<=ASC("z") S="<ALPHA VAL=a>":POKE S+11,K:GSB@TALK 50 IF K>=ASC("A") AND K<=ASC("Z") S="<ALPHA VAL=a>":POKE S+11,K:GSB@TALK 60 IF K>=ASC("0") AND K<=ASC("9") S="<NUM VAL=0>":POKE S+9,K:GSB@TALK 70 NEXT 100 @TALK 110 R=I2CR(#2E,#700,1):IF R STOP ELSE IF PEEK(#700)!=ASC(">") CONT 120 R=I2CW(#2E,S,LEN(S)):R=I2CW(#2E,13) 130 RTN

INKEYで受け取った文字がアルファベットか数字の場合、Sに読み上げ文字列をセットして、読み上げルーチン@TALKを呼び出します。 前回と同様、別のIchigoJamとつなげば音声版ブラインドプログラミングが実現できます!

S="paso'kon":GSB@TALK

@TALK部分は、このように気軽に使うことができます。110行で発話中でBUSYな場合、待つ処理をいれているので、発話中かどうかは気にしなくても大丈夫。

アルファベットの発音方法を変更したい場合、こちらA〜Zを発音記号にしたものをベースに改良ください。

5 LET[0],"e'i","bi'i","si'i","dhi'i","i'i","e'fu","ji'i","e'iti","a'i","je'i","ke'i","e'ru","e'mu","e'nu","o'u","pi'i","kyu'u","a-'ru","e'su","thi'i","yu'u","vu'i","da'buryuu","e'kkusu","wa'i","zi'i" 30 IF K>=ASC("a") AND K<=ASC("z") S=[K-ASC("a")]:GSB@TALK 40 IF K>=ASC("A") AND K<=ASC("Z") S=[K-ASC("A")]:GSB@TALK


IchgoJam用音声合成ボード - IchigoJam-FAN」とパーツを集めて・・・
* 写真のATP3012では動きません!! ATP3011を用意しましょう


できあがり!発売、楽しみですね!
* 写真のATP3012では動きません!! ATP3011を用意しましょう

中学生による、すごい作品がありました。
第75回全日本学生児童発明くふう展 経済産業大臣賞 - 夏の大三角形を探せ!!~松戸プラネタリウム~
松戸市立第六中学校(千葉県)2年、小栁和季さんの作品
フルカラーLED、光ファイバー400本、ステッピングモーターなどを使った「光ってしゃべって動く星座盤」
これは実物をぜひ見てみたい!!

links
- IchgoJam用音声合成ボードを5枚配布します。 - IchigoJam-FAN
- 音声合成LSI - AquesTalk pico LSI
- 音声合成LSI ATP3011F4-PU(かわいい女性の音声): 半導体 秋月電子通商 電子部品 ネット通販
- 音声合成LSI ATP3011F1-PU(ゆっくりな女性の音声): 半導体 秋月電子通商 電子部品 ネット通販
- 音声合成LSI ATP3011M6-PU(男性の音声): 半導体 秋月電子通商 電子部品 ネット通販

2時間で成る!? 米子高専卒、増田式ブラインドタッチ習得法風、IchigoJamタイピング練習プログラム

2018/04/02
#KidsIT #IchigoJam 

スマホの普及でキーボードを余り使わなかった大学生も社会人になったらタイピングは必須。
いつから習得しても遅くない、ブラインドタッチ。習得用のプログラムの新作です!

練習したのは随分前なので、どう覚えたかを覚えていないのが難点ですが、前回のプログラムに関して、IchigoJam-FANにてヒントいただきました!


教えてもらった書籍「2時間で成る! キーボードの達人、増田忠士著」によると、打ちやすい文字から2文字単位で染み込ませることがコツな様子。(増田さん米子高専の出身でした!)

打ちやすい文字で成功体験を積み重ねていく感じがいいですね。プログラムを組んでいきます。

10 S="SABAE" 20 CLS:LC0,9 30 ?STR$(S);

自分の名前でも、住んでる場所、好きな食べ物、何でもいいので短めなアルファベット、10行にセット。まずは単に表示するだけです。

100 C=0 110 LC C,9 120 IF SCR()=0 END 130 K=INKEY():IF K=0 CONT 140 IF K!=SCR() BEEP:GOTO130 150 ?" ":C=C+1:GOTO110

表示されている通りタイピングできたら一文字ずつ消えていき、間違えたら「ピッ」と音がでるようにします。

100 CLT:C=0 120 IF SCR()=0 GOTO 160 160 S=TICK()/30 170 ?:?120*C/S;"CHAR/MIN"

タイムをCLT/TICK()で測り、1分あたりの打てた文字数を計算して表示します。

180 IF INKEY()=0 CONT ELSE RUN

何度もRUNするのが面倒なので、何かキーを押したら自動的にRUNするプログラムを追加。
1単語だけでも超高速タイピングできるとかっこいいですね。

慣れてきたら、ちょっと長い文字にも挑戦してみましょう。

10 S="ICHIGOJAM LC IF SCR END INKEY CONT BEEP GOTO"

おや、1行目までしか進みませんね?110行のLCが9行固定になってしまっているからです

110 LC C%32,C/32+9

これで大丈夫!


キーボードを一切見ずに打つのがブラインドタッチ(=タッチタイプともいう)。
まずは、打ちやすい右手のホームポジションから練習しましょう。

キーボードの「J」の位置に突起があります。そこに右手の人差指をおいて、「KL;」に順に中指、薬指、小指を置きます。 他のキーを打つために動いてもその場所、ホーム(=家)に帰ります。だからホームポジション。

10 S="JJ JK JL J; KJ KK KL K; LJ LK LL L; ;J ;K ;L ;;" 40 CLS:LC12,7:?STR$(S)

2文字セットで、まずはホームポジションのキーから覚えましょう。
画面に表示された JKL; の並びで確認して、キーボードを見ないのが上達への近道!

覚えたら、徐々に2文字の組み合わせを広げていきます。(RUN on IchigoJam web
一つも間違わずに100CHAR/MINを超えたら、次いってみよー

2文字の組み合わせを自動的に生成するプログラムも活用ください!

10 S="HJKL;" 20 CLS:LC12,7:?STR$(S) 30 LC0,9:N=LEN(S) 40 FOR I=0 TO N*N-1 50 ?STR$(S+I/N,1); 60 ?STR$(S+I%N,1); 70 IF I<N*N-1 ?" "; 80 NEXT

PCNチャンネルに新登場!
[イマギッシュとプログラミングをやってみよう] 01 IchigoJamでなわとびさっちゃん - YouTube

盲ろう者のこどもたちにもプログラミングを! 体で感じる体表点字、IchigoBrailleでブラインドプログラミング、IchigoJam 4th Birthday!

2018/04/01
#KidsIT #braille #IchigoJam #Apr1 #sabae 

4/1、エイプリルフールはIchigoJamの誕生日
「すべてのこどもたちにプログラミングを」
プログラミングクラブネットワーク、PCN活動は遠くアフリカ、シリコンバレーにも!

沖縄での体験をきっかけに、地理的ではなく、プログラミングに遠い子供、盲ろう者の子供達にもプログラミングをと思って作った「IchigoBraille」を発表します。(盲ろう者=視覚障害と聴覚障害を持つひと、盲聾)

6bitの点字を、常駐下段3段を時分割、振動モーター2つを使って表現する体表点字。
「O、K」の振動パターンはすぐ覚えちゃいます。
ブラインドタッチで、?"Ichigo" と書いてエンター、Ichigoを振動で感じられます。

真っ暗闇でも、静かに遊べちゃうのが、IchigoBraille!
目の見える人も、たまには、大切な目を休めて、ブラインドプログラミングはいかがでしょう?


振動モーター2つをうなじに左右対称に貼り付ければ、気分は攻殻機動隊!

IchigoBrailleのつくりかた
シリアル信号を受けて、体表点字化するプログラムを書き込んだIchigoJamをシリアルで接続します。
OUT1とOUT2から、トランジスタを通して信号を増幅、振動モーターを駆動すると同時に、LEDも点灯。


2017年のエイプリルフール生まれのIchigoJam 0 on IchigoDakeを使ってコンパクトに実現!
もちろん、IchigoJamでも動きます

1 POKE#700,0,14,11,49,26,7,59,2,15,15,11,14,8,3,13,18,28,32,40,48,52,36,56,60,44,24,12,10,41,15,22,11,32,32,40,48,52,36,56,60,44,24,28,34,42,50,54,38,58,62,46,26,30,35,43,29,51,55,39 2 W=6 10 C=INKEY():IFC<32||C>122CONT 11 IF C>=97 C=C-32 15 B=PEEK(#700+C-32) 20 ?CHR$(C),C-32,B 30 FORI=4TO0STEP-2:O=B>>I 40 OUT1,O&2:OUT2,O&1:?BIN$(O,2):WAITW:OUT0:WAITW 50 NEXT 60 WAIT W*3 70 GOTO10

*アルファベット大文字小文字は区別なし。記号は複数文献を参考に仮に作成。カタカナ未対応。

攻殻機動隊の孫達による電脳メガネづくり
IchigoJamが活躍、鯖江のHana道場ではハードオフコラボのジャンクで電脳メガネづくり。
熱いメガネが誕生!来週の鯖江のお祭、誠市で子供たちによる現品限りの販売会があります!



IchigoJamが生まれたから、4/1はいちご記念日。

投稿された、いろんなIchigoJam!
- IchigoJam ESP32版!? IchigoJamPy!?
- Ichigo Boy Advance SP 誕生!?
- IchigoJamの並列接続!?
- IchigoJam mini!?
- IchigoMotto - 1600万プログラム保存可能!?
-
4th Anniversary プログラム
- POVでIchigoJam
- Quest物語 開幕 - IchigonQuest関係作!?

古のいちごミルクも食べました。fb/tw

links
- 2014年 目指すはMSX! Raspberry Pi より安価な IchigoJam 発表!
- 2015年 創る人を創ろう! Pepper より安価な こどもロボットPaprika 発表!(Kids Robot paprika)
- 2016年 MSXになりたい「こどもパソコンIchigoJam」あの起動ロゴを搭載!(boot logo)
- 2017年 IchigoJam Zero the World's Lightest PC 0g 150yen for IchigoJam Things!
- 2018年 盲聾のこどもたちにもプログラミングを! 体で感じる体表点字、IchigoBrailleでブラインドプログラミング、IchigoJam 4th Birthday!

サイズぴったり、秋月ボタン電池ケースで光るペンダント型ウェアラブルIchigoJam

2018/03/30
#IchigoJam #KidsIT 

自分で作ったBASICのプログラム、SAVEして、キーボード・テレビを外して、ボタンを押しながら起動すれば、ウェアラブルコンピューターのできあがり!

首から下げるペンダント型がおすすめですが、ネックは電池。単3電池2本はちょっと重くて、ケーブルがちょっと邪魔。

秋月電子からぴったりのソリューションが発売開始!
電池ケース CR2032×2個用 スイッチ付 PHコネクタ付」(税込70円)


IchigoJamの厚さそのまま!


もっともメジャーなボタン電池、CR2032が2つ入る電池ケース、スイッチ付きで70円
今回は奥の方の端子ふたつを線ではんだづけしてショート、手前にひとつ入れる形で3Vケースとしました。


背面のVCC/GNDのピンにL字ピンヘッダーをはんだづけ。PHコネクタは2.54mmで入らないことないです。
細ピンヘッダ (オスL型) 1×8」(10円) or 「細ピンヘッダ (オスL型) 1×40


ボタンケースの幅、IchigoJamのCN4とCN3の間にぴったり(ちょっと狭い分押し込むと安定)


千葉県柏市、柏の葉のタミヤロボットスクールTweetでも見かけた、AOTECHの小型キーボードAOK-78は、3Vでもギリギリ動作!
ボタン電池で、キーボードも駆動、プログラムできました。


シールを貼ってみてもいいかも。

裏面はんだづけの他、表のVCC/GNDにピンヘッダを上向きに付けて挿す形や、ジャンパー線を経由して、CN3/CN4/CN5のVCC/GNDに接続して使うこともできます。使いたい用途に合わせていろいろどうぞ!

電池ケースを無改造で2つボタン電池をいれ、microUSBの5V端子にピンヘッダをはんだづけして使うのもありかも。

links
- IchigoJam プリント基板キット U: 組立キット 秋月電子通商 電子部品 ネット通販
- 電池ケース CR2032×2個用 スイッチ付 PHコネクタ付: パーツ一般 秋月電子通商 電子部品 ネット通販
- 細ピンヘッダ (オスL型) 1×8: パーツ一般 秋月電子通商 電子部品 ネット通販
- こどもパソコンIchigoJam

タイピングで一歩差をつける春休み! IchigoJamはんだづけ in Hana道場

2018/03/26
#sabae #IchigoJam #KidsIT 

まちに残った雪もあとわずか。すっかり暖かくなった鯖江の春休み。
新年度からの鯖江市内全小中学校プログラミングクラブがスタート。
さきがけて開催「Hana道場IchigoJamはんだ&プログラミング体験会
小学生2、3年生、初めてのはんだづけ、がんばってました!

なかなか美しい仕上がり!シールの使い方がかわいい


はんだづけが終わったら早速プログラミング!
LED光らせたり、ゲームを作ったり、いろいろ夢広がりますねっ

速くなっておくと何かと便利でかっこいい、キーボードを使ったタイピング!
タイピングが楽しくなる短いプログラムを作ってみました。

ナンバーはやうちゲーム
まずは数字キーとエンターキーだけを使って、早打ちにチャレンジ!30台が出たらスゴイ!

10 WAIT30:A=RND(10):CLT 20 ?A:INPUT B:IF A=B ?TICK()

RUNして0.5秒したら、数字がでるので、その数を押してエンター、タイムが表示されます

アルファベットはやうちゲーム
INKEYコマンドを使って、エンターいらず、アルファベットが1つ出るので、すばやく打とう。友達と対戦だ!

10 WAIT30:CLT 20 A=65+RND(26):?CHR$(A) 30 IF INKEY()!=A CONT 40 ?TICK()

タイムアタックA-Z
AからZまでどのくらいの速度で打てるかを、1分あたりのタイプ数という速度で表示!

10 CLS:LC 0,9:FOR I=0 TO 25 20 ?CHR$(65+I); 30 NEXT:CLT:C=0 40 LC C,9:IF INKEY()!=SCR() CONT 50 ?" ":C=C+1:IF C<26 GOTO 40 60 ?600*C/(TICK()/6);"CHAR/MIN"

150CHAR/MIN を目標に、300CHAR/MIN以上いくとスゴイ!

タイムアタックAIUEO
キーボードを見ないで打つ、タッチタイプに挑戦しよう。まずはローマ字あいうえおを打つAIUEOから覚えてみよう。
タイムアタックA-Zの20行だけを書き換えよう

20 ?STR$("AIUEO"+RND(5),1);

150CHAR/MIN を目標に、300CHAR/MIN以上いくとスゴイ!

タイムアタックホームポジション
タッチタイプの次の一歩は、ホームポジション。キーボードのFとJだけちょっと突起があるの知ってました!?
左手人差し指をFに、右手人差し指をJにおくポジションをホームポジションと呼びます。まずは左手のASDF、右手のJKLを覚えてみよう。 20行だけを改造!

20 ?STR$("ASDFJKL"+RND(7),1);

150CHAR/MIN を目標に、300CHAR/MIN以上いくとスゴイ!

タイムアタックアルファベット
タイムアタックA-Zの10行を改造して、AからZまでランダムに表示された文字を打つハードモード。20行だけを改造。

20 ?CHR$(65+RND(26));

いよいよアルファベット全部がランダムに登場するハードモード!
目標は100CHAR/MIN、200CHAR/MINを超えたらスゴイ!

「タイムアタックアルファベット」全文がこちら(RUN on IchigoJam web

10 CLS:LC 0,9:FOR I=0 TO 25 20 ?CHR$(65+RND(26)); 30 NEXT:CLT:C=0 40 LC C,9:IF INKEY()!=SCR() CONT 50 ?" ":C=C+1:IF C<26 GOTO 40 60 ?600*C/(TICK()/6);"CHAR/MIN"

参考
日本国が例示している目標:小学校で1分あたり20文字(アルファベット換算40文字/分程度?)、中学校で30文字(同60文字/分?)
日本語ワープロ検定試験 1級:日本語漢字混じり70文字/分(アルファベット換算140文字/分程度?)

自分好みにいろいろ改造、楽しくタイピングを覚えちゃいましょう。
自分なりの練習方法を編み出すのが上達への近道!


links
- Hana道場 - イベントとワークショップ
- 郡山産プログラムを改造「はやうちタッチタイプ」 / I-O DATA総合カタログに掲載、こどもプログラミング!

たった1022byteでインベーダー風「IchigoVaders」アルゴリズムで削れ!プログラム圧縮テクニックその3

2018/03/24
#IchigoJam #KidsIT 

その筋屋さん、パックマン風に続く、インベーダー風「いちごベーダー」を発表!
改造&投稿してとご連絡いただいたので、解析&プログラム容量削減し、PCG定義を含めて1KB化、成功。
IchigoVaders in 1022byte only on IchigoJam BASIC!


「IchigoVaders」IchigoJam起動から実行、改造してチートクリア、試しに侵略されてみる動画


PCGの8x8でつくられたアニメーションするインベーダーさん達がかわいい!

ダイエットしたプログラムはこちら、1022byte、2byte空きで収まりました。

1 POKE#700,24,60,126,219,~0,24,36,219,24,60,126,219,~0,60,195,102,0,165,189,~0,219,~0,36,231,0,195,60,126,219,~0,165,189,0,60,126,153,~0,102,219,0,0,60,126,153,~0,195,102,0,0,16,56,~1,~1,~1,~1,0 2 CLV:Z=49:C=Z:H=1:M=2:G=31:B=28:FORL=0TOC:[L]=L%10*2+5+(L/10+4)<<5+(L/10+1)&~1<<10:NEXT:CLS:FORL=0TO3:LCL*7+4,17:?CHR$(159,1,158,B,B,B,G,1,131,1):NEXT 3 IFC<0C=Z:O=!O:V=D:IFDH=-H:D=0 4 X=[C]&G:Y=[C]>>5&G:LCX,Y:?CHR$(0);:X=X+H*!V:Y=Y+V:LCX,Y:?CHR$(224+[C]>>10+O);:[C]=X+Y<<5+[C]&7168:IFS>50IF!UT=[RND(Z+1)]:U=T&G:W=T>>5&G+1ELSELCU,W:IFSCR()=242?CHR$(0); 5 IFUW=W+1:LCU,W:T=!SCR():U=U*T*(W<21):?CHR$(242*!!U);:Y=W*!T 6 D=D|!(X%30)*!V:IFY=20LCM,Y:?"*":?"GAME OVER!!":ENDELSEIF!JI=M:J=BTN(32)*20ELSELCI,J:?CHR$(0);:J=J-1:IFJ=1J=0ELSELCI,J:IFSCR()GSB8ELSE?"|"; 7 N=BTN(29)*(M<30)-BTN(B)*(M>1):LCM,20:?CHR$(0);:M=M+N:LCM,20:?CHR$(230);:C=C-1:GOTO3 8 ?"*";:T=0:FORA=0TOZ:IF[A]&G=IIF[A]>>5&G=JS=S+30-[A]>>10*5:FORL=ATOZ:[L]=[L+1]:NEXT:T=A+1:A=Z 9 NEXT:J=0:?CHR$(B,0):LC0,0:?"SCORE ";S:IFZ|!TZ=Z-!!T:C=C-(C>T-1)*!!T:RTN

IchigoVaders 解説
プログラム

変数
キャラクター

プログラム容量削減テクニック
- 16bitの配列に、下位からX座標5bit、Y座標5bit、敵キャラ種別3bitで収める
- メモリに書き込む値、246-255は、ビット反転演算子を使った ~9-~0 を使って1byte削減
- IF文で終わらない行は、次の行と連結可能
- IF文を論理式に変換して短縮
- /2*2 を &~1 と同じ値になる計算式に変換し1byte短縮

links
- MSXユーザーのためのIchigoJam入門 - MSX Advent Calendar 2015 - その1
- 1KBでパックマン風ゲーム! IchigoJam BASIC プログラム解説と容量削減テクニック - その1
- たった1022byteでインベーダー風「IchigoVaders」アルゴリズムで削れ!プログラム圧縮テクニックその3

郡山産プログラムを改造「はやうちタッチタイプ」 / I-O DATA総合カタログに掲載、こどもプログラミング!

2018/03/22
#IchigoJam #KidsIT 

家電量販店でも入手できるようになった、こどもパソコンIchigoJam!
ラズパイで動くIchigoJam RPi+がセットになった、I-O DATA「BASICプログラミングキット

I-O DATA総合カタログ 2018年春号にも掲載
はじめてのプログラミング 開催レポート | IODATA アイ・オー・データ機器

2020年からのプログラミング教育へ向けて、学校で、家庭で、必要なものや発展の道筋が見えてきました。

学校
リコーダーのように、全子供が楽しい体験を通じてコンピューターを知り、学べること。
すばやく準備ができること。
トラブルが起きにくいこと。
習字セット、裁縫セットのように安価に購入できること。
子供達同士で発展的に学び合えること。

家庭
親が安心して使わせることができること。
困ったときに頼れる書籍やコミュニティがあること。
コンテストなど発展への道筋があること。

コンピューターとのコミュニケーションを円滑にするタイピングスキル。
文科省 情報教育では、小学生で20文字/分、中学生で30文字/分と数値目標も掲載されていますが、これはあくまで最低ライン。 コンピューターを使いこなしている感がでてくる、アルファベットで200文字/分、日本語でも100文字/分くらいを目指したい。
第4章 情報教育:文部科学省

楽しくゲーム感覚で高速キーボードタイピング、タッチタイプが学べるプログラム
郡山のmakotoさん作の「早うちゲーム.bas」を改造「はやうちタッチタイプ」

上から降ってくるアルファベットを正確に、すばやく押して、ハイスコアを狙おう!
下まで到達するとタイムオーバーで1ミス。3ミスでゲームオーバー。
音で合ってるか間違っているかフィードバック。間違うとスコアが10%減。
どの指でどのアルファベットを押すか、最初はゆっくり確認しながら確実に打とう。

「はやうちタッチタイプ」(RUN on IchigoJam web)

300点ごとにスピードアップ。3000点を超えたら間違った時点でゲームクリア!
その頃には立派なタッチタイプマスター!

10 S=0:M=0 20 C=65+RND(26):X=RND(32):Y=0 30 CLS:LC X,Y:?CHR$(C); 40 LC 0,23:?"SCORE=";S,"MISS=";M; 50 K=INKEY() 60 IF K IF K=C BEEP5:S=S+25-Y:GOTO20:ELSE:BEEP50:IF S<3000 S=S-S/10:ELSE GOTO100 70 WAIT 10-S/300 80 Y=Y+1:IF Y<23 GOTO30 90 M=M+1:IF M<3 THEN PLAY"A16G16A2R8G16F16E16D16D-8D4":WAIT150:GOTO20 100 PLAY"C4C8.C16C4E-8.D16D8.C16C8.>B16<C4" 110 FOR I=0TO24:SCROLL0:WAIT5:NEXT 120 LC 10,10:?"GAME OVER":LC 10,12:?"SCORE=";S

早うちゲーム.bas by makoto氏 ライセンスNYSL」を改造
*NYSL:オープンライセンスの一種、煮るなり焼くなり好きにしろライセンスの略

makotoさん、IchigoJamプログラミングワークショップの講師、はんだを使わない、ブレッドボード版IchigoJamの組み立て方の詳しい解説とトラブルシューティングがとってもわかりやすい!
こどもパソコン IchigoJamを使った組み立て・プログラミングワークショップの講師を務めさせていただきました。 | RIALAB.

links
- IchigoJam BASIC向けサンプルプログラム | RIALAB.
- リアルタイム・タイピングゲーム - SHIROのモバイル日記

声だけでプログラミング! 耳がついたスマートIchigoJamの作り方

2018/03/21
#IchigoJam #KidsIT #AI #python 

日本語を(一部)理解する、スマートIchigoJamができました。声でプログラミング!

IchigoJamの基本的な単語(コマンド)と数を聞き分け、代わりにキーボードを打ってくれます。
(正確にはシリアルでIchigoJamへ送っています)


「LEDつけて」と呼びかけても、耳がついてないIchigoJamはやってくれないよ。
と、IchigoJamプログラミング体験の時に紹介しますが、「耳」とそれを聞き分ける「機能」をつければOKです!

スマートIchigoJamの作り方 (for Mac)
オープンソースでフリーな日本語音声認識「Julius」(ジュリアス)を準備する
オフラインでフリーで使える音声認識 Julius、声で操作するロボを自作しよう

認識する辞書をつくる

cat > test.yomi % ACTION 1 いち 2 に 3 さん 4 よん 5 ご 6 ろく 7 なな 7 しち 8 はち 9 きゅう 9 く 10 じゅう LED1 えるいーでぃーつけて LED0 えるいーでぃーけして WAIT60 まって GOTO1 いちえいって RUN らん LIST りすと ESC とめて ENTER えんたー % NS_B [s] silB % NS_E [s] silE

文法をつくる

cat > test.grammar S : NS_B TARGET ACTION NS_E S : NS_B TARGET WO ACTION NS_E

Julius用に変換

iconv -f utf-8 -t eucjp test.yomi | yomi2voca.pl | iconv -f eucjp -t utf-8 > test.voca perl ~/sandbox/julius-kits/grammar-kit-4.3.1/bin/linux/mkdfa.pl test

Juliusをモジュールモードで起動

julius -C ~/sandbox/julius-kits/grammar-kit-4.3.1/hmm_mono.jconf -input mic -gram test -module

Python3で認識したコードをIchigoJamに送る言葉に変換するプログラムをつくる
(XMLパースにElementTree、シリアル接続にpyserialを使用)

cat > julius-client-ichigojam.py #!/usr/bin/env python3 import xml.etree.ElementTree as ET import socket import serial ser = serial.Serial("/dev/tty.SLAB_USBtoUART", 115200, dsrdtr=True) def recog(words): s = "" for w in words: s += w print(s) if s == "1": ser.write(b"1 ") elif s == "2": ser.write(b"2 ") elif s == "3": ser.write(b"3 ") elif s == "4": ser.write(b"4 ") elif s == "5": ser.write(b"5 ") elif s == "LED1": ser.write(b"LED1\n") elif s == "LED0": ser.write(b"LED0\n") elif s == "WAIT60": ser.write(b"WAIT60\n") elif s == "GOTO1": ser.write(b"GOTO1\n") elif s == "RUN": ser.write(b"RUN\n") elif s == "LIST": ser.write(b"LIST\n") elif s == "ESC": ser.write(b"\x1b") elif s == "ENTER": ser.write(b"\x10") client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("127.0.0.1", 10500)) sockfile = client.makefile() data = "" while 1: line = sockfile.readline() if line != ".\n": data += line else: root = ET.fromstring(data) data = "" if root.tag == "RECOGOUT": words = [] for wordtag in root.iter("WHYPO"): words.append(wordtag.attrib["WORD"]) words.pop(0) words.pop() recog(words)

実行!音声コントロールIchigoJamのできあがり!

python3 julius-client-ichigojam.py

pyserialがなければ、pipでインストール(USBシリアルは環境に合わせて書き換えてください)

pip install pyserial

自分なりの「スマート」をプログラミングしちゃいましょう!
ネットワークが不要なので、ラズパイゼロなどに入れて、コンパクトに動かす音声認識モジュールにすると良さそうです。

links
- オフラインでフリーで使える音声認識 Julius、声で操作するロボを自作しよう

1KBでパックマン風ゲーム! IchigoJam BASIC プログラム解説と容量削減テクニック

2018/03/20
#IchigoJam #KidsIT 

テトリス風マインスイーパー風と、IchigoJamの1プログラムの容量制限、驚きの1KBプログラムが次々と登場する中、なんとパックマン風ゲーム「Ichigo Pac」が登場。 作者は、VLED勝手表彰でjig.jp賞をもらっていただいた、その筋屋さん!


敵キャラ、モンスターは4体が追いかけてくる!イチゴを取ったら逆転、連続確保で高得点!

すごいのはステージ生成。わずかこの1行!(RUN on IchigoJam web)

M=#FF:CLS:LET[0],M,#84,#B5,#B5,#80,#F5,#84,#BD,#A0,#AF:FORY=0TO9:FORX=0TO7:A=46-([Y]&#80>0)*43:LCX,Y:?CHR$(A):LC15-X,Y:?CHR$(A):LCX,20-Y:?CHR$(A):LC15-X,20-Y:?CHR$(A):[Y]=[Y]<<1:NEXT:NEXT


配列10コ、8bitで壁とドットを表すステージデータ。左右、上下対称に描画。

ステージ描画用プログラムを少し圧縮して短くしてみます。8bit目を表す「#80」で3文字になってしまうので反転、壁とドットキャラクターの46と3の差分は43、3に43を足すことにすると1文字へりそうです。

FORI=0TO9:N=0:FORJ=0TO7:N=N+([I]&(#80>>J)>0)<<J:NEXT:?HEX$(N),N,HEX$(N),~N&#FF:NEXT

ビットと左右反転させたステージデータを使ったステージ生成プログラムがこちら

CLS:LET[0],0,222,82,82,254,80,222,66,250,10:FORG=0TO79:X=G%8:Y=G/8:A=3+[Y]>>X&1*43:LCX,Y:?CHR$(A):LC15-X,Y:?CHR$(A):LCX,20-Y:?CHR$(A):LC15-X,20-Y:?CHR$(A):NEXT

プログラム容量削減ミニ技
- 255の代わりに ~0 で1文字短縮 (bit反転)
- #3Cなど#63以下の16進数は10進数にすることで1〜2文字短縮
- K>0 の代わりに K で2文字短縮
- -(K=28)+(K=29) のプラスを前にして1文字短縮
- ?CHR$(0) の代わりに ?" " で4文字短縮(キャラコード32になるので注意)
- +(P>0)*11 の代わりに -!P*11 で3文字短縮
- P=P-(P>0) の代わりに P=P-!!P で2文字短縮
- 2重ループを1重ループ化(X、Yは計算で求める)
- 配列への代入ループを展開(ループ回数が少ない場合有効)
- よく使う数を変数にいれる(Y=10、J=I+4、I+12 → J+8)
- SCR()でLCで設定した位置のキャラコードを取得することを利用
- シンプルな演算子の優先順位を利用して、カッコを削除
(参考、MSXユーザーのためのIchigoJam入門

この調子で 870byte(154byteの空きメモリー)まで圧縮
「Ichigo Pac」 (RUN on IchigoJam)

1 CLS:LET[0],0,222,82,82,254,80,222,66,250,10:FORG=0TO79:X=G%8:Y=G/8:A=3+[Y]>>X&1*43:LCX,Y:?CHR$(A):LC15-X,Y:?CHR$(A):LCX,20-Y:?CHR$(A):LC15-X,20-Y:?CHR$(A):NEXT 2 CLV:LC1,2:?CHR$(~0):LC14,18:?CHR$(~0):X=3:Y=10:LET[0],7,8,9,Y,Y,Y,Y,Y:POKE#700,60,#7E,#99,#BD,#99,~0,~0,#99 3 D=H:E=V:K=INKEY():IFKH=(K=29)-(K=28):V=(K=31)-(K=30) 4 A=X:B=Y:IFSCR(X+H,Y+V)=3H=D:V=E 5 X=(X+H)&15:Y=Y+V:Z=SCR(X,Y):IFZ=3X=A:Y=B 6 LCA,B:?" ":LCX,Y:?CHR$(232+C&1):LC20,0:?"SCR ";S:I=C&3:J=I+4:LC[I],[J]:?CHR$([I+8]):[J+8]=[I]:[I+16]=[J]:[I]=[I]+(X>[I])*2-1:F=SCR([I],[J]):IFP||F=3||F=224[I]=[J+8] 7 [J]=[J]+(Y>[J])*2-1:F=SCR([I],[J]):IFP||F=3||F=224[J]=[I+16] 8 LC[I],[J]:[I+8]=SCR():?CHR$(235-!P*11):FORG=0TO3:IFX=[G]&&Y=[G+4]IFPS=S+R:R=R+R:[G]=8:[G+4]=10:Q=Q+([G+8]=46):[G+8]=0ELSECLS:?"GAME OVER ";S:END 9 NEXT:IFZ=46S=S+10:Q=Q+1ELSEIFZ=255P=20:R=200 10 IFQ<146P=P-!!P:C=C+1:GOTO3

効果音や、敵キャラアルゴリズムなど、いろいろ追加要素を加えてみるのも楽しそう!

Ichigo Pac 解説


クリア!
IchigoJam実機では、なかなかエキサイティングなゲームになっています。

力作ゲーム、ぜひ電子工作マガジンのベーマガ(BASICマガジンコーナー)へも投稿もどうぞ!
電子工作マガジンWEBSITE

links
- ダイヤ編成支援システム その筋屋【公式】 on Twitter: "自作の #IchigoJam のBASICで作ったパックマン、実機で動かしてみました。 実機だと、けっこうスリルがありますよ。 ソースプログラムはこちら。実機に入れてみよう。 (まだバグがあるかも) https://t.co/sdPmIkuRx7… https://t.co/zITMSGIhXI"
- 勝手表彰「ダイヤ編成支援システム その筋屋」さん!バスリアルタイムオープンデータから本格ミニゲームまで、意外と使えるIchigoJam&sakura.io進呈! トランプゲーム実装例、神経衰弱

こどもxAI、幼児プログラミングとTensorFlowはじめのいっぽ

2018/03/13
#KidsIT #IchigoJam #AI #TensorFlow 

ハロー英数学院さんと幼児向けプログラミング体験会実施。
キーボードに触れる嬉しさ、コンピュータくんのスゴサや自分で書いたコマンドに驚いてくれたりしました。最初はがんばって探したアルファベットも、みるみる覚えていく、さすが子供!

1 LED1 2 WAIT30 3 LED0 4 WAIT60 5 GOTO1

LEDが付いている時を狙って[ESC]キーで止めようゲーム!(難易度は2番の数で調整)
SAVEして、テレビ、キーボードを引っこ抜いても動いちゃうプログラミングでものづくり体験してもらいました。

45分ほどで幼児たちの集中力は切れ、かわくだりゲームはお母さん達に作ってもらいました。お母さんが難しさやキャラクターを変更しながら、楽しく子供達と遊んでくれました。

キーボードでがちゃがちゃ遊ばせるだけでも、その後のコンピューターを使ったあらゆる作業のハードルが下がるのでオススメです!(4才にプログラミングを教える10ステップ

IchigoJam対応のキーボードの最安値は、壊れちゃっても痛くない、651円!
SANWA SUPPLY USBキーボード SKB-L1U←USBキーボードですが、PS/2にも対応していて使えます)

福井県情報システム工業会のAIイベント電気通信大学 人工知能先端研究センター センター長 栗原聡さんの講演会。

「社会に浸透する人工知能に求められるものとは?」

コンピューターも人間も共通、インプットとアウトプット。
人の脳をモデル化した理論、人工ニューラルネットワークが、3Dゲーム技術によって高速化したコンピューターによって花開いた、人工知能(AI)。

Googleが開発し、オープンソースとして誰もが自由に、子供でも使えるTensorFlowon Wikipedia)のはじめのいっぽ「1+1=2」を作ってみました。

?1+1 2 OK

IchigoJamではこのように計算する1+1、TensorFlow(テンソルフロー)ではテンソル(量)がどう流れるか(フロー)を組み立てて、動かす、という手順で使います。

import tensorflow as tf a = tf.constant(1) b = tf.constant(1) c = tf.add(a, b) sess = tf.Session() print(sess.run(c))

Python3 x TensorFlow で解く、1+1=2。
定数aとbを足してcにするという流れをつくって、セッションをrun(走れ)で、結果が2と表示されます。

IchigoJamで扱えるのは、-32768から32767までの整数。
TensorFlowを使うと、とても大きな数から小数まで、それらを何百何千とまとめて一度に扱えちゃいます。

import tensorflow as tf a = tf.constant([ 1, 2, 3 ]) b = tf.constant([ 1, 10, 100 ]) c = tf.add(a, b) sess = tf.Session() print(sess.run(c))

aとbにセットする定数をベクトル(3つまとめた数)に変えると、3つまとめた計算結果がでてきます。(1+1、2+10、3+100をまとめて計算!)

最近のコンピューターは、効率化のために一度に多量の計算をまとめてやってくれる機能が充実しています。 TensorFlowとPythonいう無料の部品を使うと、この最新技術を楽々扱えてしまうわけです。

学習とは何か?
コンピューターを見つめることは、人を見つめ直すこと。

links
- TensorFlowではじめるDeepLearning実装入門 impress top gearシリーズ | 新村 拓也 | 工学 | Kindleストア | Amazon

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