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

特別支援学校は日本教育変革の救世主!? KidsVenture in 沖縄、教員&こどもプログラミングワークショップとIoT

2018/02/10 23:55:00
#IchigoJam #KidsIT #IoT #okinawa 

沖縄県西原町にある、県立森川特別支援学校にて、教員の方と支援学校に通う子供たち向けイベント開催!

2時間半の長時間ワークショップ後で、この笑顔!すごい集中力と吸収力でした。


平成豪雪直後の福井を発ち、沖縄へ。


会場、沖縄県立森川特別支援学校


桜、咲いてました。

午前中、まずは教員の方向け。

野口先生よりご挨拶。


こちら講演資料「なぜプログラミングを教えるのか?」です。
目を輝かせる子供たちが創るであろう未来へのワクワク感がたまりません。


1996年に経団連から「創造的な人材の育成に向けて」で時代遅れと指摘されている日本の教育。 2020年から小学校でのプログラミング教育が盛り込むことが決定し、一歩前進。
ただ、香港の公立小学校では子供のイノベーションを教員が支援する形が実現しているらしく、負けてはいられないところです。(コンピューターが人間に勝つ時代の教育とは? 答えは超受験戦争地・香港にある | BUSINESS INSIDER JAPAN


集まっていただいた30人もの先生、続いてプログラミング実践、ワークショップ。
真剣、かつ、楽しそう!(講師、松田さんブログ!)


LEDを2回点滅をさせるプログラムをつくってみましょう!
気は利かないけど、言ったことは正確に実行するコンピューター。
思った通り動くのではなく、言った通りに動くことを、体験。体験に勝る学習なし。


順を追って進めて、かわくだりゲームづくり。
音楽の時間でも、まずはなぞって演奏するように、プログラミングもまずはなぞってみましょう。
プログラミングは「書く」ではなく「組む」なのは、上から順番に書いていくとは限らないから。
どのように組むかは創り手次第。
奥深い創造の楽しさを、とっても手軽に味わえるのがプログラミングの醍醐味です。

ワークショップ後のふりかえり。
野口先生より質問「特別支援の子供たちがプログラミングができるようになったら採用ありうるか?」
もちろん答はYESです。
ソフトウェアエンジニアの世界は実力主義。 新卒採用案内にあるようにjig.jpも学歴、年齢は不問です。 プログラミングが好きで、会社の夢を共有できる人、大歓迎です。


午後はいよいよこども向けワークショップ!
「点滅のしくみ」を紹介するPCN代表、松田さん。沖縄でカットしたヘアスタイルがダンブン風!
さまざまな「しくみ」がコンピューターによるソフトウェア化される現代、プログラミングを知らずに社会の仕組みを理解することはできない。


小学3年生も真剣!


サポートにきてくれた、jigインターンOG、沖縄高専の学生、みずきち(@shimamiz)


自分なりの改造が楽しい「かわくだりゲーム」
教員の部では見つからなかった、画面端にいくと死なない裏技、子供ワークショップではみんな即見つけちゃうのがおもしろい。


速度調整で、WAIT3.5といれて、小数が使えないことを知った小学3年生。


BEEPとRNDコマンドの組み合わせ、宇宙感あるランダムBGMを追加しちゃう小学3年生!
IchigoJamのコマンドはわずか100程度。いろいろ触って、組み合わせて、プログラミングの楽しさ味わって!
IchigoJam BASIC リファレンス ver 1.2」「IchigoJamプリント
気の合う誰かと一緒に取り組んでみたり、気の向くままにつくりまくってみたり、自分なりの楽しみ方を探ってみること自体もまた、楽しんで!

学校の本質は、学び方を学ぶこと。
世界のルールが一変した、web前とweb後。
webは、子供でも大人でも、世界中等しく使える最強の学習ツールです。

とはいえ、知識なくwebと触れても使いこなせず、テレビと同様流されるがまま。
コンピューターの集合であるwebの理解の第一歩は、シンプルなコンピューターとプログラミング。
自ら学び、思い通りに操れるようになっていく楽しさとコツを見につけたら、webデビュー。
広大なネットを味方に、思う存分好きな世界での価値創造を楽しみましょう。

生徒一人ひとりと向き合う特別支援学校こそ、日本の教育変革の救世主かもしれません。
子供たちの集中力、吸収力、そして熱心な先生達との貴重な体験の機会に感謝です。

2.24、こどもプログラミングと日本の未来がテーマの「こどもプログラミングサミット」では、参加者全員ディスカッション。 関心ある方、ぜひご参加ください!

IoT電光掲示板のつくりかた

あらゆるモノがネットにつながるのがあたりまえのIoT社会はもう目前。
IchigoJamを使えば、子供でも簡単にロボットづくり、IoTづくりができちゃいます。

こちら即席IoT電光掲示板、スマホで表示する文字列をリアルタイムに切り替えしました。
sakura.ioのWAKE_OUT端子をIN1にさし、IF IN(1) ならI2CRで読み込んで、表示!(75行)

1 'WS2812b x sakura.io 5 OUT4,1 10 POKE#700,240,181,114,182,9,36,36,2,9,25,1,36,164,70,27,76,11,120,91,9,0,240,31,248,11,120,155,8,7,34,19,64,0,240,25,248,11,120,3,34,19,64,91,0,0,240,19,248,97,68,1,48,31,34,16,66,234,209,66,9 20 POKE#73C,8,42,8,208,31,49,1,35,93,66,172,70,26,66,225,209,2,49,156,70,222,231,98,182,240,189,128,37,155,0,255,34,34,96,3,39,9,38,43,66,1,208,9,39,3,38,1,63,253,209,0,34,34,96,1,62,253,209,109,8 30 POKE#778,239,209,112,71,4,0,1,80 50 CLS:S=#825:L=7:P=0:C=RND(256) 60 A=ASC(S+P/8):FORI=0TO7:N=PEEK(A*8+I):POKE#900+31+I*32,N>>(7-P&7)&1*C:NEXT 70 U=USR(#700,0):SCROLL LEFT:P=P+1:P=P%(L*8):IF !P C=RND(256) 75 IF IN(1) LET[0],48,48:?I2CR(79,#800,3,#820,22):GOTO50 80 GOTO 60

5行でsakura.ioのWAKE_INを使って起動
10-30行はWS2812B 32x8用ドライバ(Armマシン語 = IchigoJamのコンピューターが分かる言葉)
50行でI2CRで読み込むアドレス#825、長さは今回はIchigoJamのキャラコードで6文字まで対応 60行でキャラクターのドットパターンを画面右端に大きく表示
70行でWS2812Bへ信号を送って、左にひとつスクロール。最後までいったら色を変更して最初から
75行、sakura.ioのWAKE_OUTを使ってデータ受信を検知した、データを読み込み、50行へ!


午後に並行開催された、さくらインターネットのエンジニアさんによる、micro:bitを使ったプログラミング&コンピューター体験も好評でした。


プログラミングと電子工作をこどもたちに伝え、起業家発掘を目指す、KidsVenture


次回をお楽しみに!

沖縄グルメ

森川特別支援学校の教頭先生が差し入れてくれたご当地あんまん「のまんじゅう」。「のし」の「の」!


名前も味もお気に入り、エバのからあげ。(大安丸 久茂地店


本場ゴーヤチャンプルー、うまい!(大安丸 久茂地店


煮魚おいしい!(大安丸 久茂地店


変わった貝、コマ貝。爪を引っ張るとでてきて食べやすい。(大安丸 久茂地店


ソーキそば!


沖縄混ぜご飯、ジューシー 160円。(那覇空港、1F入って左の一番奥、空港食堂

links
- KidsVenture
- 沖縄県立森川特別支援学校
- 創造的な人材の育成に向けて~求められる教育改革と企業の行動~
- プログラミング教育は 特別支援学校 に取り入れるのがおすすめ!KidsVenture in 沖縄でふれた超熱心な先生方と超ユニークなこども達! – about yrm
- こどもプログラミングサミット 2018.2.24 東京にて第3回開催!

IchigoJamからのステップアップ - IchigoJam BASIC / Python3 / JavaScript / Java / C言語 対照表

2018/02/09 23:55:00
#IchigoJam #KidsIT 

よく使われている言語だけでも10以上ある、プログラミング言語ですが、根っこはマシン語。 コンピューターのお作法が分かっていれば、それぞれの違いは方言程度の違いでしかありません。

もちろん、各言語で登場する単語がちょっとずつ違いますが、最初は辞書(リファレンス)に頼ったり、自動翻訳機(変換ソフト)に頼ったりすればOK。 多少時間はかかりますが、たくさんしゃべっている内にすらすらと作れるようになっていきます。

IchigoJam BASIC、Python3、JavaScript、Java、C言語のそれぞれ機能の対照表を作ってみました。 打つ文字数が圧倒的に少ないIchigoJam BASICで、基本(basic)を押さえてしまえば、他言語の習得はサクサク進みます。

1970〜80年代、BASIC言語と共に、世界中の一部の子供たちの間でパソコンが流行。多くのエンジニアや、起業家を生みました。 Windowsとゲーム専用機と共に失われたBASICによるプログラミングはじめのいっぽ文化を、IchigoJamと共に再び!
2018 Developer Skills Report by HackerRank

IchigoJam BASIC Python3 JavaScript Java C
はじめのいっぽ LED1 print("Hello World!") alert("Hello World!"); class A { public static void main(String[] args) { System.out.println("Hello World!"); } } #include "stdio.h" int main() { printf("Hello World\n"); return 0; }
キー押下数
(はじめのいっぽ)
5 22 23 95 72
表示 ?"ABC" print("ABC") console.log("ABC"); System.out.println("ABC"); printf("ABC\n");
変数代入 A=10 a = 10 var a = 10; int a = 10; int a = 10;
計算 S=A*10/B s = a * 10 / b var s = a * 10 / b; int s = a * 10 / b; int s = a * 10 / b;
条件分岐 IF A=10 ?"T" if a == 10: print("T") if (a == 10) console.log("T"); if (a == 10) System.out.println("T"); if (a == 10) printf("T\n");
繰り返し
(ループ)
10 FOR I=0 TO 9 20 ?I:NEXT for i in range(10): print(i) for (var i = 0; i < 10; i++) console.log(i); for (int i = 0; i < 10; i++) System.out.println(i); for (int i = 0; i < 10; i++) printf("%d\n", i);
論理式 A=1 AND B=2 (A=1 && B=2 でもOK) a == 1 and b == 2 a == 1 && b == 2 a == 1 && b == 2 a == 1 && b == 2
ビット演算 A>>4&7 (a >> 4) & 7 (a >> 4) & 7 (a >> 4) & 7 (a >> 4) & 7
16進数 #FFF 0xFFF 0xFFF 0xFFF 0xFFF
2進数 `11010001 0b1101001 0b1101001 0b1101001 0b1101001
サブルーチン
(関数)
(メソッド)
10 ?"SUB":RETURN GOSUB 10 (@SUBなどのラベル対応) def sub(): print("SUB") sub() var sub = function() { console.log("SUB"); }; sub(); // 何かclass内で static void sub() { System.out.println("SUB"); } // 何かメソッド内で sub(); void sub() { printf("SUB\n"); } // 何か関数内で sub();
コメント ' COMMENT REM COMMENT # COMMENT """ COMMENT複数行 """ // COMMENT /* COMMENT複数行 */ // COMMENT /* COMMENT複数行 */ /* COMMENT複数行 */
文字列処理
(左3文字)
(右3文字)
10 S="ABCDE" 20 ?STR$(S,3) 30 ?STR$(S+LEN(S)-3) s = "ABCDE" print(s[0:2]) print(s[-3:]) var s = "ABCDE"; console.log(s.substring(0, 3)); console.log(s.substring(s.length - 3)); String s = "ABCDE"; System.out.println(s.substring(0, 3)); System.out.println(s.substring(s.length() - 3)); const char s[] = "ABCDE"; for (int i = 0; i < 3; i++) putchar(s[i]); putchar('\n'); for (int i = strlen(s) - 3; i < strlen(s); i++) putchar(s[i]); putchar('\n');
配列 10 LET[0],5,3,1 20 N=0 30 FOR I=0 TO 2 40 N=N+[I]:NEXT 50 ?N a = [ 5, 3, 1 ] n = 0 for m in a: n += m print(n) var a = [ 5, 3, 1 ]; var n = 0; for (var m in a) { n += a[m]; } alert(n); int a[] = [ 5, 3, 1 ]; int n = 0; for (int m : a) { n += a[m]; } System.out.println(n); int a[] = { 5, 3, 1 }; int n = 0; for (int i = 0; i < 3; i++) { n += a[i]; } printf("%d\n", n);
特徴 シンプル、格安、省エネ
大規模開発に向かない
インデント大事
ライブラリ豊富
ブラウザだけで作れる
PCもスマホもOK!
なかなか高速
Androidアプリの標準言語
サーバー上でもよく使われる
基本的に最速
マシン語に近い
IchigoJam BASICの開発言語

画像版

どの言語から始めるか?パソコンを持っているなら、作りたいモノが作れる言語を選びましょう。
習得難易度の多少の差は、作りたいモチベーションとできた喜びで消し飛びます。

パソコンを持っていない、プログラミング言語の習得に挫折した人、ひとまず何でもいいからプログラミングをはじめてみたい人、IchigoJamからどうぞ!

links
- IchigoJam

IchigoJamで格安電光掲示板 - 日本語10x10 M+ BITMAP FONTSを8x8にコンバート

2018/02/08 23:55:00
#IchigoJam #opendata #maker 

フリーフォントを使ったコンバート、探しても8x8フルサイズのフリーフォントは見つからず。代わりに10x10のフリービットマップフォント M+ BITMAP FONTS を8x8に変換する形で実現。
機械的な変換なので、フォントの精度はいまいちながら、一応読めました。

M+ BITMAP FONTS のデータをJavaScriptで読めるように変換し、JISコードからフォントパターンを読み出して、IchigoJam BASICのプログラムに変換します。

makejpfont8x8 - IchigoJamで日本語漢字表示
* 8x8のフォントが微妙なのは機械変換だからです!みんなでつくる8x8フォントプロジェクトもいいかも

生成したプログラムは、PCGを使ってフォントパターンを書き込みます。
32x8 WS2812Bを使った電光掲示板にするプログラムはこちら!

'font 100 POKE#700,95,64,239,41,63,83,223,127,34,34,255,34,34,255,34,66,63,161,191,161,161,255,8,201,8,255,137,149,163,193,129,129,0,0,0,0,0,0,0,96,17,253,32,66,66,142,147,31,37,250,32,47,64,68,72,143,32,38 110 POKE#73A,233,49,33,98,162,35,130,64,31,130,66,15,34,223,8,255,18,255,33,63,4,223,39,253,36,255,85,251,35,255,0,0,0,0,0,0,0,96,127,8,255,171,127,1,127,127,16,17,249,37,37,37,68,92,11,124,5,254,4,58 120 POKE#776,70,124,66,66,159,130,130,142,147,95,32,63,64,191,0,127,69,255,8,127,16,25,38,74,18,31,0,28,226,1,1,1,6,56,66,66,159,130,130,130,130,92,0,31,228,8,16,16,16,14,8,8,8,8,8,0,0,8 130 L=22:LRUN1 SAVE1 'main 10 POKE#800,240,181,114,182,9,36,36,2,9,25,1,36,164,70,27,76,11,120,91,9,0,240,31,248,11,120,155,8,7,34,19,64,0,240,25,248,11,120,3,34,19,64,91,0,0,240,19,248,97,68,1,48,31,34,16,66,234,209,66,9 20 POKE#83C,8,42,8,208,31,49,1,35,93,66,172,70,26,66,225,209,2,49,156,70,222,231,98,182,240,189,128,37,155,0,255,34,34,96,3,39,9,38,43,66,1,208,9,39,3,38,1,63,253,209,0,34,34,96,1,62,253,209,109,8 30 POKE#878,239,209,112,71,4,0,1,80 40 CLS:L=22:P=0:C=RND(256) 50 A=224+P/9:FORI=0TO7:N=PEEK(A*8+I):POKE#900+31+I*32,N>>(7-P%9)&1*C:NEXT 60 U=USR(#800,0) 70 SCROLL LEFT:P=P+1:P=P%(L*9):IF !P C=RND(256) 80 GOTO 50 SAVE0 LRUN0

Lが文字の長さ(最大32文字)、8x8描画後1ライン空けるのがポイントです(/9、*9、%9)


IchigoJam web 上でも画面上だけで動かせます。


大雪のため、福井県内物流に混乱あり。残った雪が解けてなだれなどが起きやすいので注意!

数万円でできる格安IoT電光掲示板で、街中でリアルタイムな情報発信できる災害に強いまち!?

IchigoJamに日本語漢字を表示させる方法 powered by 8x8日本語フリーフォント「美咲フォント」

2018/02/07 23:55:00
#IchigoJam #opendata 

電光掲示板警報を表示するには日本語フォントが必要です。
IchigoJamに入っているフォントは英数字とカタカナのみ。

「日本語表示 on IchigoJam!」どうやって実現する!?

ひとつずつドットで描いていくのもありですが、オープンデータを活用してみましょう!
美咲フォントという8x8日本語フォントがフリーフォントとして公開されています。

webのフォームに32文字までの日本語を書いてコンバートすると、IchigoJamのフォント書き換え機能、PCGを使ったプログラムが生成されるプログラムを作りました。

makejpfont - IchigoJamで日本語漢字表示!

VIDEO3やVIDEO5コマンドで大きく表示してSCROLLすれば簡易電光掲示板のできあがり。
ツールやゲームのタイトルに使うのもありですね!
ブラウザで動くIchigoJam、IchigoJam web を使ってすぐに動作を確認できます。(漢字「苺」表示

美咲フォントの歴史
1993年に小型コンピューター「HP 95LX」を日本語化するため「恵梨沙フォントPJ」が発足。
1995年8x8日本語フォント「恵梨沙フォント」パソコン通信、ニフティーサーブ上で公開。
PC-E500系ポケコンで使用するには8x8一杯に詰まったフォントだと読みにくいため、7x7に収めるプロジェクトが美咲氏の発言からスタート。
2002年の公開から様々な改良を経て、2012年にフリーフォント「美咲フォント」として正式公開。


恵梨沙フォント美咲フォントの比較。どちらも読める!芸術的!
8x8一杯に詰まっているのが恵梨沙フォント(ELISA) - 隙間を空けると読みやすい。
7x7に収まっているのが恵梨沙フォント(MISAKI) - 並べても読みやすいけど、12.5%縮小されるため、漢字が潰れて少し読みづらい。

電光掲示板の場合、隙間を1ドットや2ドット自由に空けられるので、恵梨沙フォントのような8x8一杯のフォントが便利です。
(現状、恵梨沙フォントは個人利用のみ利用可能ということで、ここでコンバーター提供、再配布はできません。)


IchigoJamフォントの英数カナは、7x7に収まるように作ってあるので、美咲フォントとの相性良しです。
いろいろご活用ください!

links
- makejpfont - IchigoJamで日本語漢字表示!
- 8×8 ドット日本語フォント「美咲フォント」
- IchigoJamの画面からダイレクトであやつる、256色カラー32x8電光掲示板!Armマシン語ジグザグドライバ for WS2812B

続く福井の大雪警報、オープンデータ消火栓探しと警報取得Python3プログラム with SPARQL API

2018/02/06 23:55:00
#SPARQL #python #opendata 

消火栓がすっぽり埋まってしまうほどの大雪に見舞われた福井県。
大雪警報は継続中です。
大雪に伴う市民生活情報 – めがねのまちさばえ 鯖江市


左:完全に埋まった消火栓、右:消火栓救出成功!

火事から守る命綱、消火栓も合わせて除雪しておきましょう。

消火栓を探す - findhydrant
金沢では金属探知機で消火栓を探していたそうですが、緯度経度データ付きの消火栓オープンデータで市民の力で防災対策が可能です。 odp / オープンデータプラットフォームの消火栓テンプレートで登録すれば、すぐにこのアプリに反映されます!
金属探知機で消火栓探し除雪 金沢市消防局 | NHKニュース

警報チェックにオープンデータを活用します。
気象庁による配信されているオープンデータが、AITCによってSPARQL APIで取得できるようになっていました。
先端IT活用推進コンソーシアム - 公開API

福井県の警報・注意報のデータがあるURLを取得するSPARQLクエリーがこちら

select * { <urn:uuid:f57b5866-0c8c-3c92-9aff-10a715cdf48b> atom:entry ?o. ?o atom:updated ?updated. ?o atom:content ?content. ?o atom:link ?link. ?o atom:title ?title. FILTER(REGEX(?content, "福井")) FILTER(REGEX(?title, "気象特別警報・警報・注意報")) } order by desc(?updated) limit 1

これを使って、市町村毎の警報、注意報を取得するPython3のプログラムを作ってみました。

import urllib.request import urllib.parse import xml.etree.ElementTree as ET import dateutil.parser import sys if len(sys.argv) == 1: print("getalerm.py [pref] [city]") print("ex) python3 getalerm.py 福井 鯖江市") print() pref="福井" city="鯖江市" else: pref=sys.argv[1] city=sys.argv[2] query = ( 'PREFIX atom: <http://www.w3.org/2005/Atom#>\n' 'select * {\n' ' <urn:uuid:f57b5866-0c8c-3c92-9aff-10a715cdf48b> atom:entry ?o.\n' ' ?o atom:updated ?updated.\n' ' ?o atom:content ?content.\n' ' ?o atom:link ?link.\n' ' ?o atom:title ?title.\n' ' FILTER(REGEX(?content, "' + pref + '"))\n' ' FILTER(REGEX(?title, "気象特別警報・警報・注意報"))\n' '} order by desc(?updated) limit 1\n' ) print(query) url = "http://api.aitc.jp/ds/sparql?query=" + urllib.parse.quote(query) + "&output=xml" #print(url) resfn, headers = urllib.request.urlretrieve(url) #resfn = "/var/folders/0p/8n831_gn5j97jrlqmh5ddggc2s2n0c/T/tmpaqzg7_ib" print("sparql result file: " + resfn) tree = ET.parse(resfn) root = tree.getroot() xmlurl = tree.find(".//{http://www.w3.org/2005/sparql-results#}binding[@name='link']")[0].text updated = tree.find(".//{http://www.w3.org/2005/sparql-results#}binding[@name='updated']")[0].text supdated = dateutil.parser.parse(updated).astimezone().strftime("%Y/%m/%d %H:%M:%S") # xmlfn = "4848abcd-56a2-3170-8468-4fef8be3d405.xml" xmlfn, headers = urllib.request.urlretrieve(xmlurl) print("xml file: " + xmlfn) print("updated: " + supdated) tree = ET.parse(xmlfn) root = tree.getroot() warn = root.find(".//{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Warning[@type='気象警報・注意報(市町村等)']") for item in warn: area = item.find(".//{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Area") name = area.find(".//{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Name").text # print(name) if name == city: for kind in item: if kind.tag == "{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Kind": alert = kind.find(".//{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Name").text print(alert)

SPARQLクエリーの渡し方、ネームスペース付きXMLのパース、日付の日本時間変更などやってます

備えあれば憂い無し。災害は忘れた頃にやってくる。
痛い目に遭った今こそ、次に向けた手を創っておきましょう!

links
- 気象庁防災情報XMLフォーマット | 技術資料
- 大雪に伴う市民生活情報 – めがねのまちさばえ 鯖江市
- odp / オープンデータプラットフォーム

フルカラーLED、WS2812B 16x16 をあやつるマシン語プログラムのパッチ(差分) on IchigoJam

2018/02/05 23:55:00
#IchigoJam #maker #KidsIT #arm 

32x8マトリクスに続き、16x16マトリクスが到着。
そのままつなぐと、左右の方向が合わずでたらめな表示になる。32x8用プログラムを修正しましょう。

16x16の配線を見ると、こちらも16コが1行毎にジグザグになっているので、32コで折り返すところを16にして、8行ではなく16行にすればOK。 3箇所書き換えます。

R1+=R12 R0+=1 R2=15 ' for 16x16 R0&R2 IF !0 GOTO @LOOP_DATA R2=R0>>4 ' for 16x16 R2-16 ' for 16x16

#700からのマシン語なので、前回のプログラムにこの3箇所POKEコマンドで書き換えれば16x16用ドライバのできあがり!

35 POKE#734,15:POKE#73C,16:POKE#73A,2

画面の左上から16x16の領域にある文字コードを256色の色コードとして表示するプログラムになりました!
こういうプログラムの差分をパッチと呼び、パッチを適応することをパッチを当てると言います。
プログラミングは積み重ね。いかに流用して楽するかを考えましょう。


マシン語を解説する本「機械のコトバ
コンピューターとアルゴリズムをベースとした、プログラミング言語の成り立ちが丁寧に解説されています。

迷路とは何か?移動とは何か?
0と1を記憶したり、反転したりすることしかできないプリミティブなコンピューターをひとつひとつ理論を積み上げていく楽しさは、数学や物理のおもしろさに通じます。

興味を持ったら、ひとまずやってみる!が一番!

接続用のケーブルは、マトリクスLEDについているコネクターを流用して、3ピンのピンヘッダーをはんだづけ&ホットボンドがいい感じでした。

links
- IchigoJamの画面からダイレクトであやつる、256色カラー32x8電光掲示板!Armマシン語ジグザグドライバ for WS2812B
- はじめてのマシン語 - IchigoJamではじめるArmマシン語その1

IchigoJamの画面からダイレクトであやつる、256色カラー32x8電光掲示板!Armマシン語ジグザグドライバ for WS2812B

2018/02/04 23:55:00
#IchigoJam #maker #KidsIT #arm 

配列を使ったフルカラーLEDを制御の関連で発見した32x8の256コ並んだフルカラーLED、3699円!
Amazon.co.jp: Quimat Arduino用RGB LED パネル 5050 SMD WS2812B IC 個別にアドレス可能 256ピクセルLEDライトledスクリーン led壁 広告ボードなど作成QWS03: DIY・工具・ガーデン

配列バージョンだと102コしか制御できないので、1灯を1byte/8bitで表す256色モードを開発。IchigoJamの画面がちょうど32文字なので、上から8行を使った画面そのまま表示が完成!

「さばえ」と読めますか?
キーボードのInsertキーで挿入モードから上書きモードに変更し、お絵かきしてマシン語呼び出すRUNでOK!

こちらが画面そのまま送信WS2812Bドライバです。(128byte)

10 POKE#700,240,181,114,182,9,36,36,2,9,25,1,36,164,70,27,76,11,120,91,9,0,240,31,248,11,120,155,8,7,34,19,64,0,240,25,248,11,120,3,34,19,64,91,0,0,240,19,248,97,68,1,48,31,34,16,66,234,209,66,9 20 POKE#73C,8,42,8,208,31,49,1,35,93,66,172,70,26,66,225,209,2,49,156,70,222,231,98,182,240,189,128,37,155,0,255,34,34,96,3,39,9,38,43,66,1,208,9,39,3,38,1,63,253,209,0,34,34,96,1,62,253,209,109,8 30 POKE#778,239,209,112,71,4,0,1,80 40 U=USR(#700,0)

画面に好きな文字を書いて、8行目から下でRUNで表示されます!
(32x8のWS2812Bはいつものごとく、5V-VCC,DIN-OUT1,GND-GNDで接続)


画面に表示して呼び出すだけなので、ゲームづくりも簡単にいけそうですねっ


256色は、MSXのSCREEN8に習って、G 3bit, R 3bit, B 2bit の計8bitで256色を表します。

POKE#900,`00011100:RUN:'RED POKE#900,`11100000:RUN:'GREEN POKE#900,`00000011:RUN:'BLUE

やってみると一目瞭然。`から始まる8bitの2進数、あれこれいじって試してみましょう。

FOR I=0 TO 255:POKE#900+I,I:NEXT:RUN

256色、全部表示

100 POKE#900+RND(256),RND(256):U=USR(#700,0):CONT GOTO100

ランダム

100 POKE#900+31+32*RND(8),RND(256):U=USR(#700,0):SCROLL LEFT:CONT GOTO100

流星

COPY#F00,#900,#100:SAVE

32x8の画面をプログラム領域末尾に保存

10 CLS:LC0,8:COPY#900,#F00,#100:U=USR(#700,0)

このプログラムと一緒に保存しておくと、ドライバ設定後、32x8の画面を読み出して、WS2812B表示として復元可能!

好きな文字をスクロール表示する、電光掲示板プログラム

50 CLS:S=" IchigoJam":POKES+1,255:P=0:C=RND(256) 60 A=ASC(S+P/8):FORI=0TO7:N=PEEK(A*8+I):POKE#900+31+I*32,N>>(7-P&7)&1*C:NEXT 70 U=USR(#700,0):SCROLL LEFT:P=P+1:P=P%(LEN(S)*8):IF !P C=RND(256) 80 GOTO 60

Armマシン語ドライバ解説と応用
32x8のマトリクス状にならんだWS2812B、配線のしやすさからか、ジグザグに並んでいました。

一番上の行は左から右につながっていて、2行目は折り返して右から左へとつながっている。

色の8bit対応と、ジグザグに対応したドライバのasm15表記のArmマシン語コードがこちら。

' OUT1用 WS2812B 32x8 @OUTを変更でOUT1-4で変更可能、パラメータは0を指定 ' R0 - data count ' R1 - data address #900(VRAM)から1byte 1pixel G3bit,R3bit,B2bit ' R2 - temp OUT value 0/#FF, & 15 ' R3 - data value, temp ' R4 - GPIO address ' R5 - bit count ' R6 - wait count buf ' R7 - wait count ' R12 - increment or decrement address @WS2812B PUSH {LR,R4,R5,R6,R7} CPSID R4=9 R4=R4<<8 R1=R1+R4 R4=1 R12=R4 R4=[@OUT]L @LOOP_DATA R3=[R1] ' G R3=R3>>5 GOSUB @SEND_BYTE R3=[R1] ' R R3=R3>>2 R2=7 R3&=R2 GOSUB @SEND_BYTE R3=[R1] ' B R2=3 R3&=R2 R3=R3<<1 GOSUB @SEND_BYTE R1+=R12 R0+=1 R2=31 R0&R2 IF !0 GOTO @LOOP_DATA R2=R0>>5 R2-8 IF 0 GOTO @END R1+=31 R3=1 R5=-R3 R12=R5 R2&R3 IF !0 GOTO @LOOP_DATA R1+=2 R12=R3 GOTO @LOOP_DATA @END CPSIE POP {PC,R4,R5,R6,R7} @SEND_BYTE R5=#80 R3=R3<<2 ' 数を大きくするともっと明るくなる @LOOP_BIT R2=#FF [R4]L=R2 R7=3 '(3*4+1)=13 <- 16.8+-7.2 R6=9 '(9*4+1)=37 <- 43.2+-7.2 R3&R5 IF 0 GOTO @SKIP R7=9 '(9*4+1)=37 <- 43.2+-7.2 R6=3 '(3*4+1)=13 <- 16.8+-7.2 @SKIP R7-=1 'wait R7*4+1 clock IF !0 GOTO -1 R2=0 [R4]L=R2 R6-=1 'wait R6*4+1 clock IF !0 GOTO -1 R5=R5>>1 IF !0 GOTO @LOOP_BIT RET @OUT DATA L #50010004

R0〜R15まで16コあるレジスタ、R8〜R15は使える命令が5コに制限されます。(Cortex-M0 Armマシン語表より)

Rd=Rm Rd+=Rm Rn-Rm GOTO Rm GOSUB Rm

32コデータを送信する毎に、壊しちゃってOKなR12を使って1足したり1引いたりすることで命令数をできるだけ少なく作っています。
(R8,R9,R10,R11:マシン語から戻るときに元の値にしておけば自由に使ってOK、R12:破壊してOK、R13:スタックレジスタ、R14:リンクレジスタ、R15:プログラムカウンタ)

1Mbit、EEPROMからデータを流し込んで動画にするのも楽しそうですね!
32x8の場合256byteなので、128KBで512枚分、秒間10コマで51.2秒分作成可能。

R2-8 を R2-16 や、R2-24 に変更すれば 32x8 を2つ(32x16)や3つ(32x24)接続した大スクリーンにも対応できます。
フルカラーLED、WS2812B 16x16 をあやつるマシン語プログラムのパッチ(差分) on IchigoJam」(追記)

変数の保存を諦めれば、#800の変数領域から1KB使った32x32送信もいけちゃいます。(R4=9をR4=8に変更)

コンパクトなArmマシン語とお手軽なIchigoJam BASICの使いわけ、楽しいですよ!
はじめてのマシン語 - IchigoJamではじめるARMマシン語その1

こどもIoTハッカソン in 三重!はじめてのプログラミング・電子工作・IoTハンズオン、アイデアソン、ハッカソン、発表までを1日で!

2018/02/03 23:55:00
#IchigoJam #IoT #maker #mie #KidsIT 

8回目となる子供によるIoTものづくりイベント「こどもIoTハッカソン
今回の会場は小4から中2までの5年間過ごした三重県、みえこどもの城

個性的な自分で作った道具を手に、記念撮影!
アイデアグループディスカッション15分、ハッカソン工作&プログラミング時間60分でも個性的な作品群!
プログラミングの基本と応用、センサー、サーボ遊びに時間をしっかりかけたことがよかったかも。


三重県・三重県IoT推進ラボIT人材育成WG主催「家族で楽しむ キッズ・プログラミング」のイベントのひとつ。

実際の進行(10:00〜16:00, 内12:00-13:00お昼休みの計5時間)
1. 15分 IchigoJamをつかって、はじめてのプログラミング体験
2. 30分 LEDとWAITを使ったエルチカゲームづくりと組み込み開発体験
3. 30分 かわくだりゲームづくりでプログラミングのツートップ、GOTO/IF体験
4. 15分 サーボの制御体験
(お昼休み)
5. 30分 FaBoをつかって、はじめての電子工作体験
6. 30分 sakura.ioをつかって、はじめてのIoT体験
7. 15分 アイデアソンでグループディスカッション(テーマ、自分の周りの困り事)
8. 60分 ハッカソン(上記ツールに紙とカラーペン、ストロー、テープなどを加え工作)
9. 30分 発表会
10. 15分 レポートの時間&記念撮影

ハッカソンの様子

キーボードもみるみる使いこなしていく、プログラミング体験。


IchigoJamのプログラム、SAVE0で保存して、テレビ、キーボードを引っこ抜き、ボタン押しながらONで、自動起動。
毎秒5000万回計算するコンピューター、自在にコントロールしちゃおう!


オリジナルなエルチカで組み込み開発成功の瞬間。


アイデアソンシート紹介その1
困りごと、時間がない → ゲームしすぎちゃう → しすぎ防止機能付きゲーム!


アイデアソンシート紹介その2
困りごと、宿題が多い事 → 先生の記憶を抜く!(暗記パンの逆の発想)


ハッカソン、工作タイムスタート!記憶を抜いちゃう装置ができている!


自分で学べる、これ最強と伝授し、資料を見ながら自分でやってみてねと案内。自分で読みながらどんどん作る姿に感動!


いよいよ発表会、たくさんの大人を前にしても自分でつくった世界でたったひとつの道具、堂々発表!


手が届かない窓を拭けちゃう窓拭きロボット。みえこどもの城の人からも欲しいという声!


お母さんからとっても欲しい!と声があがった、温度センサーを使った水道管を破裂させないようにする装置(プロトタイプ)。


みんなの発表会、動画
洗濯のお手伝いに、光センサーで曇りを認識して、sakura.ioでスマホへ通知する作品に、大人から驚きの声。

資料
- IchigoJamプリント

0か1かのにゅうりょく IN(イン)」(PDF)


りょうのにゅうりょく ANA(アナ)」(PDF)

- IchigoJamで簡単IoT、sakura.ioとIchigoJamのつなぎかた・つかいかた
- 秒間5000万回(一応定格は3000万回)のLPC810の使い方「LPC810をあやつろう」(ブログ)

スライド


八丁味噌な鳥焼肉で打ち上げ with PCN三重!鳥羽商船高専の学生スタッフも大活躍!
強力にバックアップしてくれた、サンエル社長、辻橋さん、ありがとうございました!
三重県IoT推進ラボのメンバーでもあり、オープンデータ推進でも連携できるかも!?

links
- 三重県|「家族で楽しむキッズ・プログラミング」を開催します
- こどもIoTハッカソン
- PCN三重
- 鯖江Hana道場

IchigoJamで簡単IoT、sakura.ioとIchigoJamのつなぎかた・つかいかた

2018/02/02 23:55:00
#IchigoJam #IoT #maker #KidsIT 

初期費用約1万円、月額65円で1万回、ネットとの通信を実現するデバイス、sakura.io!(くわしい料金体系
sakura.ioIchigoJamを接続するには、sakura.io通信モジュールの他に、ブレイクアウトボードと、電圧レベル変換モジュール(PCA9306)が必要です。

ちょっとした電子工作をして、組み立て終わったら、ジャンパー5本(ver1.3未満の場合は6本)接続したら、早速IchigoJam BASICでIoTプログラミング!

- データ発信!

LET[0],2593,19457,N,0,0,0,N>>8^N^102:?I2CR(79,#800,13,#820,3)

- データ受信!(Fが1の時受信成功、0は受信キューが空)

LET[0],48,48:?I2CR(79,#800,3,#820,22):F=[16]!=5:N=[18]:?F,N

接続方法と使い方を紹介した、自分で学べる IchigoJamプリント、sakura.io編

sakura.ioでネットにつなごう - IchigoJamプリント」(PDF)
配列を使って、コマンドに必要な文字数の削減に成功!

IchigoJam接続用、ブレイクアウトボードのつくりかた

ブレイクアウトボードPCA9306ジャンパー線(黄、青、緑、赤、黒、白)を準備します。


1. 袋から出して並べます


2. 電圧レベル変換モジュールPCA9306とブレイクアウトボード、ピンヘッダーを2ピンにカットし、SCL/SDAの部分に、ピンの短い方を底にし、はんだづけ


3. PCA9306の2ピンと、白ジャンパー線の片方を曲げて、PCA9306に裏から差し込みはんだづけ。
ブレイクアウトボードのSPI_CSに接続はしないので注意。


4. 白ジャンパー線のもう片方は左側LDO_OUT(1.8V)にはんだづけ。
I2Cの電圧をsakura.ioの1.8VからIchigoJamの3.3Vに変換します。


5. 黒いジャンパー線、裏側をはんだづけ


6. ブレイクアウトボードのできあがり!
通信モジュールをセットして、IchigoJamのCN5に、上から黄、青、緑、赤、黒の順に差し込めばOKです。
早速IoT実験に取り掛かりましょう!

* sakura.io のバージョンが、1.3未満の場合、左側の6番ピンWAKE_INがプルアップされていないと動作しません。
動かない場合は、6番ピンをプルアップ(抵抗通じてVCC接続)か、VCCなどに接続して、ファームウェアを更新しましょう。

sakura.ioファームウェアバージョンアップの方法
LEDが一回点滅になり、ネットに接続されていることを確認してから下記コマンドを実行。

' unlock POKE#800,#A8,4,#53,#6B,#72,#61,#87:?I2CR(79,#800,7,#820,3):?PEEK(#821) ' firmware update POKE#800,#A9,0,#A9:?I2CR(79,#800,3,#820,3):?PEEK(#820),PEEK(#821)

ファームウェアを更新すると、一旦リセットがかかります。
バージョンを確認してみましょう。

POKE#800,#A2,0,#A2:?I2CR(79,#800,3,#820,35):?STR$(#822) v1.3.0-01-170906-4103948c) OK

無事、ver1.3になりました!
WAKE_INの内部プルアップが設定されているので、白ジャンパー線は外してもOKです。
次のバージョンアップで省電力対応!?楽しみですねっ

links
- sakura.io ハンズオン データ発信編
- sakura.io ハンズオン データ受信

CC BYを添えてオープンデータを始めよう!鯖江商工会議所国際化委員会 featuring ジェトロ福井 - クリエティブ・コモンズ・表示の宣言用のオープンデータ画像

2018/02/01 23:55:00
#opendata #sabae 

商工会議所単独としては日本初、オープンデータを始めた鯖江商工会議所の国際化委員会にて情報提供。
AIフレンドリーなオープンデータをいかに広め、いかに活用するかが、次のITへシフトする鍵!

オープンデータ=自由に使えるデータ(営利目的利用、転載、販売、改変など活用自由!)

まずは、いま公開しているデータに CC BY を添えるだけオープンデータ。宣言用の CC BY 画像です。

image of "CC BY"」 (既存の画像を加工、低解像度はCC JAPANにあり

次に狙いたい、活用を促進する5つ星オープンデータ!

5分でわかる5つ星オープンデータとビジネスの可能性 小さいから速い!地方から創る次世代社会」より
PDFよりExcel、ExcelよりCSVやXML、もっとうれしいRDF、共通語彙基盤などで連携がとれるLinked-RDF(LOD)だと最高!


国際化委員会と連携している、ジェトロ福井の所長、西澤さん、ナイジェリアへの転勤決まって壮行会。


外務省のwebによると「レベル2 - 不要不急の渡航は止めてください」
JETROのwebで現在の政治・経済状況が確認できる。日本からの輸出は鉄鋼25%、繊維19%、機械15%。
もしそれぞれがオープンデータなら、利用者に見やすく加工して再転載するサイトが誕生する余地が生まれ、もし5つ星オープンデータならそれが自動化、解析可能になって更に便利になります。

まずは、JETROのトップページの3つの新着情報RSSのライセンスから、オープンデータであると、鯖江商工会議所のように宣言することから始めるのはいかがでしょう?
参考「鯖江商工会議所オープンデータをはじめました | 鯖江商工会議所

"さばえ商工ブログ" - http://sabae.cc/i/ - 鯖江商工会議所オープンデータ活用アプリ
オープンデータ化されていれば、アプリ化、AI解析によるサービス開発も安心して開発可能になります。
官も民も、死蔵されつつあるデータは、オープンデータにして活用へ!

経団連は1996年から学校教育に関して異を唱えていました。無限な可能性を持った子供、地域の力でサポートし、いかに早くwebを開放してあげられるか。 地域の産業も、行政データも、すべて子供の遊具としてどーんと提供しちゃいましょう!


ジェトロ中川さん、遠路東京からありがとうございました!

links
- Creative Commons — 表示 4.0 国際 — CC BY 4.0
- オープンデータ Q&A(会津若松市職員向け)
- IT 新戦略の策定に向けた基本方針 平成29年12月22日IT総合戦略本部

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