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

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

記憶に残る日。若者に世界が見える体験を! One Young World 2017 福井報告会

2018/04/21
#doc #KidsIT #IchigoJam #fukui #PCN #web 

コミュニケーションとは「伝えること」ではなく「伝わること」
今まで誰からどんな衝撃をもらって、今の自分が在るのか?
自分は、相手に何をプレゼントできるか?

社会をより良くするため、例え小さくても押し続けよう


2015年のバンコク開催に参加した白崎さん。
法律で、テロとどう戦うかの議論中に現れた青年。 難民キャンプで子供向けに自由に夢を描いてもらうアートワークショップでテロの連鎖を止めようとしている話に衝撃を受けた。


日本初の都道府県選出代表、福井県で選ばれた、中嶋さんによる報告。


「Fukui to the World」
頭をガツーンとやられたような、ショッキングな体験。この積み重ねが人生。
1年で記憶に残っている日は何日ある?と、若きリーダーに向けて問いかける、大久保さん。
One Young World 国際本部メンバー、Japan Committee 委員長

福井から始まった、県選出モデル。
都道府県すべてから一人ずつ日本代表が選出され、世界とネットワークを作ってくるビジョン!


196カ国1300人の若きリーダーが集まる濃密な4日間を紹介。
環境、貧困、平和、そして、教育など、世界共通の課題のセッション。
各国の若きリーダー、SDGsの内、何が最も重要か?話し合い、発表したワークショップ。
食事の時間も貴重なお話時間。インドの女性と仲良くなって、贈り物が後日届けてくれたとのこと!


PCNとして福井を中心に「こどもプログラミング」を広める活動、コロンビアでも!

1 IF BTN()=0 GOTO 1 2 OUT 1:WAIT 60 3 OUT 0:WAIT 60 4 GOTO 2

誰かがボタンを押してくれたら、1秒おきにモーターを回したり止めたりしてくれるロボットのIchigoJam BASICによるプログラム。

手順番号、1〜4でロボットにやってほしいことを伝えます
1. もし(IF)、ボタン(BTN)が押されていなかったら(=0)、1へ行け(GOTO1)・・・ボタンが押されるまで待つ
2. モーターなどを回せ(OUT 1)、そして、60数えるまで待て(WAIT 60 = IchigoJam時間で1秒を意味する)
3. モーターなどを止めろ(OUT 0)、そして、60数えるまで待て(WAIT 60)
4. 手順番号2へ行け(GOTO 2)

毎秒5000万回をも計算する、たった100円のコンピューターにやってほしい想いを伝えるのがプログラミング。 伝わったかどうかはコンピューターは瞬時にメッセージや、結果で応えてくれるのがいいところ。


日本にもある、世界に目を向けるきっかけ。
ベトナムから参加の起業体験イベント「Startup Weekend Fukui」や、アフリカからの留学生のためのict4e会社説明会などを通じて、興味を持ったとのこと。


最後に中嶋さん、今後の活動として「こどもプログラミング」へのコミットを表明!(左から、遠路敦賀から参加の元気な高校生、大久保さん、中嶋さん)
やりましょう!


昨年つながった、アフリカ、ルワンダ。
今年も10月子供たちへのワークショップを企画中のict4e/ict4r代表の原さんと白崎さん
ルワンダ語版IchigoJamプログラミング教材「IchigoJam print in Rwandan」アリマス!


中嶋さん報告にもあった、平和セッションでのルワンダ代表からの体験談ほかハイライト動画


オランダ、ハーグで開催、OYW2018
語学力より大事なこと、「社会をより良くしたい」という想い。

「one web」をミッションとするwebを始め、日々誕生する、かつて存在しなかった様々な世界をつなぐツール達。 各国言語に対応した認識&読み上げ、翻訳に対応する「UDトーク」や「Google翻訳」がある今、怖がる理由はなくなりました。 必要なのは、一歩踏み出す勇気だけ。

みんなで作る、ひとつの世界。
One Young World」体験したい人、ぜひアクションを!

世界もひとつの地域。
体験なしに理解するのは難しい。

links
- One Young World | One Young World Japan Committee - OYW日本委員会
- How to attend the Summit | One Young World - OYW本部 2018開催
- W3C Mission
- 日本企業も注目していくべき?世界で輪が広がっている「One Young World」とは | ビッグライフ21 Biglife21

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

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検定

プログラミングで楽しく学ぶ「分数の足し算 / IchigoJamプリント」 - IchigoJam検定をリリース!

2018/04/18
#IchigoJam #KidsIT 

鯖江の小学校の算数の先生に、つまづきやすいポイントを聞くとやはり多い「分数」。
分数を数と訳した大失敗はひとまず置いておき、分数の足し算の解き方はプログラムそのものです。


分数計算プログラムで、1/5 + 2/8 を計算した様子

10 ?"A/B+C/D=" 20 INPUT "A?",A 30 INPUT "B?",B 40 INPUT "C?",C 50 INPUT "D?",D 60 F=B*D:E=A*D+B*C 65 FOR I=F TO 2 STEP -1 66 IF F%I=0 AND E%I=0 F=F/I:E=E/I 67 NEXT 70 IF F=1 ?E ELSE ?E;"/";F

作り方をIchigoJamプリントとしました。思う存分改造して、分数という罠を突破しましょう。

分数の足し算(算数) PDF

漢字を習っていない子供向けにも!

ぶんすうのたしざん(さんすう) PDF

IchigoJamの理解度をチェックする、IchigoJam検定をリリースしました!
2018年春「IchigoJam検定」を開始いたします! 〜2020年のプログラミング教育必修化に向け「IchigoJam」をお役立てください〜

links
- プログラミングの理解度をはかる「IchigoJam検定」小学生以上を想定 | リセマム
- 子どもパソコン「IchigoJam」がスキルを計る検定を開始 | ICT教育ニュース
- 分数が分かるアプリ
- 小学校で分数は教えるな!分数は数ではない 数の教育探求

デジタル指点字、6点式体表点字デバイスをIchigoJamで作る方法。代表が中学生のPCN支部誕生!

2018/04/17
#IchigoJam #braille #KidsIT 

指点字。見えず聞こえない、盲ろうの教授、福島智さんの本「ことばは光」に登場する、コミュニケーション手段です。 指の感覚というインプットを使い、6点で1文字を表す点字を、話し手から両手の人差し指、中指、薬指の6指使って受信する。

振動モーターを使った長谷川さん考案の体表点字の応用として、6つの振動モーターに拡張する回路を書いて、作ってみたのがこちら。

被験者は福井大学教育学部附属義務教育学校(以下、福大附属)科学部の小林くん
分かりそう!との声。

3Vで動き、100mA程度消費する、振動モーター(円盤型、2コ100円)を動かすには、せいぜい10mA程度しか流せないIchigoJamのOUTポートでは力不足。 そこで登場、電気信号で切り替えるスイッチ、MOSFET(モス・エフイーティー)、2N7000。 VGSthというしきい値が、2.1Vなので、OUT命令で3.3Vを出力するIchigoJamにぴったり。MOSFETの出力電流(ID)も200mAと振動モーター1つ駆動に十分です。


FAIRCHILD 2N7000 データシートより)
G(gate)に電圧をかけるとON、D(drain)からS(source)へと電流が流れます。

6つの振動モーターを制御するために、6つのMOSFETを配置します。
こういう時は紙と鉛筆(ボールペン)が便利、ちょうどいい配置が見つかりました。

Sを真ん中に一直線に配置し、GNDに接続。
振動モーターは3.3VからDをつなぐピンソケットに接続。
Gの隣にOUT1-6から配線。

IchigoJam用の拡張基板の工作には、aitendoの信号名入りユニバーサル基板[P-JAM-EXT-U]が便利です。
IchigoJam Tについている3.3Vは、最大300mA、振動モーター6つ(600mA)には不足するので、IchigoJamのCN5の5Vから電源をとって、別途レギュレーターで3.3Vをつくります。
手元にあった500mAのレギュレーターを2つ並べましたが、最大2Aのレギュレーター(2コ100円)がきっとシンプル。


振動モーター6つをマスキングテープで腕の貼り付け、動作確認。いい感じに震えます。

10 FOR I=0 TO 63 20 OUT I:WAIT 10 30 OUT 0:WAIT 60 40 NEXT 50 GOTO 10

6点、6bitで順番に出力するテストプログラム
(点字について、創ろう!攻殻機動隊の世界、体表点字で有線編 - 高専カンファレンス in 高尾2018 kosenconf-118takao // Speaker Deck


音声合成ボードの使い方とI2Cを紹介。いろいろしゃべらせて遊びながら夢広がっている様子。
大きな音が鳴るようにすると、関心引きそう。AIスピーカーは創れる!
しゃべるIchigoJamで、聞くプログラミング - 音声合成版ブラインドプログラミング


力強い看板「科学部」の先には・・・


天国がありました!ジャンクで創造、そして、販売へのチャレンジも楽しいかも!?
自分で創ったモノを売ってみよう!はじめてのしょうばい - 高性能温湿度計のつくりかた(SHT31編)


かわいいお魚。水族館プロジェクトがあるとのこと!


スッポン!なんと近所の川にもいるらしい。


中学生が代表するPCN支部、誕生へ!

代表の小林くん(右から2番目)は、はじめての人には教えられるけど、初級者向けにも教えられるようになりたいと意欲的。 附属幼稚園、福大教育学部の大学生、先生へと教えられる人は周りにたくさん!自分で設計して作っているという、自動ドアへもアドバイス。

メンバーで共有する、Twitterアカウントを作って、活動報告や、わからないこと質問などに使うと良いかも。 作った知見は、GitHubを使ってwebサイトとしての公開も効果的。いろんなツールを使いこなして、より良い社会を創っちゃおう!

すべての科目をプロジェクトベースで進める福大附属の新スタイル、子供たちが世界の教育を変えようと取り組む姿がスゴイ。日本の教育システム、まだまだポテンシャルありますねっ。

links
- プログラミングは勉強だってゲームに改造できる秘密の道具、福井大学附属中学校21世紀夢講座2017年から義務教育学校へ

音声読み上げで自学する和文モールス信号 on IchigoJam

2018/04/15
#IchigoJam #KidsIT 

読み上げてくれるとできるながら学習。
人間、複数の感覚から刺激されたことはよく覚えるようにできている。
なので、読んで、聞いて、手を動かして、作ってみて、考えてみるのがいい。

音声読み上げチップ AquesTalk pico x IchigoJam を使って、いままで覚えてこなかった和文モールス信号に挑戦。
100文字/分速度のモールス信号に続いて、かなをイロハ順に読み上げてくれるモノを作ってみました。

プログラムはこちら。配列に和文モールス信号が50コ、AquesTalk読み用のかなが50コ入れる。

10 LET[0],13,1313,3111,3131,311,1,11311,1131,331,1111,31331,1333,313,1311,33,31,333,3331,1331,3313,131,111,3,113,13113 20 LET[25],1133,13111,1113,133,3113,3133,3311,3333,31333,13133,33133,31313,31311,31133,31113,11313,33131,13311,33113,31131,13331,33313,13131,11,11331 30 LET[50],"i","ro","ha","ni","ho","he","to","ti","ri","nu","ru","wo","wa","ka","yo","ta","re","so","tu","ne","na","ra","mu","u","i" 40 LET[75],"no","o","ku","ya","ma","ke","fu","ko","e","te","a","sa","ki","yu","me","mi","si","e","hi","mo","se","su","n","da","pa" 100 FOR I=0 TO 49 110 ?[I],STR$([50+I]) 120 N=[I]:GSB@MORSE:WAIT 30 130 S=[50+I]:GSB@TALK:WAIT 30 140 NEXT 150 END 200 @MORSE:S=100 210 P=10:W=360/S:IF W<10 W=-36*261/S*10 220 B=10000:FOR J=0 TO 4:M=N/B%10:IF M<0 M=M+6:N=N+35536 230 IF M LED1:BEEP P,600:WAIT W*M:BEEP0:LED0:WAIT W 240 B=B/10:NEXT 250 WAIT W*3 260 RTN 300 @TALK:U=I2CW(#2E,S,LEN(S)):U=I2CW(#2E,13):RTN

ハマったポイントは、3と1とで表していたモールス信号、5文字の33000以上だと16bit正数の上限を越えて、値がマイナスになってしまう。
マイナスになった時は、適度な数を足して補正。(置換が使える環境であれば、3の替わりに2にしたほうが簡単)

工夫したポイントは、WAITのマイナス値指定を使うことで、1/(261*60)秒単位で待ち時間を調整し、より正確なモールス速度を実現している。200行のSを変更してみよう!
IchigoJam BASICリファレンス WAITの項目参照、IchigoJam web は未対応)

Nに符号化したモールス信号をセットして、呼び出す。下記は、有名なSOSの発信。

N=111:GSB@MORSE:N=333:GSB@MORSE:N=111:GSB@MORSE

links
- IchigoJam モールス信号エンコーダー アルファベット編
- モールス符号 - Wikipedia

格安7セグディスプレイ「LED&KEY」を使ってカチカチカウンターづくり、TM1638 x IchigoJam用マシン語SPIドライバの作り方

2018/04/14
#IchigoJam #asm 

7セグディスプレイ、LED、タクトスイッチがそれぞれ8つずつ実装済みで、AliExpressでは$1.5、Amazonでは2コで850円で売ってる謎の商品、LED&KEYを使ってカウンタづくり。 TM1638というSPIというスーファミのコントローラーなどと同様のよくある信号方式でコントロールできるとのこと!(IchigoJam(10) : Yoshiのブログより)

まずはハードウェア的にIchigoJamと接続。ちょうどいいことにIchigoJamの拡張端子CN4のVCC,GND,OUT1,OUT2,OUT3の並びで使えそうです。

裏面にピンソケット、L字ピンヘッダー、ピンヘッダーをはんだづけして、準備完了。
STBをOUT1で、CLKをOUT2で、DIOをOUT3でコントロールします。

SPIは、指揮者がタクトを振った時に楽譜を見てその音を鳴らす的な通信方式なので、BASICでも実現できます。ただ、パッとすばやく書き換えたいときにはマシン語の出番です。

10 POKE#700,112,181,12,24,24,75,25,166,143,32,0,34,90,96,0,240,32,248,1,34,90,96,64,32,0,34,90,96,0,240,25,248,1,34,90,96,192,32,0,34,90,96,0,240,18,248,8,37,32,120,48,92,98,120,210,1,16,68,0,240 20 POKE#73C,10,248,96,120,64,8,0,240,6,248,2,52,1,61,241,209,1,34,90,96,112,189,8,33,1,34,2,64,146,0,154,97,2,50,154,97,64,8,1,57,246,209,112,71,0,0,1,80,63,6,91,79,102,109,125,7,127,111 RUN

配列に表示したいパターン番号を入れて、マシン語呼び出しで表示されます。

[0]=1:U=USR(#700,#800)

こちら、ぐるぐると描画するデモプログラム

100 FORJ=1TO100 110 U=USR(#700,#800):N=7 120 [N]=[N]+1:IF[N]=10[N]=0:N=N-1:IFN>=0CONT 130 NEXT 140 WAIT30 200 FORJ=1TO20 210 FORI=0TO7:[I+8]=RND(10)+RND(4)<<8:NEXT 220 U=USR(#700,#800+16) 230 NEXT 240 WAIT30 250 GOTO100

書き込んだマシン語のデータの末尾10byte(#76C-#775)は、7セグディスプレイ用のパターンデータです。 0を小さな0に変更してみましょう

POKE#76C,#5C:U=USR(#700,#800)

元に戻す時はこちらでOK(#3F=63)

POKE#76C,#3F:U=USR(#700,#800)

オリジナルなパターンを表示したい場合は、#776以降を使って10以降の数字を指定すればOK

POKE#776,6,88,116,221,92,14,220,212 FORI=0TO7:[I]=I+10:NEXT:U=USR(#700,#800)


IchigoJam、と、ムリヤリ表記


7セグメントディスプレイのパターンづくりに作成「7seg sim
いろんな演出をしてみたり、ゲーム電卓風な遊びもできますね!
「ゲーム電卓」って何? 80年代で大人気だったものをカシオが復活

配列にいれるのも面倒な場合、マシン語へ呼び出す数を指定するだけ表示版が便利です

10 POKE#702,152,70,4,70,25,79,25,166,143,32,0,34,122,96,0,240,33,248,1,34,122,96,7,37,64,32,0,34,122,96,0,240,25,248,1,34,122,96,192,32,40,68,40,68,0,34,122,96,0,240,16,248,32,70,10,33,192,71,4,70 20 POKE#73E,8,70,48,92,0,240,8,248,0,32,0,240,5,248,1,34,122,96,1,61,226,213,8,33,1,34,2,64,146,0,186,97,2,50,186,97,64,8,1,57,246,209,112,71,0,0,1,80,63,6,91,79,102,109,125,7,127,111 RUN

使い方は簡単、数を入れてマシン語を呼び出すだけ(12345を表示する場合)

U=USR(#700,12345)

プログラム領域の末尾(#FFE-#FFF)を使って数を保存するテクニックを使い、電源を切っても途中からカウントできる、カウンターを作ってみました。

10 POKE#702,152,70,4,70,25,79,25,166,143,32,0,34,122,96,0,240,33,248,1,34,122,96,7,37,64,32,0,34,122,96,0,240,25,248,1,34,122,96,192,32,40,68,40,68,0,34,122,96,0,240,16,248,32,70,10,33,192,71,4,70 20 POKE#73E,8,70,48,92,0,240,8,248,0,32,0,240,5,248,1,34,122,96,1,61,226,213,8,33,1,34,2,64,146,0,186,97,2,50,186,97,64,8,1,57,246,209,112,71,0,0,1,80,63,6,91,79,102,109,125,7,127,111 30 N=PEEK(#FFE)|PEEK(#FFF) 40 U=USR(#700,N) 50 IF BTN() CONT 60 IF BTN()=0 CONT 70 N=N+1 80 U=USR(#700,N) 90 POKE#FFE,N>>8,N 100 SAVE 110 GOTO 50

Yoshiさんのプログラムを元に、タクトスイッチ読み込みもマシン語化してみました。
(DIOにIN3ではなくOUT3を使っている点に注意、タクトスイッチのどれかを押すとカウントアップモードになります)

10 'TM1638 15 POKE#700,18,75,8,33,1,34,2,64,146,0,154,97,2,50,154,97,64,8,1,57,246,209,112,71,12,75,128,34,18,2,154,24,17,104,6,180,4,32,65,64,17,96,0,33,0,32,0,34,154,96,26,105,138,64,210,8,16,68,2,34,154,96 16 POKE#73E,1,49,8,41,244,209,6,188,17,96,112,71,0,0,0,0,1,80 20 LET[80],#3F,#06,#5B,#4F,#66,#6D,#7D,#07,#7F,#6F,#77,#7C,#39,#5E,#79,#71 30 GSB@HELLO:OUT1,1:OUT2,0:D=7:GSB@DSPON 40 @LOOP1:N=N+1:GSB@GETKEY:[8]=K:N=N+1 50 IF K B=16:GSB@SETNUM:GSB@DSP7SEG:GSB@HELLO:GOTO@LOOP1 60 GSB@DSP7SEG:W=[0]:FORI=0TO6:[I]=[I+1]:NEXT:[7]=W:GOTO@LOOP1 70 @HELLO:LET[0],0,0,0,#76,#79,#38,#38,#3F:RTN 80 @SETNUM:W=N:FORI=7TO0STEP-1:[I]=[80+W%B]:W=W/B:NEXT:RTN 100 @DSPON:OUT1,0:U=USR(#700,#88|D):OUT1,1:RTN 110 @DSPOFF:OUT1,0:U=USR(#700,#80):OUT1,1:RTN 120 @DSP7SEG:OUT1,0:U=USR(#700,#40):OUT1,1:OUT1,0:U=USR(#700,#C0) 130 FORI=0TO7:U=USR(#700,[P+I]):U=USR(#700,[8]>>I&1):NEXT:OUT1,1:RTN 140 @GETKEY:K=0:OUT1,0:U=USR(#700,#42):FORI=0TO3:K=K|USR(#718,0)<<I:NEXT:OUT1,1:RTN

asm15マシン語のソースはこちら。

@SPIW1 R3=[@GPIO1]L R1=8 @LOOP R2=1 R2&=R0 'F=N>>I&1 R2=R2<<2 [R3+`110]L=R2 ' OUT2,0:OUT3,F R2+=2 [R3+`110]L=R2 ' OUT2,1 R0=R0>>1 R1-=1 IF !0 GOTO @LOOP @END RET @SPIR1 R3=[@GPIO1]L R2=#80 ' GPIO1DIR OUT3 to IN7 R2=R2<<8 R2=R3+R2 R1=[R2]L PUSH {R2,R1} R0=4 R1^=R0 [R2]L=R1 R1=0 R0=0 @LOOP R2=0 [R3+`10]L=R2 ' OUT2,0 R2=[R3+`100]L ' IN(7) (== OUT3) R2<<=R1 R2=R2>>3 ' ?2 R0+=R2 R2=2 [R3+`10]L=R2 ' OUT2,1 R1+=1 R1-8 IF !0 GOTO @LOOP @END POP {R2,R1} [R2]L=R1 RET @GPIO1 DATA L #50010000

SPIの書き込みと読み込み(IchigoJam BASICでOUT3,-1で入力にするとアナログ設定になるので、デジタルのまま入出力の方向をマシン語で切り替えています)

数値直接用ドライバでは、R3レジスタを使った除算を使います。

PUSH {LR} R1=10 GOSUB R3 POP {PC}

Armマシン語で10で割るテスト

POKE#700,0,181,10,33,152,71,0,189 ?USR(#700,1234) 123

割り算を呼び出すと、R1に余りが入った状態にしてくれます。

PUSH {LR} R1=10 GOSUB R3 R0=R1 POP {PC}

Armマシン語で10で割った余りを求めるテスト

POKE#700,0,181,10,33,152,71,8,70,0,189 ?USR(#700,1234) 4

これを使った数値直接表示ライブラリのプログラム。

@LEDS PUSH {R4-R8,LR} R4=R0 R8=R3 ' divide func R7=[@GPIO1]L R6=@PTN7SEG R0=#8F ' display on #88+7 R2=0 [R7+`001]L=R2 GOSUB @SPIW1 R2=1 [R7+`001]L=R2 R5=7 @SENDLOOP R0=#40 R2=0 [R7+`001]L=R2 GOSUB @SPIW1 R2=1 [R7+`001]L=R2 R0=#C0 R0+=R5 R0+=R5 R2=0 [R7+`001]L=R2 GOSUB @SPIW1 R0=R4 R1=10 GOSUB R8 R4=R0 R0=R1 R0=[R6+R0] GOSUB @SPIW1 R0=0 GOSUB @SPIW1 R2=1 [R7+`001]L=R2 R5-=1 IF !MI GOTO @SENDLOOP POP {R4-R8,PC} @SPIW1 R1=8 @LOOP R2=1 R2&=R0 'F=N>>I&1 R2=R2<<2 [R7+`110]L=R2 ' OUT2,0:OUT3,F R2+=2 [R7+`110]L=R2 ' OUT2,1 R0=R0>>1 R1-=1 IF !0 GOTO @LOOP RET @GPIO1 DATA L #50010000 @PTN7SEG DATA B #3F,#06,#5B,#4F,#66,#6D,#7D,#07,#7F,#6F

links
- はじめてのマシン語 - IchigoJamではじめるARMマシン語その1
- 54byteのスーファミコントローラドライバ、IchigoJam BASICとマシン語でつなぐ極上のコントローラ
- IchigoJam(10) : Yoshiのブログ (TM1638をIchigoJam BASICでコントロール)

IchigoJam モールス信号エンコーダー アルファベット編

2018/04/13
#IchigoJam #KidsIT 

PCN秋葉原Assemblageにて出会った、ハムつながり!
学生時代、モールス信号覚えてとったあアマチュア無線の免許。目に見える文字やモノを頭のなかでモールス信号にする訓練。

まずはシンプルなキーボードで打ったキーをモールス信号として出力するプログラムづくり。

モールス信号エンコーダー アルファベット編 (RUN on IchigoJam web)
Web Audio API を使って、サウンド出力にも対応している IchigoJam web でも動きます!

Aとタイプすると、ピピーっと鳴って、LEDも合わせて光ります。
いろいろ打っていると、なんとなく覚えられちゃいますよ。


本日、鯖江でKidsVenture&PCNミーティング
すべてのこどもたちにプログラミングを!

IoT for everyone! 大人IoTプログラミング体験 at Salesforce.com Tokyo Marunouchi

2018/04/12
#IchigoJam #IoT #KidsIT 

東京丸の内、世界一のCRMソフトウェア企業、セールスフォース・ドットコムにて、IoTプログラミング体験会。

こどもIoTハッカソンの流れに沿って、IchigoJamを使ったはじめてのプログラミング&電子工作&ネットワークづくり、そして、sakura.ioを使ったはじめてのIoTとアイデアソンまで!


IoTの前に「T」できた!(セールスフォース・ドットコムのみなさま!)


翔泳社デブサミでお会いした、セールスフォース・ドットコムの阿部さんも共同著書のIchigoJam紹介本つながりも!
子どもに読んで伝えたい!おうちではじめるプログラミングの授業 (SHOEISHA DIGITAL FIRST) | 阿部 崇, 平 初 |本 | 通販 | Amazon
子ども向けパソコン「IchigoJam」どこで買う?~はじめてのプログラミングキット購入とセットアップ (1/2):EdTechZine(エドテックジン)」 by レッドハット 平 初さん


まずはコンピューターの基本要素、インプット、アウトプット、電源の3点つなぐセットアップから


ディスプレイ、キーボードを外して、ボタンを押しながらスイッチON、モノがプログラミングできました
映画マトリックス、最終シーンの主人公ネオように、社会に潜むコンピューター達の息遣いが聞こえますか?


かわくだりゲームで学ぶアプリケーションの基礎、子供も大人もワーっとなる、魔法のコマンド、GOTO20
100円だって5000万回、コンピューターの繰り返し速度だって超高速(動画


今回の新アイテム、1つ40円の温度センサー(MCP9700-E/TO


平らで字が書いてある方を上に、足が右をむくようにおき、IchigoJamのCN4のGND/OUT1/OUT2に差し込みます
OUT1を入力(IN5)へ切り替え、アナログ信号入力コマンドANA(5)で温度に連動する数が取得できます
指で温めるとじわじわ上がる温度、飲み物で冷やすとどんどん下がる


値段の違いは、精度の違い。
原価の把握と必要最小現のスペックを見極めるがIoTビジネス成功の秘訣!


デバイスに刺さっているSIMカードが見えますか?
いよいよIoT、鯖江市営バスでも活躍、月額65円で1万回(日付除いて、最大1.2MB送受信)通信できる4Gデバイス sakura.io をつなぎます。

即興でもつくれちゃう、IoTピアノ

10 GSB810:IF F BEEP N,30 15 WAIT10:GOTO10

スマホから数を送るとその数に応じて圧電サウンダー(30円)から音が奏でられます
12名でのIoT合奏団のできあがり!


復習用「こどもIoTハッカソン大人体験会」の資料(アイデアまとめなど少し加筆版)


もっとやりたい!ぜひオンラインショップもある「PCN(プログラミング クラブ ネットワーク)」へどうぞ!

丸の内だと、PCN直営、秋葉原のフラッグシップ店、ASSEMBLAGEも近いです
東京駅から3分、JR秋葉原駅の電気街口から徒歩1分!


楽しい時間、ありがとうございました!
IoT programming for everyone!


お花きれいなセールスフォース・ドットコム社内、アストロ&クラウディ、かわいい

links
- Salesforce - セールスフォース・ドットコム
- 寄せられた感想
- こどもIoTハッカソン
- Hana道場
- こどもパソコン IchigoJam - はじめてのプログラミングパソコン(1500円)

7bit x 8 = 7byte、IchigoJam用バイナリデータ圧縮法 Base128実装例

2018/04/11
#IchigoJam 

IchigoJamでつくるオリジナルキャラクター、たくさん作るとプログラムが溢れてしまいます。
じぶんだけのキャラをつくる / はじめてのプログラミングその19

そんなときに便利な圧縮技術。168byte、21コのキャラクターがわずかこの2行!

* 圧縮にカタカナを使ったので打ち込みはちょっと大変(-はハイフン、カタカナの長音記号は使いません)

メモリに書き込んであるデータを、効率よくプログラム形式に変換するプログラムのつくりかた。

IchigoJamのキャラクターを眺めると、アルファベットなどとカタカナだけで128文字分はありそうです。

128コのキャラクターは7bit分データを表せます。
8bit(=1byte)を表現するのに足りない1bit分を7つ集めて1つの文字とすればちょうどいい。
0-82の83文字を「,(44)」から「~(126)」、83-127を「ア(177)」から「ン(221)」にそれぞれ対応させることにしました。
デコードする時のプログラムサイズが短くなるように、いろいろと試行錯誤し、短く仕上げたものがこちら。

A=#700:N=#7A7-A+1:?"1 '";:FORJ=1TON/7+(N%7>0):[0]=0:FORI=1TO7:C=PEEK(A):A=A+1:[0]=[0]|C&128>>I:[I]=C&127:NEXT:FORI=0TO7:?CHR$([I]+44+50*([I]>82));:NEXT:NEXT:?

#700からの168byteをプログラム形式に変換するエンコーダープログラム(長さはNで調整)

逆に、メモリに書き戻すデコーダープログラムはこちら

A=#700:S=#C04:FORJ=0TO23:FORI=0TO7:C=PEEK(S):S=S+1:[I]=C-44-50*(C>176)+[0]<<I&128:NEXT:FORI=1TO7:POKEA,[I]:A=A+1:NEXT:NEXT

大きめで168byteまでのマシン語のエンコードにも使えます!

バイナリをテキスト化する方式では、たぶん最も有名なのは64種類の英数字を使ったBase64
今回作ったものはBase64にカタカナを加えて128種類に拡張したBase128的なものと言えますね。

他にも、IchigoJam用に考案されたBase16B15なども!
自分なりに使い勝手良いエンコード方式、考えてみるのも楽しいですよ。

links
- IchigoJamのメモリ内のバイナリデータをテキスト・プログラム化するツール ( パソコン ) - ボクにもわかる電子工作 - Yahoo!ブログ
- BASE16 : (株)田木屋商店 開発室

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