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

電波時計の電波を見る。モールス信号デコーダーで学ぶデコーダープログラム

2018/04/19
#IchigoJam #KidsIT #maker 

自動的に時刻を合わせてくれる電波時計。 その仕掛けは、佐賀県(60kHz)と福島県(40kHz)に2箇所ある、起業家甲子園でおなじみNICT(情報通信研究機構)の施設から発信される電波にあります。 IchigoJamと電波時計モジュール(関西など用60kHz40/60kHz設定可能版 - aitendo)を使って電波時計づくりにチャレンジ!


高い音と低い音が同時になっても和音として認識できるように、電波も、周波数によってスマホの通信、無線LAN、テレビやラジオ放送など、同時に重ね合わせて使っています。 その中でも30kHz-300kHzの長波と呼ばれる帯域中で動いているのが標準電波(電波時計)、振動しているか否かという原始的な送信方法が使われています。

NICTのweb「標準電波の出し方」に、その信号フォーマットが紹介されています。

1bps = 1bit per second = 毎秒1bit
1データ 60bit、60秒/1分
データ種:マーカー(HIGH:200msec LOW:800msec)、1(HIGH:500msec LOW:500msec)、0(HIGH:800msec LOW:200msec)、モールス信号
エンコード方式:2進化10進数(BCD)による、時、分、通算日、年(西暦下2桁)、曜日、うるう秒情報、停波予告情報


通常時(毎時15分、45分以外)のタイムコードより)
うるう秒に対応する方法などがおもしろい!

電波時計モジュール(60kHz)は3.3VでもOKなので、ピンソケットをはんだづけ。IchigoJamのOUT1,-1として入力に切り替え、IchigoJamのVCC,GND,OUT1,OUT2に挿し込む。

10 OUT1,-1 20 ?IN(5);:CONT RUN

信号が見えました!
デコードプログラムをちょっと書いてみましたが、時々ノイズが入って化けてしまいます。

標準電波の変わっている点、毎時15分と45分の時はフォーマットは通常と違って、年と曜日の替わりに、モールス信号と停波予告が含まれています。

ノイズ混じりのデコードに挑戦する前に、モールス信号のデコーダーで腕試ししておきます。

モールスデコーダー for IchigoJam
モールス信号は、電波時計と同様、電波の特性周波数が振動しているか否かで伝える電波を使った最古で最もシンプルなコミュニケーション方式です。 短いON/OFFと、その3倍の長さを基本に、文字や文章を表します。

まずはボタンを押したかどうかを表示してみます(BTN(32)をBTN()にするとIchigoJam本体のボタンになります)

10 ?BTN(32);:CONT RUN 00000000000111000001100

ボタンが押された長さを測ってみます

10 IF BTN(32)=0 CONT 20 CLT 30 IF BTN(32)=1 CONT 40 ?TICK() 50 GOTO 10 RUN 15 4 4 6

短いはTICK()で10、1/6秒を区切りとして、長ければ3、短ければ1を表示してみます

35 IF TICK()>10 N=3 ELSE N=1 40 ?N; RUN 313311

押されていない間の時間も測って、長く押されていなかったら文字の区切りとします

45 CLT 46 IF TICK()<30 AND BTN(32)=0 CONT 47 IF TICK()>=30 ? RUN 13 333 111

1と3で表すモールス信号、A〜Zを配列にセットして、デコードするプログラムを追加します

2 LET[0],13,3111,3131,311,1,1131,331,1111,11,1333,313,1311,33,31,333,1331,3313,131,111,3,113,1113,133,3113,3133,3311 RUN 100 FOR I=0 TO 25:IF [I]=M ?CHR$(65+I) 110 NEXT:RTN M=13:GSB100 A OK

3と1を一桁ずつ足していくプログラムを作成

5 M=0 37 M=M*10+N 47 IF TICK()>=30 ?" ";M:M=0 RUN 0 13 13 333 333

デコーダーと組み合わせて、できあがり!

47 IF TICK()>=30 ?" ";:GSB100:M=0 RUN 31 A 3111 B 3131 C 333 O 111 S

こちら、できあがった簡易モールスデコーダープログラム全文

2 LET[0],13,3111,3131,311,1,1131,331,1111,11,1333,313,1311,33,31,333,1331,3313,131,111,3,113,1113,133,3113,3133,3311 5 M=0 10 IF BTN(32)=0 CONT 20 CLT 30 IF BTN(32)=1 CONT 35 IF TICK()>10 N=3 ELSE N=1 37 M=M*10+N 40 ?N; 45 CLT 46 IF TICK()<30 AND BTN(32)=0 CONT 47 IF TICK()>=30 ?" ";:GSB100:M=0 50 GOTO 10 100 FOR I=0 TO 25:IF[I]=M ?CHR$(65+I) 110 NEXT:RTN

手による遅い信号デーコードに慣れたら、同じくゆっくりな電波時計の信号デコードにも挑戦!

links
- 標準電波の出し方 - NICT国立研究開発法人 情報通信研究機構 日本標準時グループ
- 電波時計モジュール(60KHz) - aitendo
- 電波時計モジュール(40/60KHz) - aitendo
- 電波 - Wikipedia
- 音声読み上げで自学する和文モールス信号 on IchigoJam
- IchigoJam モールス信号エンコーダー アルファベット編
- こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)
- IchigoJam検定

自分で創ったモノを売ってみよう!はじめてのしょうばい - 高性能温湿度計のつくりかた(SHT31編)

2018/04/08
#KidsIT #sabae #megane #IchigoJam #maker 

人はなぜ勉強するのか?
→ 価値提供力を高め、社会をより良く発展させるため。

最もシンプルな価値提供、自分で創って自分で売る。
「はじめてのおつかい」ならぬ「はじめてのしょうばい」体験を鯖江市の定例祭、誠市で実施。
小学生自ら、メーカー兼販売店兼販売員となって、行き交う人に売り込み!
商品は、先日「ハードオフ x Hana道場企画、ジャンクREメイクショップ」で創ったもの。


ラジオの発電機と扇風機の羽を再構築してメガネに接続魔改造された「せんぷうメガネ」2,000円


メカなメガネだから「メカネ」ナイスネーミング!


ガラケーを再構築した「電話けんし」500円


基板やコンピューターをたっぷりつかったメガネ「コンピューターづくし」1000円(税抜)


メーカーさんと一緒に写真が撮れるサービス、いいね!


試着できます


興味がある人ない人、買ってくれる人くれない人、値段は高い?安い?


商売というコミュニケーション、売り手の立場が分かると、買うときの意識も変わります。


どういう店構えにするといいかな?「自分の商品を売る」をゴールにあれこれその場でチャレンジ!
自分の作品が売れたあとも、「友達の作品を紹介して一部もらおう」など、早速商売の幅が広がってました。
雨で客足少ないなら、売り込んじゃおうと、会場中を商品を持って走り回ってました。


ここでしか買えないメガネ!


美味しくてお買い得な、たくあん
周りのお店で何がいくらで、どのくらい、どういう人に売れている?現場で学ぶマーケティング。


鯖の丸焼き!


あったかいシシ汁、おいしかった!


定番サバエドッグ、実はその誕生は2010年7月12日の誠市(命名は鯖江市長!)
サバエドッグ(福井県鯖江市) 持ち歩くソースカツ丼  :日本経済新聞
全国にファンを持つ鯖江グルメの代表格。いち早く掲載したのはこのブログ

あるくソースカツ丼!?サバエドック登場、雨でも賑わう7月誠市&ご縁市
新しい商品が生まれるお祭、誠市!


市長と!


楽しかった、またやりたいとの声!それぞれ何か手応えを掴んだ様子。


5度台まで下がった冬日、ストーブと福井弁でしゃべる温度計が活躍してました。


950円の高性能温湿度計、SHT31
ピンヘッダーでブレッドボード上で接続してもOKですが、基板でIchigoJam用にコンパクト化!


SHT31使用 高精度温湿度センサモジュールキット: 組立キット 秋月電子通商 電子部品 ネット通販
基板 for プラケース(2枚入) - aitendo」←この基板をニッパーで切って使ってます


下二桁表示で、リアルタイムにくるくる変わる温度と湿度がなかなか新鮮。

SHT31、I2Cで数値を取り出す方法

POKE#700,#2C,#06:R=I2CR(#45,#700,2,#700,6)

温度や湿度の計算にマシン語を使って (A*B)>>16 を実現

R1+=R0 R0=[R1+0]W R2=[R1+1]W R0*=R2 R0=R0>>16 RET

これをasm15マシン語表を見て手でアセンブルしたものを使います。
ポインタで連続する2つの変数を渡して計算するテストで確かめましょう
マシン語わからなくても使えればOK!)

POKE#700,1,68,8,136,74,136,80,67,0,12,112,71 [0]=17500:[1]=24834 ?USR(#700,#800)-4500 2131 ← 21.31度

温湿度計に仕立てます!

10 U=96:LET[U],#4401,#8808,#884A,#4350,#0C00,#4770:U=#800+U*2 15 GSB@LINIT 20 POKE#700,#2C,#06:R=I2CR(#45,#700,2,#700,6) 30 [0]=17500:[1]=PEEK(#700)<<8|PEEK(#701):T=USR(U,#800)-4500 40 [0]=10000:[1]=PEEK(#703)<<8|PEEK(#704):H=USR(U,#800) 45 CLS:?"@"; 50 ?" ";T/100;".";DEC$(T%100+100,2);CHR$(1);" "; 60 ?H/100;".";DEC$(H%100+100,2);"%"; 70 ?" ":S=#900:GSB@LPOS:GSB@LPUT 80 WAIT10:GOTO20 300 @LINIT:LET[0],#38,#39,#14,#70,#56,#6C,#3C,#C,#1:FORI=0TO8:POKE#700,0,[I]:R=I2CW(#3E,#700,2):NEXT 305 POKE#700,0,#48:R=I2CW(#3E,#700,2):POKE#700,#40,#18,#18,7,8,8,8,7,0:R=I2CW(#3E,#700,9):RTN 310 @LPUT:R=I2CW(#3E,S,LEN(S)):RTN 320 @LPOS:POKE#700,0,#80:R=I2CW(#3E,#700,2):RTN

液晶AQM1602とSHT31を接続して使用
10行:掛け算&シフトのマシン語を配列に格納

WS2812Bでキラキラ光るバー表示もステキかも。
温度センサーIC MCP9700-E/TO 低消費電力リニアアクティブ: センサ一般 秋月電子通商 電子部品 ネット通販

次は何創る!?

links
- はじめてのはんばい!ジャンクREメイクショップ in誠市: Hana道場
- バラバラにしてつくって販売!?ジャンクREメイクショップ: Hana道場
- HARD OFF × Hana道場 ジャンク品REメイクショップ開催 | 親切丁寧な買取、リサイクルショップならハードオフグループ

福井弁でしゃべる無駄に細かい温度計 - お手軽I2C高精度温度センサーADT7410 x AquesTalk x IchigoJam

2018/04/07
#IchigoJam #maker 

秋月電子で500円、誤差0.5度の高精度温度センサーADT7410を使った、福井弁でしゃべる温度計。

有効桁数的には標準の13bitモードで、下一桁表示で十分そうですが、16bitモードにすると分解能が0.0078125度(1/128度)まで細かくなり、0.01度の単位までリアルタイムに変化する様子が楽しめます。

データシート(使用半導体資料)によると標準的な温度化での誤差は0度からマイナス0.2度内に安定して収まっているので、広範囲に使えそうです。

ADT7410、温度算出がとっても楽!

10 R=I2CR(#48,0,#700,2):T=PEEK(#700)<<8|PEEK(#701) 20 ?T>>7 30 WAIT30:GOTO10

16bit(=2byte)データをI2Cで取得して、7bitシフト。整数表示の温度計プログラムのできあがり!

?T>>7;".";T&#7F*10/128

下位7bit分から小数第一位を取り出して表示

5 POKE#700,3,#80:R=I2CW(#48,#700,2) 20 ?T>>7;".";DEC$(T&#7F*100/128+100,2)

16bitモードに設定して小数第二位まで表示もこれだけのプログラムでできちゃいます!
優秀!「ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール: センサ一般 秋月電子通商 電子部品 ネット通販


福井弁でしゃべる温度計にするための部品達
16x2行 AQM1602の大きめ液晶モジュールが変換基板付きで550円!(@秋月電子

数値読み上げが便利な、AquesTalk pico を使って温度をしゃべらせます。

S="tada'imano,kion;wa <NUMK VAL=10.53>do/de'su.":GSB@TALK

標準っぽく(ただいまのきおんは、10.53どです)

S="i'mano kionwa <NUMK VAL=1.53>do/deyo":GSB@TALK

フランクに(いまのきおんは、10.53どだよ)

S="ima'no/o--'-- kion;wano-- <NUMK VAL=10.53>do/yatte--":GSB@TALK

福井弁風?アクセントをいろいろ調整して、オリジナルな読み上げを作ろう!


I2Cで使う3.3V/GND/SDA/SCL、並びを揃えるための治具をコンパクトにはんだづけ


IchigoJamのCN5に差し込んで使います(長ピンソケットを使うと重ねて使う、スタック利用ができて便利!)

全プログラムはこちら
10-60 メインループ、ボタンが押されたら福井弁!
100-110 便利ツール
300-340 AQM1602 小型液晶用ライブラリ
400-410 ADT7410 高精度温度センサー用ライブラリ

10 GSB@LINIT:GSB@TINIT 20 @LOOP:CLS:GSB@TGET:?"@";:GSB@TPUT:?CHR$(1);" ADT7410" 30 GSB@LPOS:S=#900:GSB@LPUT 40 CLT 50 IF BTN() GSB@TTALK:ELSE IF TICK()<60 CONT 60 GOTO@LOOP 100 @TPUT:?T>>7;".";DEC$(T&#7F*100/128+100,2);:RTN 110 @TTALK:?"ima'no/o--'-- kion;wano- <NUMK VAL=";:GSB@TPUT:?">do/yatte--":S=#920:GSB@TALK:WAIT300:RTN 300 @LINIT:LET[0],#38,#39,#14,#70,#56,#6C,#3C,#C,#1:FORI=0TO8:POKE#700,0,[I]:R=I2CW(#3E,#700,2):NEXT 305 POKE#700,0,#48:R=I2CW(#3E,#700,2):POKE#700,#40,#18,#18,7,8,8,8,7,0:R=I2CW(#3E,#700,9):RTN 310 @LPUT:R=I2CW(#3E,S,LEN(S)):RTN 330 @LCLS:POKE#700,0,1:R=I2CW(#3E,#700,2):N=0:RTN 340 @LPOS:POKE#700,0,#80:R=I2CW(#3E,#700,2):N=0:RTN 400 @TINIT:POKE#700,3,#80:R=I2CW(#48,#700,2):RTN 410 @TGET:R=I2CR(#48,0,#700,2):T=PEEK(#700)<<8|PEEK(#701):RTN 600 @TALK:R=I2CR(#2E,#700,1):IF R STOP ELSE IF PEEK(#700)!=ASC(">") CONT 610 R=I2CW(#2E,S,LEN(S)):R=I2CW(#2E,13):RTN

おまけ、時報と合わせて温度を読み上げる風なデモ

110 @TTALK:S="#K":GSB@TALK:?"<NUMK VAL=";:GSB@TPUT:?">do sujaa'taga sitiji'wo osirasesima'su.":S=#920:GSB@TALK:S="#J":GSB@TALK:WAIT300:RTN

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

しゃべるIchigoJamに小型液晶を追加する - AQM1602/AQM0802とのI2C接続 with IchigoJam BASIC

2018/04/04
#IchigoJam #maker 

しゃべるIchigoJamに簡単な文字表示だけつけてみます。
秋月で新発売で見かけたので買ってみた小型液晶「AQM1602Y-FLW-FBW」は、I2Cコントロール。
使うには、1uFコンデンサが2つ必要でした。
(接続方法参考:同型のAQM1602Y-RN-GBW取扱説明書大きめですが変換基板付きが便利です!)

しゃべりながら表示もするIchigoJam
(キーボードは、IchigoJamで使えるPS/2対応、日本語ふにゃふにゃキーボード、AOTECH FKBJ-86BL

初期化はこちら

LET[0],#38,#39,#14,#70,#56,#6C,#38,#C,#1:FORI=0TO8:POKE#700,0,[I]:?I2CW(#3E,#700,2):NEXT:RTN

続いて、文字表示はこのように(@マークは#40、文字書き込み用の指定で、実際表示されるのはABCの3文字)

?I2CW(#3E,"@ABC",4)

画面下段にカーソルを移動するには

POKE#700,0,#C0:?I2CW(#3E,#700,2)

画面クリア

POKE#700,0,1:?I2CW(#3E,#700,2)

モニタの画面の上16文字2行をそのまま小型液晶へ表示する

POKE#700,0,1:?I2CW(#3E,#700,2):POKE#700,#40:COPY#701,#900,16:?I2CW(#3E,#700,17):POKE#701,0,#C0:?I2CW(#3E,#701,2):COPY#701,#920,16:?I2CW(#3E,#700,17)

いろいろ自在に使えますね!
I2CWの返り値を ? で表示していますが、動作確認できたら R= などと置き換えてOKです。
AQM0802も横幅が違うだけで、ほぼ共通で使える気がします。なんと、320円!

前回のプログラムと混ぜて、しゃべりながら、小型液晶に表示するプログラムがこちら

5 GSB@LINIT 10 FOR I=0 TO 1 STEP 0 20 K=INKEY():IF !K CONT 30 ?CHR$(K);:GSB@LPUT 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 200 @LINIT:LET[0],#38,#39,#14,#70,#56,#6C,#38,#C,#1:FORI=0TO8:POKE#700,0,[I]:?I2CW(#3E,#700,2):NEXT:RTN 210 @LPUT:IFN=16:POKE#700,0,#C0:?I2CW(#3E,#700,2):ELSE IFN=32 N=0:POKE#700,0,1:?I2CW(#3E,#700,2) 220 POKE#700,#40,C:?I2CW(#3E,#700,2):N=N+1:RTN

links
- AQM0802A-RN-GBW - I2C接続小型キャラクタLCDモジュール 8x2行
- AE-AQM1602A(KIT) - 大型16x2行 変換キット付き 550円
- I2C接続小型キャラクタLCDモジュールピッチ用変換基板 - 120円
- 秋月電子内をAQMで検索!

勝手表彰「ダイヤ編成支援システム その筋屋」さん!バスリアルタイムオープンデータから本格ミニゲームまで、意外と使えるIchigoJam&sakura.io進呈! トランプゲーム実装例、神経衰弱

2018/03/06
#opendata #IchigoJam #IoT #maker 

バスへの愛あふれる「宇野バスロケーション「バスまだ?」データのオープンデータ化」へ取り組んだ「ダイヤ編成支援システム その筋屋」さんに、VLED勝手表彰の「odpリアルタイムオープンデータ賞」を受賞いただきました!
今年で6回目「2017年度のオープンデータ・ビッグデータに関する優れた取り組みの表彰 - ニュース | 一般社団法人オープン&ビッグデータ活用・地方創生推進機構

3/3のプレゼン時の動画もお知らせいただきました!
「ゼロから始める標準的なバス情報フォーマット ~ その筋屋を使って」  高野孝一(その筋屋) - YouTube

副賞にお送りしたのは、IchigoJamsakura.ioを使ったIoTセット!
IchigoJamで簡単IoT、sakura.ioとIchigoJamのつなぎかた・つかいかた
つつじバス乗客数グラフ(バス別) - 鯖江市バス乗客数リアルタイムオープンデータ」で使っているセットです!
Twitterにて、喜びのツイート、いただき感激です!

IchigoJamでのプログラム領域は、わずか1KB(=1024byte)、大したことできないと思いきや、続々と力作が登場しています!
落ち物ゲーム、爆弾探しとくれば、次はトランプゲームですね!

ねこが人気のIchigoJam絵文字。トランプのスーツも揃ってます!

FORI=0TO3:?CHR$(228+I);:NEXT

ランダムに表示

?CHR$(228+RND(4))

変数Nにいれた数を、1〜10とJQKとして表示する方法

?CHR$((N+48)*(N<10)+234*(N=10)+74*(N=11)+81*(N=12)+75*(N=13))

10以下のときは数に、10のときは特別キャラクター10を表すキャラクターコード234、11、12、13のときはJQKのキャラクターコードにしています。

こちら応用して、つくった「神経衰弱ゲーム」がこちら!

難しい!!

10 CLS:LC13,0:?"memory" 20 FORI=0TO51:LCI%6*5+3,I/6*2+3:?"**":NEXT 30 CLV:FORI=0TO51:[I]=I:NEXT 40 FORI=0TO51:N=RND(52):T=[I]:[I]=[N]:[N]=T:NEXT 55 O=-1:R=52:S=0 60 C=(C+(K=28)*51+(K=29)+(K=30)*46+(K=31)*6)%52 65 LC5,21:?"STEP:";S 70 LCC%6*5+2,C/6*2+3:?">"; 75 K=INKEY():IF!KCONT 76 IFK=32&&O!=C:GSB100:GOTO60 80 ?CHR$(28,0);:GOTO60 100 ?CHR$(228+[C]/13); 110 N=[C]%13+1:?CHR$((N+48)*(N<10)+234*(N=10)+74*(N=11)+81*(N=12)+75*(N=13)); 200 IF!FF=1:O=C:RTN 210 S=S+1:N=42:WAIT30:F=0:IF[O]%26=[C]%26:N=0:R=R-2 220 ?CHR$(28,28,N,N):WAIT10:LCO%6*5+3,O/6*2+3:?CHR$(N,N):O=-1 230 IFRRTN:ELSE:LC15,21:?"CLEAR!"

これで608byteと、まだ416byteも余裕あります!


Kidspod; IchigoJam
投稿された IchigoJamで動く力作プログラム達!

どうぞ、副賞、存分に楽しんでください!
VLED勝手表彰、受賞された方、おめでとうございました!!

links
- 2017年度のオープンデータ・ビッグデータに関する優れた取り組みの表彰 - ニュース | 一般社団法人オープン&ビッグデータ活用・地方創生推進機構
- 宇野バスロケーション「バスまだ?」
- ダイヤ編成支援システム その筋屋
- 【地図と位置情報】 マニアックなバスロケが岡山・宇野バスで稼働中、回送車両の位置や前方車窓まで表示 - INTERNET Watch
- IchigoJamで簡単IoT、sakura.ioとIchigoJamのつなぎかた・つかいかた

LED2つで文字を読む、子供でも作れる2点式体表点字電脳メガネ

2018/02/20
#codefor #IchigoJam #sabae #maker #megane 

効率優先の大量生産マス戦略から、きめ細かく行き届く少量多品種時代へ。
誰もがちょっとずつがまんして使い、時には使えない人を産むマスプロダクトから、誰にとっても使いやすく誰もが公平に向き合えるユニバーサルデザインプロダクトがどんどん誕生する、多様性ある社会を創りましょう。

字幕や他言語など、アクセシビリティがテーマのひとつ、Code for Nerima
登壇された長谷川貞夫さんによる、画期的な点字リーディングシステム「体表点字」が凄い!
高額になりがちな点字ディスプレイと違って、使うデバイスは2つの振動子のみ。200ミリ秒単位に6点で表す点字を上から順に作動することで人に伝えます。
情報処理学会第4回アクセシビリティ研究会で発表する長谷川貞夫さんの動画公開 | 多様性を育む読書環境をデザインする有限会社読書工房


勢いでつくった、振動子の代わりにLED2灯使った簡易版「体表点字メガネ」試作一号機。
バーサライタのように、タイミングがとれた信号を見ると脳内に自然と点字が浮かびあがってきます。

プログラムづくりの前にデータづくり。点字を使いやすい数に変換しておきます。
6点の点字で表すアルファベット、上から順に横に数えて、6bitの数にしたものがこちら。

ABCDEFGHIJKLMNOPQRSTUVWXYZ 32,40,48,52,36,56,60,44,24,28,34,42,50,54,38,58,62,46,26,30,35,43,29,

これをIchigoJam BASICの配列を使って、まずはA〜Zまで順に流してみました。

1 'TAIHYO-TENJI A-Z 10 LET[0],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 15 OUT3:WAIT60:OUT0 20 FOR I=0 TO 25 30 WAIT60:N=[I]:?:?CHR$(65+I) 40 O=N>>4:GSB@W 50 O=N>>2:GSB@W 60 O=N:GSB@W 80 NEXT 90 GOTO10 100 @W:OUT1,O&2:OUT2,O&1:?BIN$(O,2):WAIT6:OUT0:WAIT6:RTN

点字を画面にも表示しています。指で認識しやすいような工夫が見られます。
(RUN on IchigoJam web)

体表点字とするためのデバイスを準備します。

電脳メガネ化するためにコードをのばして、LEDをはんだづけ、根元は4ピンのピンヘッダーにはんだづけしてホットボンドです。 (今回使ったIchigoJamは、NextStepさんのKumaJam!)

繰り返し見ていると、だんだん慣れてくる体表点字。モールス信号が左脳式シリアル信号だとすると、体表点字は右脳式パラレル信号な次世代モールス。大きなパフォーマンスアップが期待できそうです!

振動モーターをFET、モータードライバ、MapleSyrupにつないだり、サーボを2台使うのもいいかも。 鯖江産ウェアラブル対応めがね、neoplugを使うと、取り外し可能な体表点字デバイス化の実現も簡単です。

点字、ものにしてみませんか?
Braille for All - 点字をみんなのものにするプロジェクト

下記イベントで体験いただけます。

2018.2.22開催「電脳メガネサミット
2018.2.24開催「こどもプログラミングサミット

links
- ICT時代だからこその「ヘレンケラースマホ」(1/4):NICT
- 点字ファイルをユニコード点字に変換するプログラム
- 点字リーダー 一日一創2012
- 点字ライター 一日一創2012
- 2進数とプログラミングで解く点字 - IchigoJam

IchigoJamカラフル電光掲示板のつくりかた

2018/02/14
#IchigoJam #maker 

CC BYで、公開しているIchigoJamのロゴ
WS2812B 32x8のフルカラーLEDを使って、表示してみました。

つくりかた
まずは、画面づくり。色ごとに数値を使って、IchigoJamロゴを描きます。

2 [0]="0 2 3 6 " 3 [1]="0 2 6 " 4 [2]="0 111 222 3 444 555 6 777 888888 " 5 [3]="0 1 2 2 3 4 4 5 5 6 7 7 8 8 8 " 6 [4]="0 111 2 2 3 444 555 666 7777 8 8 8 " 7 [5]=" 4 " 8 [6]="99999999999 444 999999999999999999 "

スクロールしてみましょう。

10 P=0:CLS 20 FORI=0TO7:LC31,I:?STR$([I]+P,1);:NEXT 30 SCROLL LEFT:P=(P+1)%LEN([0]):GOTO20

(RUN on IchigoJam web)

ロゴ画像の色は下記ようになっているので、こちらを256色カラーに変換しましょう。

10 LET[0],"#EB624E","#EB6B93","#6E92CC","#AD8EC0","#52AEE2","#8BC33C","#B2CC29","#EBC61D","#F5A948","#EF816E" RUN

16進数6桁のカラーコード。文字列はダイレクトモードで格納すると化けてしまうので、プログラム内に書いて、RUNしてセットしておきましょう。

どう変換するか?まずは16進数一桁のコードを10進数にしてみるところからスタートします。まずはキャラクターコードの確認から。

FORI=0TO255:POKE#900+I,I:NEXT

#900は画面を表すアドレス、0から255までのコードを表示すると、数字がアルファベットより先にあることがわかります(アドレスを忘れてしまったら、HELPコマンド)。 数字だったら0のコードを引き、アルファベットだったら数字とアルファベットの間の数だけずらせばOKですね。

C=ASC("C") C=C-48:IF C>9 C=C-7 ?C

16進数を10進数に変換できました。ここでもうひと工夫して、短くしましょう。(C>64)はCが64より大きい時1に、以下の時は0になるので、IF文を省略できます。

C=C-48-7*(C>64)

この調子で2桁16進数に対応しましょう。

S="10" C=ASC(S):D=ASC(S+1):N=(C-48-7*(C>64))<<4+D-48-7*(D>64) ?N

これを使いやすいようにサブルーチンにします

100 @S2HEX:C=ASC(S):D=ASC(S+1):N=(C-48-7*(C>64))<<4+D-48-7*(D>64):RTN

6桁のRGBをそれぞれ10進数にもどし、8bitのRGBへと再構築します。

110 @S2RGB:S=S+1:FORI=0TO2:GSB@S2HEX:S=S+2:[I+10]=N:NEXT:N=[11]&#E0+[10]>>5<<2+[12]>>6:RTN S="#FF1020":GSB@S2RGB:?BIN$(N)

変換できたので、いよいよ全部まとめて変換します。

?"9 LET[23]";:FORJ=0TO9:S=[J]:GSB@S2RGB:?",";N;:NEXT:? 9 LET[23],125,126,143,151,171,208,212,220,189,255,157 OK

色コードパレットが完成しました!

WS2812Bのドライバと組み合わせて、できあがり!

1 '32x8-WS2812B 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 IFRLRUNR>>8,R&255 SAVE3 NEW 1 'IchigoJam 32x8 WS2812B 2 [0]="0 2 3 6 : : ::: : " 3 [1]="0 2 6 :::::: :: : : " 4 [2]="0 111 222 3 444 555 6 777 888888 :: : ::::::: " 5 [3]="0 1 2 2 3 4 4 5 5 6 7 7 8 8 8 : ::: ::: : : " 6 [4]="0 111 2 2 3 444 555 666 7777 8 8 8 :: : : ::::::: " 7 [5]=" 4 : ::: : : " 8 [6]="99999999999 444 999999999999999999 : : : :: :: " 9 LET[23],125,126,143,151,171,208,212,220,189,157,255 10 [7]=0:P=0:CLS:R=FILE()<<8+20:LRUN3 20 FORI=0TO7:IFP<LEN([I]):C=ASC([I]+P)-25:POKE#91F+32*I,[C] 30 NEXT 40 U=USR(#700,0) 45 IF BTN() WAIT10 50 SCROLLLEFT:P=(P+1)%65:GOTO20 SAVE0


「IchigoJam体験」とスクロール表示

ドライバを3番に保存、掲示板を0番と設定しています。ご利用環境に合わせてご変更ください。

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

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

2018/02/08
#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電光掲示板で、街中でリアルタイムな情報発信できる災害に強いまち!?

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

2018/02/05
#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
#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

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