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

「世界一?簡単デジタルラジオキット」つくる、鯖江専用ラジオ

2018/04/26
#IchigoJam #maker #radio 

福井高専学生時代、アマチュア無線同好会にも所属。モールス信号を覚えて、アマハム3級を取得。でも、一度も無線機を触ることなく卒業。

長い休眠期間を経て、近年復活した「福井高専アマチュア無線研究会 - JA9YDB」との縁もあって、無線の勉強。

周波数別にいろいろ使われる電波、アマチュア無線ならではの短波(HF)を使うと電離層に電波を反射させ、インターネットも電話線も衛星も使わず、なんと世界とも通信できてしまうらしい。

世界中の子供たちが、IchigoJamのプログラムを送受信することを夢見て、まずは手軽に扱える電波、FMを使って実験開始。(FMは、超短波(VHF)を使った周波数変調の放送)


こちら、aitendoで500円「世界一?簡単デジタルラジオキット」を使った、福井で聞ける3局のみ受信できるFMラジオ。 DSPラジオ、RDA5807HSを使ったモジュールをIchigoJamのI2Cコマンドでコントロール!


たったこれだけの部品で、FMラジオができてしまう。
小さいタクトスイッチはおまけ。ラジオを鳴らすだけなら不要。アンテナ代わりにイヤホンを接続。


DSPラジオモジュールは、テープやペンチで押さえてはんだづけ。フラックスを塗ると楽です。


ラジオとIchigoJamの接続、ミニユニバーサル基板で、IchigoJamのCN5のI2Cの並びに変換。もちろんジャンパーワイヤーで接続でもOK!VCC-3.3V/GND/SCL/SDAの4本。

I2Cコマンドで、5byte送ってコントロール。周波数freq(MHz)は下記で求めた16bitの数を、先頭2byteにビッグエンディアンで設定。

4 * (freq * 1000000 + 225000) / 32768

この計算はIchigoJam BASICで普通にやるとオーバーフローしてしまうので、32bitまで扱えるArmマシン語の力をちょっと借ります。
freqを79.1MHzを7910と10kHz単位で表すことにして、上記の式を変形

((7910 * 10 + 225) * 1000) >> 13

これをasm15マシン語で分解するとこのようになります(R0*=R1 は R0=R0*R1 の意味)

R1=10 R0*=R1 R1=225 R0+=R1 R1=10 R0*=R1 R0*=R1 R0*=R1 R0=R0>>13 RET

アセンブルしたものを使うと、下記のように設定する数値が求まります(検算してみましょう)

POKE#700,10,33,72,67,225,33,8,68,10,33,72,67,72,67,72,67,64,11,112,71 OK ?USR(#700,7910) 9683 OK

あとは下記コマンドで鳴るはずです(受信可能な周波数を調べて設定ください)

F=USR(#700,7910):POKE#800,F>>8,F,#18,#16,0:?I2CW(96,#800,5)

鯖江で受信可能な3局、たんなんFM(79.1MHz)FM福井(76.1MHz)NHK福井放送局(83.4MHz)をボタンで切り替えるプログラムはこちら

10 LET[0],7910,7610,8349 20 ?[N] 30 POKE#700,10,33,72,67,225,33,8,68,100,33,10,34,81,67,72,67,64,11,112,71 40 F=USR(#700,[N]):POKE#700,F>>8,F,#18,#16,0:?I2CW(96,#700,5) 50 WAIT30 60 IF BTN()=0 CONT 70 N=N+1:IF [N]=0 N=0 80 GOTO 20

受信中はLEDが光るようにちょっと改造

45 LED1 65 LED0

128x64のOLEDディスプレイを使って、受信中の周波数を表示用の追加コード

5 GSB@INIT:GSB@CLS 25 F=[N]:CLS:?F/100;".";F/10%10 26 FORI=0TO3:X=2+I:Y=8:GSB@LC:C=PEEK(#900+I):GSB@PUTC:NEXT 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

人が聞くのではなく、機械が聞くラジオにするべく、次はFMトランスミッタと信号のデコードに挑戦してみたいところです。

身の回りにたくさんある見えない線、無線。スマホ、WiFi、飲食店での呼び出しボタン、ラジオ・テレビなど身近な電波の正体に迫ってみましょう。

Nintendo Laboでサーボを動かす方法 / IchigoJamの楽器として使うNintendo Laboと電子工作

2018/04/22
#KidsIT #IchigoJam #maker 

Nintendo Laboを使ったプログラミング。Joy-Con(R)についているIRカメラで電子工作!
IchigoJamからLaboへは赤外線LEDで、LaboからIchigoJamへは光センサーが活躍します。

IchigoJamからNintendo Laboをコントロール

Nintendo LaboをIchigoJamの楽器にしてみよう。

赤外線LEDを用意して、IRカメラに向かって光らせると「IRカメラ(赤外線OFF設定)」に白く認識。
これを「スポイト」で「音をならす」や「振動」につなぐだけ。

(かわくだりゲームに効果音と、終了時の振動を追加した動画)

準備するもの
- IchigoJam 1500円〜2000円くらい
- 赤外線LED 5コ100円(10コ150円100コ950円


目に見えない赤外線LED、IRカメラには見えてます!


OUT3 OK OUT1 OK OUT2 OK OUT0 OK

OUT3 で、赤外線LEDを2つとも光らせて、IRカメラで反応する場所を確認して、その場所にスポイトをセット!


スポイトの設定はデジタル、範囲をいい感じに調整しよう。

5 OUT1:WAIT30:OUT0 10 CLS:X=16 20 LC X,5:?"O" 30 LC RND(32),23:?"*" 35 WAIT3 36 X=X-BTN(LEFT)+BTN(RIGHT) 37 IF SCR(X,5) OUT2:WAIT30:OUT0:WAIT30:GOTO5 40 GOTO20

かわくだりゲームに、OUT1で効果音(5行)、OUT2でゲームオーバー時の振動(37行)を加える改造を施したもの。


赤外線LEDの場所とIRカメラ(Toy-Con(R))の位置を固定する治具を作って置くと良い感じ。
IRカメラを広くとって、暗い箱の中にいれ、ピアノのように、赤外線LEDをたくさん並べるとコントロールの幅が広がります。

Nintendo Laboでサーボを動かす

今度は逆に、光センサーを使って、Nintendo LaboからIchigoJamをコントロール!

(Toy-Con(L)のスティックでサーボを操っている動画)


IRカメラの赤外線発射機能「IRひかる」を使って、Nintendo LaboからIchigoJamへ信号を送ろう。 光センサーで受け取った信号に応じて、サーボを動かすプログラムをIchigoJamで作っておけばできあがり!

準備するもの
- IchigoJam 1500円〜2000円くらい
- 光センサー(フォトトランジスタ) 2コ100円
- 10kΩの抵抗 100コ100円
- サーボ SG-90 400円
- ジャンパーワイヤー 60本220円
- ブレッドボード 130円


IchigoJamに、ジャンパーワイヤーVCC(赤)、IN2(オレンジ)、GND(青)を3本さす。
ブレッドボードに赤、オレンジ、3つ飛ばして、青とさす。
赤をさした列にフォトトランジスタの長い方、オレンジに短い法をさす。
オレンジの列と、青の列に抵抗(10kΩ)をさす。*抵抗に向きはない

テストプログラム

10 ?ANA(2):WAIT10:CONT RUN

Nintendo Laboで「タッチ」と「IRひかる」をつなぎ、光らせて値がどう変わるか観察しよう。

10 IF ANA(2)<300 CONT 20 CLT 30 IF ANA(2)>250 CONT 40 T=TICK():?T 50 GOTO 10

IchigoJamで光っている長さを測るプログラム。「IRひかる」の光る長さを変えて実験!

「IRひかる」光る長さを0.00のものと、0.14前後のもの、2つ用意して、タッチやスティックで光るようにセット。
サーボとIchigoJam、茶色をGNDへ、赤を5Vへ、オレンジをOUT2へつなぐ。
IchigoJamのプログラムに光っている長さに応じて、サーボを動かすプログラムを追加。

41 IF T<15 PWM 2,200 42 IF T>=15 PWM 2,60

Joy-Conのスティックでサーボが動きます!
IchigoJam単体でコントロールできるサーボの数は4(OUT2、OUT3、OUT4、OUT5)
Nintendo Laboからの信号を受け取って、どの動かすかは自由自在!

光センサーで「画面ひかる」を検出したり、加速度センサーでJoy-Conの振動を検出したり、サーボでマーカーを振ってみたり、つなぎ方いろいろ、遊び方いろいろ。

赤外線LEDと赤外線受光モジュールを使って、家電の制御とつなぐことも!?
DMM 4K対応、プログラマブル学習リモコン by IchigoJam / Programmable IR receiver and sender

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

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

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