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

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

2018/02/04
#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
#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
#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 ハンズオン データ受信

FFF?40F?16進数3桁で色を決めよう、WS2812BのIchigoJam用マシン語ドライバで電光掲示!

2018/01/31
#ws2812b #IchigoJam #KidsIT #maker 

光るカセットテープで子供にも大人にも人気なWS2812Bを使った光る電子工作 x IchigoJam シリーズ。
8x8の64コ並べたWS2812Bを自在に操れるWS2812BドライバのType3を開発!

自分で並べて作ってもokですし(5x5の作り方)、600円くらいで8x8のマトリクス状のものが手に入ります(例、送料込み$5.78)。

IchigoJam BASICで16進数を表記する記号 # を使って、3文字、3桁でRGB(赤、緑、青)の強さを16段階で指定し、USRのパラメータで送信個数を指定。

最初のLEDを赤く光らせるサンプルコード
(WS2812BとIchigoJam 5V-VCC, DIN-OUT1, GND-GND と3本接続)

10 POKE#700,240,181,114,182,8,36,36,2,9,25,18,76,11,120,27,9,0,240,14,248,11,136,27,10,0,240,10,248,11,120,15,34,19,64,0,240,5,248,2,49,1,56,239,209,98,182,240,189,128,37,255,34,34,96,3,39,9,38,43,66 20 POKE#73C,1,208,9,39,3,38,1,63,253,209,0,34,34,96,1,62,253,209,109,8,239,209,112,71,4,0,1,80 RUN [0]=#F00:U=USR(#700,1)

最初から3つを赤、緑、青で光らせる

LET[0],#F00,#0F0,#00F:U=USR(#700,3)

弱く最初から3つを赤、緑、青で光らせる

LET[0],#300,#030,#003:U=USR(#700,3)

64コ(8x8)の内、どこか1つを白く光らせる

[RND(64)]=#FFF:U=USR(#700,64)

プログラムでキラキラさせよう!

30 CLV:[RND(64)]=RND(#1000) 40 U=USR(#700,64) 50 GOTO 30 RUN

ゆっくりキラキラ

45 WAIT 30 RUN

赤くキラキラ 30 CLV:[RND(64)]=#F00

キラキラを4つに増やす

30 CLV:FORI=1TO4:[RND(64)]=RND(#1000):NEXT

全体をいろんな色に!(RND(#1000)とすると明るすぎるので、0〜3までの4段階)

30 FORI=0TO63:[I]=RND(4)<<8+RND(4)<<4+RND(4):NEXT


文字を表示(色:#024)

30 C=RND(256) 35 FORI=0TO7:P=PEEK(C*8+I):FORJ=0TO7:[I*8+J]=P>>(7-J)&1*#024:NEXT:NEXT

アルファベットだけを表示

30 C=ASC("A")+RND(26)

IchigoJamと表示

30 S="IchigoJam ":C=ASC(S+N):N=(N+1)%LEN(S)

表示するたびに色を変える

35 FORI=0TO7:P=PEEK(C*8+I):FORJ=0TO7:[I*8+J]=P>>(7-J)&1*L:NEXT:NEXT 36 IF N=0 L=RND(4)<<8+RND(4)<<4+RND(4)

信号出力先を変更する方法(下記のいずれかを追加)

'for OUT2 25 POKE#754,8 'for OUT3 25 POKE#754,16 'for OUT4 25 POKE#754,32 'for SOUND 25 POKE#754,16,0,0,80,2,73,8,104,4,34,16,67,8,96,112,71,0,128,0,80:U=USR(#758,0)

数値が88コ並ぶ、マシン語コードが気になる人へ
WS2812Bを操るマシン語プログラムの元、asm15でアセンブリ言語で作ったプログラムの紹介です。(マシン語入門
asm15表記のArmマシン語コードはちょっと長くなって88byte(前回は64byte)

' OUT1用 WS2812B @OUTを変更でOUT1-4で変更可能 ' R0 - data count - 最大102 ' R1 - data address (RGB1,RGB2,....) #800からひとつずつ、1つRGB 4bit ' R2 - temp OUT value 0/#FF, & 15 ' R3 - data value ' R4 - GPIO address ' R5 - bit count ' R6 - wait count buf ' R7 - wait count @WS2812B PUSH {LR,R4,R5,R6,R7} CPSID R4=8 R4=R4<<8 R1=R1+R4 R4=[@OUT]L @LOOP_DATA R3=[R1] ' G R3=R3>>4 GOSUB @SEND_BYTE R3=[R1]W ' R R3=R3>>8 GOSUB @SEND_BYTE R3=[R1] ' B R2=15 R3&=R2 GOSUB @SEND_BYTE R1+=2 R0-=1 '+6clock IF !0 GOTO @LOOP_DATA CPSIE POP {PC,R4,R5,R6,R7} @SEND_BYTE R5=#80 ' R3=R3<<1 ' if you want get x2 bright or more @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

配列(#800)だと102コまでですが、画面VRAM(#900)は768byteあるので、最大384コ分の信号を送れるので制御できるようになります。(上記マシン語コード R4=8 を R4=9 に変更、26 POKE#704,9 で上書きするとok)

16x16の256コのWS2812Bフルカラーマトリクスで何創る?
Amazon.co.jp: Kuman Arduino用RGB LED フレキシブル WS2812B 5050 個別アドレス可能 レインボー マトリックス ビデオボード 256画素 SMD ディスプレイ スクリーン LCD パネル WS02(16*16 LED): ホーム&キッチン
日本のAmazonで、4,800円!

links
- 広がるプログラミングと電子工作、こども、おじいちゃん、校長、そして、ギャル!見事にちょうどいいカセットテープ x IchigoJam
- 5つ星、官民連携、こども力で活かそう、オープンデータ!新潟経済同友会と新発田市から、ご来鯖!+WS2812B新ドライバ

分解してグルーガンで再構築するジャンクアートは大人もOK - バラバラにして作って遊ぼう!ジャンクREメイクショップ - Hana道場 x ハードオフ

2018/01/21
#KidsIT #hanadojo #sabae #maker 

ハードオフさんとの縁企画第一弾、Hana道場で分解ワークショップ!
バラバラにして作って遊ぼう!ジャンクREメイクショップ - Hana道場 x ハードオフ

こちら参加してくれた子供たちの作品群!


古めのラジカセと電卓を再構成したかわいいロボ!


電脳めがね!


本物のPSPを再構成したオリジナル合体ロボ!


デジカメのディスプレイをコントローラーに合体させたモバイルゲーム機!


プレステ本体をコントローラー化!


ものづくりの基本は、分解。
つくりたいものを、分解して考え、それぞれを作り、組み立てる。
逆の手順を辿ってみるのは、ものづくりを楽しく学ぶ良い手段。


分解、ケガには注意。自分の身と周りの安全を守ろう!
小さい子供にはネジが固すぎることもあるので、親子ワークショップがオススメ。


どれを分解しようかな


分解スタート!


ゲーム機も人気!PSP分解中(後にロボになった)


意外とオススメ、デジカメの分解。狭いところにパズルのように収まるいろんな部品。
フラッシュ部分など、高電圧部分は注意してあげよう。


苦労して分解したビデオカメラ、お宝、きれいなレンズ部分をゲットできた達成感!


配色がレトロかっこいい、東芝製の古い電卓の中身。大人も子供も楽しめる。


バラバラ〜となって楽しいパソコンのキーボード。オリジナル名前プレートもステキでした。


AIWA製、ラジカセの中身、見慣れた大きめ部品とメカが渋い!
アンプを現代のものに置き換えちゃう改造の元に良さそう。


分解、いつの間にか大人も夢中。


参加、ありがとうございました!


グルーガン(ホットボンド)と目玉シールで、大人でも気軽にかわいいジャンクアートができますよ!
分解してでてきたLEDやスピーカー、ボタンなどのボタンは、こどもパソコンIchigoJamから再利用も可能。
いろんな技を覚えるほどに、どんどん分解は楽しくなりますよっ。


Hana道場での分解ワークショップ、好評に付き、また開催します!
講師やってみたい大人向けのワークショップもありかも?

links
- HARD OFF × Hana道場 ジャンク品REメイクショップ開催 | 親切丁寧な買取、リサイクルショップならハードオフグループ
- HARD OFF × Hana道場 ジャンクREメイクショップを開催 | エル・コミュニティ

Live of NHK WORLD 'NEWSROOM TOKYO' 大安禅寺の生出演で話した鯖江モデル(日本語対訳)

2018/01/19
#sabae #opendata #maker #movie #doc #english 

NHK WORLD "NEWSROOM TOKYO" 生中継 from 大安禅寺!

福井、鯖江の紹介コーナーの後、ITのまち鯖江について英語インタビュー。


外には大きな中継車!


too funkyで、幻となった鯖江メガネ neoplug、IchigoJam x OLED エディション


番組内にはneoplug開発のBOSTON CLUB 小松原社長と共に登場!


ありがとうございました!中山さんカティーキャットさん(@DoitCosplaygirl)と!

世界中に放送された NHK WORLD NEWSROOM、NHK WORLDで録画も見られます。
Fukui: craftsmanship and beyond - NEWSROOM TOKYO - TV - NHK WORLD - English

Q: Why has Sabae been so successful in embracing new technology? What’s the key to its success?
なぜ鯖江市は新しい技術の取り組みがうまくいっている?

First of all, it is the mayor's decision to turn Sabae into an open-data city.
第一に市長の判断が鯖江をオープンデータシティに変えました。
Sabae is the first city in Japan to have done this.
鯖江市は日本初のオープンデータシティ。
And it's important to emphasize that citizens backed up this decision.
そして市民がそれをバックアップをしていることが重要です。
The city has many CEOs. People in Sabae are eager to revive their community.
鯖江市には社長がたくさん。鯖江の人々はまちの活性化にとても熱心です。
The number of shops is falling. Young people are moving elsewhere to find better jobs. Most of them don't return.
お店が減り、若い人は職を求めてよそへ行ってしまって戻ってこない。
Residents want to stop this.
市民はそんな流れを断ち切ろうとしています。
A citizens group started classes to make children and adults more familiar with programming.
市民の力で子供とシニア向けのプログラミング教室が始まりました。
And this spring, the city will launch programming clubs in all 15 elementary and junior high schools.
そしてこの春、鯖江市は市内のすべての小中学校15校でのプログラミングクラブ活動スタートさせます。
We believe all this could lead to the development of new apps using open-data.
これらすべてがオープンデータを使った新しいアプリケーションの実現へとつながります。

Q: What's the goal of the Sabae city?
鯖江市のゴールは?

Sabae is trying to create a model that will make everything revolve around information technology.
ITを活用し、すべてを進化させる鯖江モデルを創ろうとしています。
Our goal is to involve all residents and all local businesses in the management of their city.
私達のゴールはすべての市民、すべての地域企業が市の運営に関わることです。(市民主役)
...and to inject technology into traditional craftsmanship to revive local industry.
伝統的な産業にもITを融合させ地域経済の活性化を実現します。
70-thousand people live in our city, which is a good size to innovate.
鯖江市の人口は約7万人、イノベーションにちょうどいいサイズです。
People communicate with each other... no matter what their job is.
業種業界に関係なく、みんなで話し合えます。
With IT, every single citizen should be able to develop new ideas to improve the community and participate in decision-making.
ITを使えば、すべての市民がまちの意思決定、まちをよくするアイデアづくりに参加できます。
And eventually, this will lead the city to grow.
全員参加こそ、まちを成長させる最終型です。
Also, we hope to attract investment from Japan and abroad... and encourage people to live in Sabae.
国内はもちろん海外からの進出、移住も大歓迎です!

links
- Fukui: craftsmanship and beyond - NEWSROOM TOKYO - TV - NHK WORLD - English
- NEWSROOM TOKYO - TV - NHK WORLD - English
- 普通の眼鏡をスマートグラス化、スライド式着脱機構「neoplug」。鯖江ブランドを世界規格へ - Engadget 日本版
- データシティ鯖江ポータルサイト | Data City Sabae

Sabae will appear in the live of NHK WORLD TV broadcasting 'NEWSROOM TOKYO'

2018/01/18
#sabae #IchigoJam #maker #neoplug #english 

On Friday 19th, I'll appear in the live of NHK WORLD TV broadcasting(NHK国際放送) in "NEWSROOM TOKYO" program with neoplug "glasses for wearable". [20:00 - 20:45 (JST)]

IchigoJam x OLED x neoplug!


IchigoJam demo / see IchigoJam x OLED - IchigoJam BASIC & Arm Assembly Language.

1 GSB@INIT:GSB@LINIT:CLT 2 GSB@CLS:S="IchigoJam":FORI=0TOLEN(S)-1:X=3:Y=12-I:GSB@LC:C=ASC(S+I):GSB@LPUTC:NEXT 3 VIDEO0 20 X=RND(8):Y=RND(16):GSB@LC 22 IF TICK()>60*15 CLT:GOTO2 25 IF !(X<2 OR X>4 OR Y<3 OR Y>13) GOTO20 30 C=229+RND(27):C=RND(2)*C:GSB@LPUTC 40 GOTO20 100 @INIT:POKE#700,0,141,20,32,0,175:?I2CW(60,#700,6):RTN 110 @LC:POKE#700,0,33,Y*8,127,34,7-X,7:?I2CW(60,#700,7):RTN 120 @PUTC:COPY#700,C*8,8:?I2CW(60,#40,#700,8):RTN 130 @CLS:X=7:Y=0:GSB@LC:C=0:FORI=0TO127:GSB@PUTC:NEXT:RTN 150 @LPUTC:?USR(#800,C):?I2CW(60,64,#700,8):RTN 155 @LINIT:LET[0],#B5F0,#2307,#021B,#18C9,#2308,#4358,#1812,#2500,#2701,#2600,#2407,#2000,#5D93,#40EB,#403B,#40A3,#18C0,#3C01,#3601,#2E08,#D1F6,#5548,#3501,#2D08,#D1EF,#BDF0:RTN

We're judging programs of PCN Kid's Programming Contest 2017 Winter at SAMMIE'S in Fukui prefecture.
Thank you kids to send us many intresting programs!

(added 2019.1.19)
NHK WORLD NEWSROOM 2018.1.19 - YouTube (recorded)

"my interview scene and my talks"

IchigoJam x OLED、横向きサブディスプレイとして使う方法

2018/01/17
#KidsIT #IchigoJam #maker 

小さくてかわいい、IchigoJamで簡単に使える0.96インチOLED
文字が縦向き表示が簡単ですが、ちょっと工夫すると横向き表示もできます。

HELP #000 CHAR #700 PCG #800 VAR #900 VRAM #C00 LIST

こちら、HELPコマンドで出てくる、IchigoJamのメモリマップ。フォントパターンが1文字あたり8byte、メモリの0番地から入っています(CHAR)。

前回は1文字分8byteをそのままをPCGの#700(16進数で700、10進数では1792番地)にコピーし、OLEDに送信していましたが、どちらかに90度回転させたデータにすることで横向き表示が可能です。

200 @LPUTC 210 FOR X=0 TO 7 220 N=0 230 FOR Y=0 TO 7 240 N=N+PEEK(C*8+Y)>>X&1<<(7-Y) 250 NEXT 260 POKE#700+X,N 270 NEXT 280 ?I2CW(60,64,#700,8) 290 RETURN

90度回転させるプログラムができました。前回のプログラムに加えてみましょう。

C=ASC("A"):GSB@LPUTC

Aと横向きにでました。

GSB@CLS:S="IchigoJam":FORI=0TOLEN(S)-1:X=3:Y=12-I:GSB@LC:C=ASC(S+I):GSB@LPUTC:NEXT

IchigoJamと表示されます!


下ように短くかいておくと、プログラム容量が節約できます。(200〜290行は消してOK)

150 @LPUTC:FORX=0TO7:N=0:FORY=0TO7:N=N+PEEK(C*8+Y)>>X&1<<(7-Y):NEXT:POKE#700+X,N:NEXT:?I2CW(60,64,#700,8):RTN

ひとつの文字を表示するために、8x8、64回ループしているので、ちょっとゆっくりな表示ですね。
マシン語で高速化してみましょう。

1 LET[0],#B5F0,#2307,#021B,#18C9,#2308,#4358,#1812,#2500,#2701,#2600,#2407,#2000,#5D93,#40EB,#403B,#40A3,#18C0,#3C01,#3601,#2E08,#D1F6,#5548,#3501,#2D08,#D1EF,#BDF0 150 @LPUTC:?USR(#800,C):?I2CW(60,64,#700,8):RTN

配列の領域を使ってマシン語をいれておき、これを使ったサブルーチン@LPUTCに置き換えています。

asm15 assembly表記のArmマシン語はこんな感じです。

PUSH {LR,R4,R5,R6,R7} R3=7 R3=R3<<8 R1=R1+R3 R3=8 R0*=R3 R2=R2+R0 R5=0 'X R7=1 '1 @LOOP1 R6=0 'Y R4=7 '7-Y R0=0 'N @LOOP2 R3=[R2+R6] R3>>=R5 R3&=R7 R3<<=R4 R0=R0+R3 R4-=1 R6+=1 R6-8 IF !0 GOTO @LOOP2 [R1+R5]=R0 R5+=1 R5-8 IF !0 GOTO @LOOP1 POP {PC,R4,R5,R6,R7}

asm15、配列への代入形式、"bas (array hex)" を追加しました。

ボクにもわかる IchigoJam用 I2C 有機ELディスプレイ OLED の接続方法
こちらにまとめて転送することでもっと高速化する方法や、楽しいサンプルが紹介されていますので、合わせてどうぞ!

0.96インチOLEDをIchigoJamのサブディスプレイとして使おう

2018/01/16
#KidsIT #IchigoJam #maker 

温度や、動作状態をちょっと表示させたい時に便利な、128x64の有機ELディスプレイ(OLED)。
秋月電子通商からIchigoJam Tにぴったりの商品が登場!
0.96インチ 128×64ドット有機ELディスプレイ(OLED): ディスプレイ・表示器 秋月電子通商 電子部品 ネット通販

ピン配置が、GND,VCC,SCL,SDAの順は、IchigoJam TのCN5とぴったり。
(IchigoJam Uでもブレッドボードなどで配線すればOK!)

このモジュールはI2Cを使って制御します。差し込んだらまず次の初期化コードで表示しましょう。

POKE#700,0,141,20,32,0,175:?I2CW(60,#700,6)

つぶつぶ模様が表示されます。
イチゴのキャラクターを表示してみましょう。

COPY#700,255*8,8:?I2CW(60,64,#700,8)

次のように好きな文字を表示できます。

C=ASC("5"):COPY#700,C*8,8:?I2CW(60,64,#700,8)

表示する位置を変更するコマンドはこちら(X:左0〜7右、Y:上0〜15下)

POKE#700,0,#21,Y*8,127,#22,7-X,7:?I2CW(60,#700,7)

まんなかあたりに真っ白の四角を表示する例

X=3:Y=7:C=1 POKE#700,0,#21,Y*8,127,#22,7-X,7:?I2CW(60,#700,7) COPY#700,C*8,8:?I2CW(60,64,#700,8)

* 画面を全部消す時は、表示位置を右上にもっていて、16x8の128コ、真っ白を表示します。

わかりやすく、つくったプログラムがこちら

10 GSB@INIT:GSB@CLS 20 X=RND(8):Y=RND(16):GSB@LC 30 C=RND(256):GSB@PUTC 40 GOTO20 100 @INIT:POKE#700,0,141,20,32,0,175:?I2CW(60,#700,6):RTN 110 @LC:POKE#700,0,33,Y*8,127,34,7-X,7:?I2CW(60,#700,7):RTN 120 @PUTC:COPY#700,C*8,8:?I2CW(60,#40,#700,8):RTN 130 @CLS:X=7:Y=0:GSB@LC:C=0:FORI=0TO127:GSB@PUTC:NEXT:RTN

10行で初期化して、20から40行をぐるぐるまわって、ランダム表示。

ESCで止めて、次のようにやってみましょう。

GSB@CLS X=3:Y=7:C=255:GSB@PUTC

いろいろ遊んでみてください!

links
- 0.96インチ 128×64ドット有機ELディスプレイ(OLED): ディスプレイ・表示器 秋月電子通商 電子部品 ネット通販
- IchigoJam x OLED、横向きサブディスプレイとして使う方法
- ボクにもわかる IchigoJam用 I2C 有機ELディスプレイ OLED の接続方法

音声認識AI窓口、AI移動支援のプロトタイピングと筋ジストロフィー - 障がい者に寄り添うハッカソン

2018/01/14
#sabae #codefor #opendata #maker #python #AI 

鯖江市の第4次障がい者計画「あるがままに 自分らしく いきいきと ともに暮らせる まちづくり」
障害の理解と、課題に対するアイデアソン、ハッカソンなど、継続的なものづくりがポイントです。

Code for Fuchu連携で、COTTONさくらんぼの岩間由里子さんからも情報提供。 筋ジストロフィーで手足に障害があり、2cm四方を範囲としたスライドと押し込み動作だけで使えるスマホを熱望。オープンデータ化と、使う人に合わせたアプリの横展開、必須ですね!

実際に、指一本でスマホ操作にチャレンジしましたが、指を画面から離せないという条件は厳しく、通常操作が無理でした。 調べるとiPhoneの3Dタッチなど、タッチパネルの力のかけ具合は、mouseforce系のAPIをブラウザ上で取得もできるので、いろいろ実験してみたいと思います。
iOS9で追加されたForceTouch(3DTouch)をJavaScriptで操作してみる | WebDesign Dackel
また、日本筋ジストロフィー協会でも「ワンキーマウス試作報告」の事例が掲載されていました。


主催、Code for Japan コーポレートフェローシップ、鯖江市臨時職員三ツ山さん(富士通)

アイマスクをつけてアイデアソン。
目に優しく、耳が研ぎ澄まされ、隣のテーブルの会話もよく聞こえちゃいます。
声でジャンケンして、ファシリテーターを決め、アイデアのディスカッションスタート。 まとめるための紙が使えない点が心配でしたが、みんな条件が同じなので、ひとつひとつ整理して進める意識を共有できて意外といい感じです。

つづいて、障害体験。高齢者シミュレーショングッズを借りて、重りをつけたり、膝の動きを制限する器具を付けて歩き回ってみます。 普段の何でもない生活の難易度がアップするので、刺激が欲しい人にもオススメです!

制限された視野をシミュレートするメガネ。

アイマスクをして、杖をもって点字ブロックを辿るチャレンジ。
センサーやGPSをつけた、IoT白杖をお互いつくって、難易度高いコースで対戦などできると楽しそう。

「Webアプリはじめのいっぽ」でHTMLの基本を覚えて、ハッカソンタイム!

WebRTCを使って、世界中どこからでもサポートできる!(featuring SkyWay
スカイボイス

アイマスクとスマホを装備をして自販機での買い物チャレンジ!

先のアイデアソンで登場した「おたすけパンダ」と「Pくん」の実現、AIチャットによる市役所窓口デモ。
おたすけパンダPくん

鯖江市も公開した、給付金オープンデータによる質問応答機能のデモに加え、音声認識と音声合成を使った窓口も実験。

Google Cloud Speech APIを使うと、高精度な音声認識が簡単に実現できます。
1回(15秒)$0.006(=約0.6円)の有料APIですが、1ヶ月60分、最大240回まで無料で使えます。
APIKEYを取得してみましょう。

とりあえず、音声認識とそれに対する回答するシンプルなデモスクリプト aichat.sh for Mac を作成。
(参考、GoogleのSpeech APIを使ってみた - Qiita

read -p "hit to start" rec --encoding signed-integer --bits 16 --channels 1 --rate 16000 test.wav ffmpeg -y -i test.wav -ar 16000 test.flac echo -e "{\n 'config':{\n 'encoding':'FLAC',\n 'sampleRate':16000,\n 'languageCode':'ja-JP' \n }, \n 'audio': { \n 'content': '`base64 test.flac `' \n } \n }\n" > sync-request.json curl -X POST -H "Accept: application/json" -H "Content-type: application/json" --data @sync-request.json https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=【APIKEY】 > response.json python3 talkresponse.py ./aichat.sh

* rec は、音声操作ツール sox に含まれます

音声認識結果 response.json から、認識した文字列を読み取り、会話するプログラム talkresponse.py for Python3 がこちら。(Open JTalkをimportしてます)

# coding: utf-8 import jtalk import sys import time import json import urllib.request cnv = { "おはよう" : "おはようございます", "今日の天気は" : "たぶん晴れです", "こんにちは" : "こんにちは", "がんばって" : "がんばる!", "かわいい" : "ありがとう", "ありがとう" : "どういたしまして", "免許返納について教えて" : "つつじバスとか確かお得に乗れるよ。詳しくは鯖江市のサイトを見てね", "読み書きが苦手です" : "読み書きの苦手なお子さんの相談講座が、3月11日にありますよ", "プログラミングを勉強したい" : "イチゴジャムがオススメ!ハナ道場へどうぞ", "うまいもの" : "サバエドッグ", "甘いもの" : "冬のかんみといえば、みずようかん!", "鯖江のうまいもの" : "サバエドッグ", "鯖江の美味しいもの" : "サバエドッグ", # "鯖江商店街、ミート・アンド・デリカささきの、サバエドッグ", "鯖江と言えば" : "メガネ!鯖江駅から徒歩10分、めがね会館へどうぞ!", "鯖江市長の名前は何ですか" : "まきのひゃくおです", # 写真でるといい } def a(): with open('response.json', 'r') as f: data = json.load(f) s = data['results'][0]['alternatives'][0]['transcript'] print(s) # 認識できた文をとりあえず表示 for t in cnv: if t == s: jtalk.jtalk(cnv[t]) # 対応する回答があった! return if s.endswith("て"): jtalk.jtalk("わかった!") # todo ちゃんとやってあげるプログラムを書く return jtalk.jtalk("ごめんなさい!よくわからないから勉強しておくね。") # todo わからなかった質問を記録しておき、しかるべき人に通知するプログラムを書く a()

とりあえず、いい加減なAIができました!

オープンデータを学習させて、文脈に応じた回答を考えるなど、おもしろそうです。
音声認識&音声合成部分を切り出したデバイスにするために必要なメモリ量は、16kHz、16bit、15秒で約469KB。 ちょっとメモリ大きめのマイコンがあれば、いけそうですね!

ハッカソンの様子が公開されました!

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