神山町に続き、本日は永平寺町でIchigoJamプログラミングワークショップ!


永平寺開発センターにて、福井県永平寺町のこどもプログラミングのキックオフ! 越前がにロボコンや、PCNこどもプロコンなど、創造的人材育成に向けた継続的な活動、応援します!


検温・飛沫防止・疎、コロナ対策万全でリアル開催。


なんと、オリジナルイチゴマスクをご用意いただいてました!


今日、仲良くなる予定のコンピューター、IchigoDyhookをさしこみます。


ちっちゃくてかわいいコンピューター、でもその実力はあなどれません!エルチカで仕事の速いコンピューターくんを体験し、コンピューターとの距離がぐっと縮まるエルチカゲーム。


休憩時間は、ドローンのラジコンが人気!ドローンにもコンピューター、姿勢制御しながら無線でコントローラーの動きに応えてます。


作ったゲームが動いた!

10 CLT:CLS:X=15:PLAY"$CDE2" 20 LC X,5:?"V" 30 LC RND(32),23:?"**" 35 WAIT 3 36 X=X-BTN(28)+BTN(29) 37 X=X&31 39 IF SCR(X,5) BEEP:?TICK():END 40 GOTO20

キャラクターを変えて、点数を付けて、BGMとゲームオーバー時の効果音を付けたかわくだりゲーム。


更に、改造リクエストに応えます。

1000点でクリアとしたい!

34 IF TICK()>1000 ?"OME!":END

(メインループ内に、時間=スコアが1000を超えていたらメッセージ表示と終了を追加)

即死ではなく、ダメージ制にしたい!

10 CLT:CLS:X=15:L=3:PLAY"$CDE2" 39 IF SCR(X,5) BEEP:L=L-1:IF L=0 ?TICK():END

(ライフの残数を表すLを追加し、当たり判定でLを引き算、0になったときだけゲームオーバー)

回復アイテムをつくりたい!

30 LC RND(32),23:IF RND(10)=0 ?"%" ELSE ?"**" 38 IF SCR(X,5)=ASC("%") BEEP5:L=L+1 39 IF SCR(X,5)=ASC("*") BEEP:L=L-1:IF L=0 ?TICK():END

(1/10の確率で敵*ではなくアイテム%を表示するようにして、38行でアイテムだったらライフ+1、敵だったら当たり判定処理と変更)

BGMの音を高くしたい!

10 CLT:CLS:X=15:L=3:PLAY"$O5CDE2"

BGMのテンポを速くしたい!

10 CLT:CLS:X=15:L=3:PLAY"$O5T240CDE2"

BGMのテンポをもっと速くしたい!

10 CLT:CLS:X=15:L=3:PLAY"$O5T2400CDE2"

BGM、ドから高いドまで鳴らしたい!

10 CLT:CLS:X=15:L=3:PLAY"$O5T240CDEFGAB<C"

(<で1オクターブアップ、>で1オクターブダウン)

IchigoJamミニゲームズ」「IchigoJamプリント」や「IchigoJam BASIC 1.4 コマンド一覧」を見て、いろいろチャレンジしてみよう!


福井市少年少女発明クラブの会長、高橋さんと!


まちづくり株式会社ZENコネクトの方から動画インタビューに受けている様子。いちごづくし。

地域のIT人材育成、IoTによる事業創出、オープンデータによる支援に関心ある自治体の方にオススメのプログラム。まずは大人もプログラミング、体験してDXしましょう!
地域情報化アドバイザー派遣制度 - 総務省地域情報化アドバイザー一覧

links
- 神山町、遠隔プログラミングワークショップとPS/2ゲーミングキーボードの実力を計測!(オンライン開催)

人間はきっと本来、創るのが好き。好奇心で広がり、評価や挫折で狭まる好きの範囲。大好きなゲーム、こどもはみんな創りたい。

短時間でコンピューターの凄さと手軽さを楽しく体験、IchigoDyhookを使った、IchigoJamプログラミングワークショップ。今回は神山まるごと高専ができる場所、徳島県神山町にある神山バレー・サテライトオフィス・コンプレックスに来てくれたこどもたちへの遠隔講義。(前回はリアル講義


大いに楽しんでくれました!(サポートいただいた大人の方々、ありがとうございます!)
今日のスライドはオープンデータ、GitHubからダウンロードし、自由に改変含め、ご活用ください!(PDF/Keynote/PowerPoint
一度体験して、一度練習したら、誰でも誰かに教えられちゃいます。

エルチカとかわくだりゲームの間の休憩時間にライブコーディング。タイピング、速ければ速いほどかっこいい。 IchigoJamで使う、PS/2対応のUSB接続キーボード。実は1フレーム(1/60秒以下)を争うゲームの世界で重宝されています。

こちら、今回入手したお手頃ゲーミングキーボード「BUFFALO ゲーミングモデル USB & PS/2 有線キーボード ブラック BSKBCG305BK


特徴は右上の[mode]ボタンで切り替える「Turboモード」と青色ダイオード。通常1秒間に10回のキースキャンが、秒間50回、秒間120回へと高速化して、よりキーボードを押した反応がすばやくコンピューターに伝わるようになります。 合わせてキーリピートも超高速化!

10 WAIT 180 20 CLT:FORI=0TO119 30 IF INKEY()=0 CONT 40 NEXT 50 ?TICK()

3秒間待った後、120回キーが押される時間を計測。


結果
Turbo OFF 549 (9.1秒)
Turbo 50 143 (2.3秒)
Turbo 120 58 (0.9秒) - 今まで体験したことがない速さのキーリピート!

実測で120回/秒、出ました!
すばやく応えてくれ、同時押しにも強いPS/2ゲーミングキーボード、シビアな対戦ゲームづくりにも良さそう!

鯖江からzoomを繋いで福野さんのIchigoJamプログラミング教室を開催中。10人ほどの子供たちが夢中でBASICプログラミングを楽しんでいます。

本橋 大輔さんの投稿 2020年9月4日金曜日

どんどんつくろう!自信作、PCNこどもプロコンで待ってます!

links
- 新高専予定地、徳島県神山町でIchigoJamプログラミング with CoderDojo神山、遊ぼう自然もコンピューターも、はじめてのマシン語体験
- 神山まるごと高専、技術教育統括ディレクター就任に向けた所信表明と、Amabieペンダント

IchigoJamで使えるお手軽浮動小数点数FP15、せっかくなので四則演算を用意します。 有効桁2桁ですが、Googleの語源となったグーゴルシャノン数もカバーする10の127乗から、2022年制定予定のクエクトよりはるかに小さい、小数点以下126コ続く10の-127乗までのダイナミックレンジを、16bit/2byteで表現できます。

使い方は簡単、変数のAとBに、指数を上位に、仮数を下位にセットし、ライブラリを呼び出すと、変数Cに計算結果がセットされます。

10 ?"A=A-A*0.99" 20 A=6<<8|100 30 B=-2<<8|99:GSB@MUL 40 B=C:GSB@SUB:GSB@PUT:? 50 A=C 60 GOTO 30

20行、100x10の8乗、つまり、100億をAにセット。
30行、99x10の-2乗、つまり、0.99をBにセットし、掛け算ルーチン(@MUL)を呼び出し。
40行、計算結果CをBにセットし、A-B、引き算ルーチン(@SUB)を呼び出し。
50行、計算結果CをAにセットし、繰り返し!
→ 100億から小さな小数まで計算できました。

これを実現するプログラムは以下の通り

100 @PUT 110 E=C&#FF00/256:D=C<<8/256 120 IF E=0 ?D;:RTN 130 IF E>0 ?D;:FORI=1TOE:?"0";:NEXT:RTN 135 IF D<0 ?"-";:D=-D 140 IF E=-1 ?D/10;:IF D%10 ?".";D%10;:RTN ELSE RTN 150 IF E=-2 ?D/100;:IF D%100 ?".";:GOTO170 ELSE RTN 160 ?"0.";:IF E<-3 FORI=4TO-E:?"0";:NEXT 165 ?D/100;:IF D%100=0 RTN 170 ?D/10%10;:IF D%10=0 RTN 180 ?D%10;:RTN 200 @MUL 210 C=A&#FF00/256+B&#FF00/256 220 D=A<<8/256*(B<<8/256) 225 F=0:IF D<0 F=1:D=-D 230 IF D>>7 C=C+1:D=D/10:CONT 235 IF F D=-D 240 C=C<<8|D&255:RTN 300 @DIV 310 C=A&#FF00/256-B&#FF00/256 320 D=A<<8/256*100/(B<<8/256):C=C-2 325 GOTO225 400 @ADD 410 C=A&#FF00/256:D=B&#FF00/256:E=C-D 415 F=1:F=1:IF ABS(E)>0 FORI=1TOABS(E):F=F*10:NEXT 420 IF E>=0&&E<3 C=D:D=A<<8/256*F+B<<8/256 421 IF E<0&&E>-3 D=A<<8/256+B<<8/256*F 422 IF E<=-3 C=D:D=B<<8/256 425 GOTO225 500 @SUB 510 B=B&#FF00|(~B+1)&255:GSB@ADD:B=B&#FF00|(~B+1)&255:RTN

@PUT 指数に合わせて0をたくさん並べて、普通の数として表示するプログラム
@MUL 掛け算プログラム、指数は足し算、仮数は掛け算して有効桁を調整
@DIV 割り算プログラム、指数は引き算、仮数は100倍してから割ることで有効桁を確保
@ADD 指数の差を調整して足し算、指数の差が3以上は無視
@SUB 足す数の符号を反転して足し算、再び符号を反転してBの値は元に戻す

昔はよく分かっていなかったMSXの浮動小数点数、改めて仕様を確認すると、指数が10のn乗を使っていて親近感。仮数は4bitで10進数1桁を表現するBCDが使われてました。

有効桁2桁では足りない?配列2つを指数と仮数で使った、浮動小数点数の実現は、IchigoJam BASICでも実装できそうですね(掛け算、割り算に一工夫必要です)。ぜひチャレンジしてみてください!

0か1かで記録し計算するコンピューター。片手で31まで数える指二進法のように、2進法で整数は表現できますが、小数はどうするといいでしょう?

コンピューターにとってはただの0か1、人間がどう捉えるかだけの問題です。123という数を1.23と読み替えて、表示で工夫するだけです。

N=123 ?N/100;".";DEC$(N%100,2) 1.23

常に100倍して、下から2桁目が小数点と固定する方式、これを固定小数点表現と言います。

小数点の位置を数とセットで持っておけば、大きな数から小数点以下0がずっと続く、絶対値が小さな数まで表現できます。 これを浮動小数点表現と言います。

現代の一般的なコンピューターでは32bitの浮動小数点数が多く使われていますが、精度を落とした16bitのfloat16もメモリと時間を節約できるのでAIやCGなどで活躍中。

16bitと言えば、IchigoJamの変数の単位と一緒ですね!ただ、仕様に従って符号1bit、指数(小数点位置)5bit、仮数10bitのfloat16をそのまま実装するの、掛け算時のオーバーフロー処理などちょっと大変なので、指数部と仮数部を8bitずつ、しかも指数部は10進法で扱う「FP15」という勝手な規格で作ってみました。

日本の人口、1.26億人は、126 x 10の6乗なので、上位8bitに指数部6、下位8bitに仮数部126を入れて、6<<8|126 と表現します。仮数部はプラスマイナス127まで使います。(マイナスを入れる時は、A=6<<8|-126&255)と8bitに収めることを忘れずに!)


こちら仮に、人口減少率を大げさに3%(x0.97)として、シミュレーションした結果です。(昨年の実際の減少率は0.22%だったとのこと)

こちらがFP15の掛け算を含む、人口減少シミュレーションプログラム

5 Y=2020 10 A=6<<8|126:N=A:GSB@PN:?" A" 20 B=-2<<8|97:N=B:GSB@PN:?" B" 25 ?"Year ";Y;" P:"; 30 GSB@MULAB 40 N=C:GSB@PN:?" C=A*B" 50 A=C:Y=Y+1 60 GOTO 25 100 @PN:E=N&#FF00/256:M=N<<8/256:?M;"e";E;:RTN 200 @MULAB 210 C=A&#FF00/256+B&#FF00/256 220 D=A<<8/256*(B<<8/256) 225 F=0:IF D<0 F=1:D=-D 230 IF D>>7 C=C+1:D=D/10:CONT 235 IF F D=-D 240 C=C<<8|D&255:RTN

最近のCPUには、浮動小数点を計算する回路も含まれていて、超高速にやってくれますが、その実態を理解するには、プログラムで作って触ってみるのが一番です!

大人もこどももプログラミングを楽しく優しくオンラインで学べる、福井高専の先輩、ちっひーの講座、スタート!

ちっひー先輩によるオンラインプログラミング教室、開校! こどもも大人も親子でも! 誕生日もおめでとうございますー

福野 泰介さんの投稿 2020年9月1日火曜日

IchigoJam、はじめてのプログラミングから、深く楽しいコンピューターサイエンスまで、いろんな形でご活用ください!

IchigoJamで使うキーボードは、PS/2に対応したものが必要です。対応していたはずが、動かない現象が発生。原因が判明したので、その対策を紹介します。

結論、10kΩ前後の抵抗1つ、5VとKBD1またはKBD2に接続することで動きます。


サンワサプライのPS/2対応キーボード「SKB-KG3BKN」と色違い「SKB-KG3WN」は、サイズ感がいい感じ。 販売価格もAmazonで、1,255円と手頃な価格もうれしい。


改めて入手し、確認したところ、キーボードのLEDが全く反応しない状態。 自宅のPCをよく見ると、PS/2端子ありました。


PS/2キーボードとしての動作は確認できたので、通信プロトコルの間違いや、初期化のタイミングなどを探ります。


プログラムをいろいろと変えてみましたがどうやっても動かず、KBD1またはKBD2を5Vと抵抗10kΩを使ってプルアップし、信号の5V化を試したところ動きました! ただ、ソフトウェアだけでは対処できないので、残念ながら現在の基板では対応とは言い難い状態。


抵抗の両端、少し切るとコンパクトに収まります。


5V端子は別で使いたい場合、裏面にはんだづけするといいです。CN5の一番上5VとKBD1かKBD2へ10kΩの抵抗でつなぎます。 (他のピンに当たってしまわないように注意!)


はんだづけ、完了!


IchigoSodaも、10kΩ抵抗1つでこの通り、動きました。
抵抗は、100本で100円、プルアップ抵抗としてもよく使うので、この際100本、いっちゃいましょう!

links
- PS/2キーボードが無くならない3つの訳、IchigoJamの対応キーボード拡大!

オンライン講演や、オンラインミーティングが多いので、自撮りライトを作ってみました。

余っていたリング状のWS2812BのLEDがぴったりでした!IchigoJamで制御、簡単!


WS2812BのIN側にL字ピンヘッダーをはんだづけし、PCの縁に引っかかるようペンチで曲げて、3本の線をはんだづけ。


GND、LED、5Vに接続します(VCCでも動きますが、輝度の上げすぎ注意です)


LET[0],100,100,100:WS.LED 1,12

これで12コぜんぶ白色で点灯します!(IchigoJam 1.4 WS.LEDコマンド使用)


夜間の室内、色温度が合わないときはRGBのバランスを調整しましょう。


ゲーミング仕様も色相環プログラムを使って、簡単実現、自由自在!

作ってみたい人 → "WS2812B リング" on Amazon

色設定可能自撮り照明プログラム (ボタンで輝度調整、キーボード1/2/3でRGBで色温度など調整)

10 S=30:N=S*5:R=100:G=100:B=100 20 GSB200 40 IF BTN()=0 K=INKEY():IF K GSB100:CONT ELSE CONT 50 N=N+S:IF N>255 N=0 60 IF BTN() CONT 70 GOTO 20 100 IF K=ASC("1") R=R-10:IF R<0 R=100 110 IF K=ASC("2") G=G-10:IF G<0 G=100 120 IF K=ASC("3") B=B-10:IF B<0 B=100 125 GSB200 130 RTN 200 LET[0],N*G/100,N*R/100,N*B/100 210 WS.LED1,12 220 RTN 300 CLV:WS.LED1,12

ゲーミングセルフィーライトプログラム (V:最大輝度、L:周期)

10 CLV 20 V=100 30 L=20 40 R=V/L:[1]=V 50 [H/L%3]=ABS(H/L%2*(L-1)-H%L)*R:H=(H+1)%(6*L) 60 WS.LED1,12 70 WAIT3 80 GOTO 50

色相環ぐるぐるライトプラグラム (V:最大輝度、L:周期、N:LED数)

10 CLV 20 V=100 30 L=20 35 N=12 40 R=V/L 50 [H/L%3]=ABS(H/L%2*(L-1)-H%L)*R:H=(H+1)%(6*L) 60 WS.LED12 65 COPY#800+N*2*3-1,#800+(N-1)*2*3-1,-(N-1)*3*2 70 WAIT3 80 GOTO 50

links
- BASICプログラム1行で色相環!20分で作るアキバエモメガネでアガるパーティー

今日はダブルヘッダー、京都オープンソースカンファレンスと、福井発の起業家創出を目指す NEW LOCAL FUKUI。共にオンライン登壇なので移動時間0! コロナ禍、世界中のどんなイベントにも参加し放題です。


(追記、OSPN.jpより、当日の講演動画が公開されました)

大切なのは自分の中の熱い想い。何をやりたいか、そのために何を創る必要があり、自分はどんな役割を果たし、足りないものは何か。 すべては始まりは「想い」です。好きなもの、気になるものを突き詰めてみるもよし。SDGsに代表される世界中で解決すべき地域の課題から、ビビッと来るものを選ぶもよし。 人と違ってOK、むしろ多様であるほど社会にプラス!


小中学生向けプログラミングコンテスト、PCNこどもプロコンと共に、小学4年生の好きな作品「おかあさんのスマホ使いすぎを防止するマシーン」を紹介。 もっとかまって欲しいお年頃、スマホばかり見ている母親を見た寂しい想いを形にする、新しい伝え方。

特に「何か」が思い当たらない人や、好奇心旺盛なこどもにオススメしたいのがプログラミング!プログラミングは、オープンデータや、さまざまなツール、ライブラリ、APIを使って、いろんな作品を創造可能な便利で技です。 まずは安くてネットにつながっていない誰にも迷惑かけ無いことが保証された、安心安全なIchigoJamでシンプルにはじめてみましょう。おもしろさにハマった人は、深く広いコンピューターの世界を自由に遊び回りましょう。


BASICからオールマシン語まで、オープンデータとIchigoJamで創るプログラミング教育 - セミナープログラム - オープンソースカンファレンス2020 Online/Kyoto
資料はこちら(20200829-IchigoJam-kyoto-osc.pdf)です。 1996年の経団連の提言「創造的な人材の育成に向けて~求められる教育改革と企業の行動~」、今こそ行動の時!

今年のjigインターン生から、ボードゲームはオンラインでの人と人との距離をぐっと縮めるステキなツールだと学びました。 サイコロ5つを振って、役を作って点数を競うゲーム「ヤッツィー」。遊んでみると確かにいい!自然と会話がはずみ、行動から人となりが見えてきます。

IchigoJamで、サイコロ5つを揃える快感を味わうゲームを作ってみました。


まずはサイコロのデザイン。左上に絵を描いて、プログラムで絵文字にしてみます。これはサイコロ1のつもり。

10 LET[0],0,#BA,#101,#111,#145,#155,#16D:FORI=0TO6:A=#700+I*8:COPYA,#700,8:N=[I]:M=#82:POKEA,#7C,M,N>>6<<3|M,N>>3&7<<3|M,N&7<<3|M,M,#7C:NEXT 20 FORI=0TO6:?CHR$(224+I);:NEXT

1〜6までを枠の中3x3の9ドットで表現することにします。配列に1〜6までのパターン記録し、プログラムでパターン生成。 単純なデータにしてもいいですが、写経するならデータより、プログラムの方が楽しく、打ち込めますよね!20行でテスト表示。

?CHR$(225+RND(6))

これでサイコロがビジュアルにふれます!


残念、サイコロの目、揃わず、ノットヤッツ...
キーボード、1から5のキーを押して、振り直すサイコロを選び、エンター。振り直しは1ゲームに3回まで。全部のサイコロの目をできるだけ早く揃えましょう!


35回目のトライでようやく揃って、YATZ! ゲームクリアです!


プログラムはこんな感じ。1画面に収まりました。全部揃う以外の役の判定をいれたり、対戦ゲームにしたり、いろいろと改造して遊んでみましょう。 コピペですぐ遊べてしまっては学習にならないので、今回はソース添付なし。Let's 写経!


NEW LOCAL FUKUI のオンライン講演。次世代のリーダー、イノベーターを生み出す要、Hana道場! これをやりたい!一人じゃできないから誰か手伝って!強い想いを持った人がリーダーとなり、何かやってしまった人がイノベーター? 大人も子供もみんなで楽しく学ぶ、Hana道場モデルを、世界中に創って0距離でつなぎたい!


新しい福井を創る試みは、キックオフしたばかり。ものづくり王国、福井。チャレンジする人は増えるほどにおもしろい! なにかつくってみたい人、つくってみた人におすすめイベント10/3-4土日開催、NT鯖江2020、入場も出展も無料です! ステキスポットSCCの見学も合わせてぜひどうぞ!

人に変わってサービスし続けてくれるサーバー。その元祖、タイムシェアリングシステムは、60年近く前、1961年開発。

商業的初成功を収めたダートマス・タイムシェアリングシステム(DTTS)は、誰もがコンピューターを使えるようにとダートマスBASICと共に1964年開発。 見慣れたコマンド、LIST / RUN / SAVE / NEWが並ぶ。 そう、これらはBASICのコマンドではなく、TSS(今で言うシェル)のコマンドだったのです!

圧倒的に高速なコンピューターくん、マイクロ秒単位で相手する人を切り替え、人間から見てあたかも同時に対応してくれているように振る舞います。 シェルは、コンピューターと人とをつなぐ窓口のひとつ。IchigoJam BASICのように、コマンドを送ると、その結果を返事として返してくれます。

開発大詰め迎えるjigインターン、デモのためそれぞれチームごとに提供しているサーバーを設定し、Deno(JaavScript)で開発しているサービスをデプロイ(公開)しよう!

サーバー(AWS)上でDenoをサービスとして動かす方法
まずサーバーにログインする

動かしたいサービスをGitHubからとってくる
リポジトリの緑ボタン[Code]からで、Use HTTPS に切り替えて、Clone with HTTPSのアドレスをコピー

git clone https://github.com/.....git

Webサーバー Nginx(エンジンエックス)設定のため、一時的にrootユーザーになる

sudo su -

Webサーバーnginxの設定を追加する

cat > /etc/nginx/default.d/team.conf

下記を貼り付けて、Ctrl-D(ポート番号 8881 はそれぞれの環境に合わせる)

location / { proxy_pass http://127.0.0.1:8881; } location /ws/ { proxy_pass http://127.0.0.1:8881/ws/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }

nginxを再起動して設定有効化

nginx -s reload

で動かすとエラーがでる

Location の設定がかぶっているので、下記を修正

vi /etc/nginx/conf.d/ssl.conf vi /etc/nginx/nginx.conf

"Location / { }" を # を頭に付けてコメントアウト

再び再起動

nginx -s reload

で動かし、エラーがでなければ設定完了!

exit

で、ユーザーを root からもとに戻す

サービスの動かし方

cd [service path] deno run -A main.js

サーバーのホスト名をブラウザに入れて、確認してみよう!
自分たちで作ったサービスが動くと感動ですね!

画面共有と音声帯域を使ったリアルタイムサポート、チームで感動も共有!

サービスとして、ターミナルから抜けてもずっと動くようにする方法

nohup deno run -A main.js &

サービスの止め方

ps -u [account name]

denoのPIDを探して

kill [PID]

サービスの止め方2
サーバープログラムに、ファイルを見たり、特定アクセスで Deno.exit(0) するようにプログラムしておく

サービスの更新方法

git pull

サーバーで更新してしまっていて、pullできない場合

git stash

で、一時保存した上で、 git pull
サーバープログラムを更新した場合は、サービスを一旦止めて、起動
(staticフォルダ内など、クライアント用ファイル更新のみの場合は再起動不要)

サーバー操作にも通じる、BASIC。
黒い画面に強いこども達が生む、サービス誕生が楽しみです!


ザイログZ80伝説(カラー版) | 鈴木 哲哉 | 工学 | Kindleストア | Amazon
今も生き続けるZ80、開発秘話から現況、タイムシェアリングのはじまりから回路設計まで幅広く多様な内容が楽しい!


IchigoJam BASICの元とした、タイニーBASICのプログラムも掲載!
このBASICでは、@マークでメモリアクセスになってますね。ご先祖を想って楽しい、コンピューター考古学!

せっかくなので、世界最初のBASICプログラムと言われる、エラトステネスの篩による素数計算をIchigoJam BASICで実装。アルゴリズム、見比べてみましょう。

1 'Sieve of Eratosthenes 10 CLV 20 FOR I=2 TO 10:?I 30 IF [I]=1 NEXT 40 N=2 50 M=I*N:IF M<102 [M]=1:N=N+1:CONT 60 NEXT 70 ?"PRIME NUMBERS" 80 FOR I=2 TO 101:IF [I]=0 ?I;" "; 90 NEXT:?

今日のjigインターンブログは、もしゃ!
jig.jpオンラインインターン2020 8日目! - jigintern2020’s diary
情報交換タイムでのおもしろ写真付き!

バーチャル背景生成アプリというジャンルもおもしろい!

作ってみたIoT学習リモコンを、コンパクトにユニバーサル基板に実装して、実践投入。 アナログ温度センサー、MCP9700Aを使ったTEAM IchigoJamほっかいどう作、温度センサー基板を使って自動制御して、寝てみました。

変数Sでステート管理
S=0の時、27.0℃より下がったら29℃設定にし、S=1に
S=1の時、27.5℃より上がったら28℃設定にし、S=0に
と、プログラムを組んだつもりが、夜中1時半にエアコン作動音が連続する音と共に起こされました。 暗闇の中、寝ぼけながらプログラムを修正、その後は、無事に朝まで温度制御してくれました。 IchigoJam BASICのプログラムのバグ、分かりますか?(ヒント、LRUN)

アナログ温度センサー、MCP9700A、そこそこの精度で判定できていい感じだったので、赤外線送受信基板に追加、実装!

コンパクトに仕上がった、温度計付き赤外線リモコン送受信基板!EEPROMも実装して、プログラムもセットにすると楽かも?

自動制御で、熱中症を避け、快適な夏、創りましょう!

jigインターン、今日のブログは、ぴんぽん!
jig.jpオンラインインターン2020 7日目! - jigintern2020’s diary

ランチ写真をバーチャル背景におしゃべりする、オンラインランチ会!
チーム開発は高速スクラム、第二スプリントが終了し、いよいよ最終スプリントへ!

links
- IchigoJamで作るIoT学習リモコン、古いエアコンもスマホ制御で快適に! インターン生も芸人さんも楽しいプログラミング入門とマシン語
- 熱中症対策アプリ用オープンデータと暑さ指数予測ランキング、トップ840!

家にリモコン、いくつありますか?
IoTセンサーとリモコン制御プログラミングで、手軽に自作のスマートホーム!

寝室のエアコンの自動運転がいまいちで、寒かったり暑かったりして起きてしまう問題。 IchigoJamと赤外線LED、sakura.ioを使って、家のエアコンをスマホ制御できるようにして一歩前進。 IchigoJamのプログラムはとってもシンプル!

10 N=IOT.IN() 20 IF N=0 GOTO 10 30 ?N:F=FILE():R=10:LRUN N,200

LRUNを使っているので、このプログラムを保存してから、実行。 sakura.ioからデータ受信する IOT.IN() で信号を受け取り、エアコン停止のファイル1、28℃設定ONのファイル2、29℃設定ONのファイル3を呼び出します。(リモコン制御部分のプログラムは後述)

次はスマホ側、sakura.ioの連携サービスとしてWebSocketを設定し、スマホからの操作用のプログラムはJavaScriptで操作用アプリを作ります。 HTML/CSS/JavaScriptの基本スキルと、サンプルプログラムがあればカスタマイズし放題です。

IchigoRemocon IoT src on GitHub

高精度温湿度計SHT-31を使った、家のIoT温湿度計と合わせ、あとは快適に眠っていられる、ちょうどいいしきい値を決めるのみ。

温度が下がりすぎて寒くなって設定を緩めたらどんどん暑くなっていった、夜の記録。

IchigoJamで、赤外線を見よう!
ご家庭のほとんどのリモコンは赤外線リモコン。赤色より少し低い周波数の光を使って信号をリモコンから本体へと届けています。 目には見えませんが、赤外線受光モジュール(センサーの一種)を使って観測しましょう。

赤外線リモコン受信モジュール GP1UXC41QS (秋月電子で50円)を、IchigoJamにつなぎます。 データシートを見ると、丸い部分を手前にして、左から、信号出力のVout、GND、VCCの順。それぞれIchigoJamのIN1、GND、VCCに接続し、早速実験プログラム! (電源電圧VCCは2.7V〜5.5Vとあるので、5Vを使ってもOKです)

1 ?IN(1);:CONT

ずらっと1が並びますが、赤外線受光モジュールに向けて、リモコンボタンを押すと、0001010 などと、反応します。これが信号で、ボタンごと、機種ごとに違うものが送られています。

いろいろなリモコンで試してみましょう。

どんなリモコン信号を受けたら動かすだけなら、これでOKですが、信号の内容によって動きを変えたい場合は、もうひと工夫必要です。

リモコンの原理とマシン語活用
リモコンは赤外線を1秒間に3.8万回、38kHzの点滅を基本として、太陽光などに含まれる赤外線と区別しています。 その点滅があるときがON、無い時がOFFとし、ON時間とOFF時間を交互に計測し、一定時間OFFが続いたら一連の信号が終了、その一連の信号を見て判断すればOKと原理はシンプルですが、IchigoJam BASICでは速度が間に合いません。

そこでマシン語!以前作った、リモコン送受信コードを流用して、プログラム領域にデータを格納し、LRUNを使ったファイル連携で簡単に使えるようにしました。

1 'IR-REMOCON 100 INPUT"0:SEND 1:RECV ",N 110 IF N=0 N=USR(#D00,0):GOTO 100 120 L=USR(#D00,1) 130 ?"LEN:";L 140 FOR I=0 TO L-1 150 IF I%64=0 ?:?"POKE#";HEX$(#E00+I); 170 ?",";PEEK(#E00+I); 180 NEXT:? 190 GOTO 100 200 L=USR(#D00):LRUN F,R POKE#D00,112,181,114,182,14,34,18,2,138,24,0,40,53,208,80,35,27,3,1,51,27,3,1,36,164,4,2,38,54,2,2,62,0,33,0,240,37,248,1,49,33,66,28,209,29,104,0,45,247,209,228,8,0,32,0,33,0,240,26,248,1,49 POKE#D3E,33,66,17,209,29,104,0,45,247,208,17,84,1,48,0,33,0,240,15,248,73,28,33,66,6,209,29,104,0,45,247,209,17,84,1,48,176,66,231,209,0,33,17,84,1,48,98,182,112,189,156,37,173,0,1,61,253,209 POKE#D78,112,71,80,35,27,2,1,51,27,4,4,51,1,36,0,38,17,92,73,0,0,41,234,208,28,96,0,240,22,248,30,96,0,240,19,248,1,57,247,209,1,48,17,92,73,0,0,41,221,208,0,0,0,0,0,240,8,248,0,0,0,0,0,240,4,248 POKE#DBA,1,57,245,209,1,48,226,231,154,37,1,61,253,209,112,71

プログラムを入力し、実行すると 0:SEND 1:RECV と、送信するか受信するか聞いてきます。 まずは1、エンターで受信。リモコン信号を受光モジュールに当てると、#D00に記録した内容が表示されます。

0または単にエンターで、赤外線を発信します。OUT1とGNDに赤外線LEDを付け、本体に向けてやってみましょう!無事制御できましたか!?

1行目に何の信号か分かるように名前をつけて、保存しておきましょう(EEPROMを使えば追加で最大128種類保存可能)。 あとは、好きなようにプログラムを作るだけです。

USBシリアルでPCと接続している場合、受診時に表示されるPOKE文を保存しておき、上記プログラムと合わせて書き込むことでもリモコン信号を復元できます。

ちょっと詳しい解説編
1KBのプログラム領域、こんな風に使っています。
#C00-#CFF 256byte BASIC(溢れてないよう ?FREE() が768以下にならないよう注意!)
#D00-#DFF 256byte マシン語(赤外線送受信)
#E00-#FFF 512byte 赤外線データ

マシン語のasm15ソースコードはこちら。以前作成したものを、#E00から最大512byte使って保存するように変更し、#D00から書き込んで使います。(エアコンの信号で440byte、収まります!)

' IN1 - 赤外線受光モジュール / OUT1 - 赤外線LED PUSH {LR,R4,R5,R6} CPSID '割り込み禁止 R2=#E 'PROGの後半 #E00 R2=R2<<8 R2=R1+R2 R0-0 IF 0 GOTO @SEND R3=#50 ' IN1 の address PIO0_10 R3=R3<<(24-(10+2)) R3+=1 R3=R3<<(10+2) ' PIO0_10 R4=1 R4=R4<<18 '初回信号オーバーフロー判定 R6=2 'R6=512-2 R6=R6<<8 R6-=2 R1=0 @BACK0 GOSUB @WAIT2526 R1+=1 R1&R4 IF !0 GOTO @END R5=[R3]L R5-0 IF !0 GOTO @BACK0 R4=R4>>(18-15) 'オーバーフロー判定変更 R0=0 '配列書き込み位置 @LOOP R1=0 @BACK1 GOSUB @WAIT2526 R1+=1 R1&R4 IF !0 GOTO @END R5=[R3]L R5-0 IF 0 GOTO @BACK1 [R2+R0]=R1 R0+=1 ' 1byteずつ R1=0 @BACK2 GOSUB @WAIT2526 R1=R1+1 R1&R4 IF !0 GOTO @END R5=[R3+0]L R5-0 IF !0 GOTO @BACK2 [R2+R0]=R1 R0+=1 ' 1byteずつ R0-R6 IF !0 GOTO @LOOP @END R1=0 [R2+R0]=R1 R0+=1 CPSIE ' 割り込み許可 POP {PC,R4,R5,R6} @WAIT2526 R5=156 ' 1cycle '(48000/38*2=2526 - overhead 14cycle - 6) / 4 = 626 (=156*4) R5=R5<<2 R5-=1 ' 1 cycle IF !0 GOTO -1 ' 分岐するとき3cycle しないとき1 - 4*loop-2 RET ' 3cycle @SEND R3=#50 ' OUT1 の address PIO1_0 R3=R3<<8 R3+=1 R3=R3<<16 R3+=`00000100 'PIO1_0 R4=1 'PIOオン用 R6=0 'PIOオフ用 'R2 データが格納されたアドレス 'R0 == 0 @ON R1=[R2+R0] R1=R1<<1 ' 2倍する R1-0 IF 0 GOTO @END @ON_LOOP [R3]L=R4 GOSUB @WAIT631 [R3]L=R6 GOSUB @WAIT631 R1-=1 IF !0 GOTO @ON_LOOP R0+=1 @OFF R1=[R2+R0] R1=R1<<1 ' 2倍する R1-0 IF 0 GOTO @END @OFF_LOOP NOP NOP GOSUB @WAIT631 NOP NOP GOSUB @WAIT631 R1-=1 IF !0 GOTO @OFF_LOOP R0+=1 GOTO @ON @WAIT631 'use R5 R5=154 ' 1cycle '(48000/38/2=631 - overhead 5cycle (+10/2) - 5) / 4 = 154 R5-=1 ' 1 cycle IF !0 GOTO -1 ' 分岐するとき3cycle しないとき1 - 4*loop-2 = 618 RET ' 3cycle

受信:ONになっている時間、OFFになっている時間を交互に数えて、メモリに書き出す
送信:メモリを読み、38kHzで点滅するONとただ待つだけのOFFを長さ分だけ繰り返す
(参考、はじめてのマシン語 - IchigoJamではじめるArmマシン語その1

まとめ
プログラミング、言語はいろいろ違っても基本はシンプルです。
大人も子供も学生も、まずは楽しく改造して、ひとつひとつやれること増やしていきましょう!


PCで動く、IchigoJam ap を使って、楽しんでくれたドランクドラゴンのみなさん!


jigインターン、プログラミングできる学生向け、超高速IchigoJam入門&プログラミング大喜利まで1時間!はーどによる「jig.jpオンラインインターン2020 6日目!」に作品あり! アニメーション、音楽、ゲーム、サクッとその場で作れて好評でした!はんだづけもぜひチャレンジしてね!

教え方、または、ゆっくり復習したい方は、こちらの動画をどうぞ!

総合2コマから始める鯖江の小学校プログラミング! 総合的な学習の時間、IT遊具、クラブ活動、地域ICTクラブ、高度IT人材へのベストプラクティススライドPDF

かわくだりゲーム、Hana道場での改造例。

links
- IchigoJamを赤外線リモコンで簡単遠隔操作!スマートホーム実現に向けて、信号の解読にも挑戦しよう!

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