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

全10か所相互中継、第7回小中学生対象のプログラミングコンテスト「PCNこどもプロコン表彰式」

2017/10/01 23:55:00
#KidsIT #IchigoJam #IoT #maker 

PCN(プログラミング クラブ ネットワーク)主催の小中学生対象のプログラミングコンテスト、7回目となる「PCNこどもプロコン2017夏」の表彰式がありました。 賞が決まって、大喜びする子供達、賞を逃した子供達にも審査委員からのコメントと参加賞をお届けしますよ!

今回は、イギリスのラズベリーパイ財団とケニアのアイダーアフリカから、海外からの初の特別協賛!
シンガポール在住、チームラボの高須さんから子供たちへの講演からも、世界との近さ、感じてくれたはず!

創って、見せて、また創りたくなる。誰かの創ったのを見て創りたくなる。何かを創ることつながる、創る仲間に国境なし。創ること好きの輪、世界中に広げましょう!


サテライト会場の人も含めて記念写真!


全国9か所を相互中継!


IchigoJamで作られた「300円を入れたら利用できる富士山トイレ」
心打たれる、身近な社会課題に切り込んだ作品!


印象深い「スマホ使いすぎ防止マシーン」
ゲームしすぎと怒られた時代とは隔世の感がありますね!子供が親をマシーンでたしなめる時代です。


シンプルな機構、安定した動作、筐体のインパクト、大きな音(音量調整可能)。
抜群の完成度の高さを誇っと、足でひくピアノ「Step on(音) the piano(IchigoJam BASIC)」


アルミホイルとダンボール、各端子からの配線をブレッドボードにまとめ、音量は100均のアンプとスピーカーを改造して強化!


回線の契約がないiPod touchでもプログラムの受け渡しするために、画像化エンコード・デコードを独自研究によって実装、検証した作品「EasyAppExchange」 子供ならではの課題をテクノロジーで解決しちゃう感がナイス!


子供の作品にうなる大人


シンガポール、メイカーが大事すぎて大臣もメイカーに!?
国連で演説するヴェヴィアン外務大臣!


ヴィヴィアン外務大臣は、なぜつくるのか? → 楽しいから
大人だって楽しいからつくるのだから、子供はもっともっとつくって楽しんでほしい。
やってみないとわからない、つくってみないとわからないのは大人も子供も一緒!
じゃんじゃんつくって、たくさん失敗すればするほど強くなる!


仙台と福井をむすんだ、IoT(インターネット オブ シングス)デモ!
スマホに表示される距離センサーの値をみながら、福井のロボットを仙台からちゃんと制御できるのか!?
こどもでも遊べるIoT!ネットネイティブな子供にとってはネットにつながるのは極自然なことなのかも。


ラズベリーパイ財団賞には創始者Eben Upton(エベン・アプトン)さんも賞賛「スマホ使いすぎ防止マシーン」
お母さんのスマホ使いすぎを子供がオリジナルのマシンを発明して、注意する時代です!


アイ・オー・データ機器を授与する細野会長!いい笑顔です!


テレビ会議サービスZoomを使って双方向につないだ、各地サテライト会場となったPCNへ協賛賞パネルをこっそり事前送付。


今回は北海道から東京サテライトへ参加してくれたスマホ使いすぎ防止装置をつくった森下くん!


金沢から福井会場に来てくれました!


SwiftでiPhone用クイズアプリ「IchigoJam Mania」をつくったMASAHARU、永和システムマネジメント賞を受賞!


jig.jp賞は、Scratchでつくったカブトムシキャッチャー。吸引しちゃうアームがコミカル、採ったら減点のハエ、高得点の金のカブトムシ。得点計算の演出がかわいい!

副賞のIchigoJam詰め合わせに、楽しい「コンピューター付きフルカラーLED WS2812B」とその使い方も同梱。
IchigoJamプリント「WS2812Bでいろあそび」ぜひチャレンジしてみてください!

IchigoJam用に買った7インチディスプレイ、電源にACアダプターソケットがないことあり!?

はんだづけテクニックがあれば、大丈夫!(高電圧は危険なので気をつけて!)

審査委員として、CoderDojo から安川さんにも参加いただきました!
全国103か所以上の子どものためのプログラミング道場「CoderDojo」もぜひ訪ねてみてください!

経験値を貯めるほどに上がる、ものづくりレベル!
第8回もお楽しみに!

links
- PCNこどもプロコン

IchigoJamで計算する色相環、色相・彩度・明度を光の三原色に / HSV2RGB in BASIC

2017/09/30 23:55:00
#IchigoJam #maker 

虹みたいなグラデーション、色相を学んで自分で作ろう!
赤→橙→黄→緑→青→藍→紫→赤、と色がループするものと捉えるのが色相環。
色は、色相(Hue)と、鮮やかさ(発色の良さ)を彩度(Saturation)、明るさを明度(Value)でも表せます。


低価格コンピューター内蔵フルカラーLED「WS2812B」を使って、色相をぐるぐる変えてみました。


切ってもつないで自在に使えるWS2812B、3つだけカットし、ピンヘッダーを付けたコンパクト版。
5V/DI/GNDを、IchigoJamのVCC/GND/OUT1にそのままさして手軽に実験できます!

プログラムはこちら(10/20行はWS2812Bコントロール用マシン語)

10 POKE#700,240,181,114,182,64,24,80,33,9,2,1,49,9,4,4,136,1,48,128,37,1,48,3,120,255,34,74,96,3,39,10,38,43,66,1,208,10,39,3,38 20 POKE#728,1,63,253,209,0,34,74,96,1,62,253,209,109,8,239,209,1,60,234,209,98,182,240,189 100 POKE#800,3*3,0 110 V=30:S=80 115 FOR I=0 TO 359 STEP 1 120 H=I:GSB@HSV2RGB:POKE#802,G,R,B 130 H=I+60:GSB@HSV2RGB:POKE#802+3,G,R,B 140 H=I+120:GSB@HSV2RGB:POKE#802+6,G,R,B 145 U=USR(#700,#800) 150 NEXT 160 GOTO 115 500 @HSV2RGB 505 R=V:G=V:B=V:IF S=0 RTN 510 D=H/60%6:C=V-(59-H%60)*V/60*S/100:E=V-H%60*V/60*S/100:F=V*(100-S)/100 520 IF D=0 G=C:B=F 530 IF D=1 R=E:B=F 540 IF D=2 R=F:B=C 550 IF D=3 R=F:G=E 560 IF D=4 R=C:G=F 570 IF D=5 G=F:B=E 580 RTN

H、S、Vに値を指定して GSB@HSV2RGB で、光の三原色RGBに変換します。
Hは色相、0-360で指定します。0が赤です。
Sは彩度、0-100で指定します。100で一番鮮やか、0でモノクロ。
Vは明度、指定した値がRGBそれぞれの最大輝度になります。
変数C/E/Fを使っているので注意!
(変換方法の詳細は「HSV色空間 - Wikipedia」などを見てみよう)

WS2812Bを3つ、色相を60度、120度ずらしたものと合わせてグラデーションさせながら点灯させています。 110行の明度と彩度をいろいろ変えてみましょう。普通のフルカラーLEDをPWMで制御するものにも使えます!

彩度(S)を使わない HV2RGB だともうちょっとシンプル。

500 @HV2RGB 510 D=H/60%6:E=H%60*V/60 520 IF D=0 R=V:G=E:B=0 530 IF D=1 R=V-E:G=V:B=0 540 IF D=2 R=0:G=V:B=E 550 IF D=3 R=0:G=V-E:B=V 560 IF D=4 R=E:G=0:B=V 570 IF D=5 R=V:G=0:B=V-E 580 RTN

過去の一日一創作品より、色相関係をピックアップ

HSVの3パラメーターを3本指で!(マルチタッチ用)カラーセレクター / colsel」 2016年


簡単に色調が整えられる TinyHSVTinyHSV」 2013年


hsb2rgb」 2012年

色、たった3パラメーターなのに奥深い!

冷蔵庫IoT、25円の温度センサーで温度異常を検出せよ! IchigoJam x sakura.io x MCP9701

2017/09/29 23:55:00
#IchigoJam #IoT #maker 

冷蔵庫が壊れて温度上昇!?うっかり開けっ放しで外出してしまって大変!
そんな時、温度センサーをつなげた冷蔵庫IoTがあれば安心です。

温度センサーは誤差0.5度の高級なものもありますが、温度異常を調べるだけなら安くてOK。 相対温度の誤差1度のtempeXにも使われているMCP9700/MCP9701がお手軽です。


MCP9701-E/TO 温度センサーIC、8コで200円、1コあたり25円!
電源は3.1V-5.5VまでOKなので、IchigoJamの3.3Vを使いましょう。出力はアナログ電圧1度の変化が19.5mVの変化になるようです。


データシートからピン配置を調べると、平らな文字面を表にして左からVDD,VOUT,GND
IN2がアナログ入力なので、VDDをIN1へ、VOUTをIN2、GNDをIN4へ差し込みます(IN3はI2Cで使うので飛ばします)
次のプログラムで、温度の値がとれることを確認しましょう。(手で持って温めたりすると変化します)

10 OUT8,1:OUT11,0 20 ?ANA(2):WAIT10:CONT RUN 307 309 308 307

アナログ入力は、0V-3.3Vの変化を0-1023の値で教えてくれます。
19.5mVは、6.045の差。6変わったら1度変わったことになるので、6以上変化したらsakura.ioで通知してみましょう。(sakura.io x IchigoJam 接続方法

Nに送信したい値をいれて、GSB@SENDN で送るプログラムを準備します。

100 @SENDN:POKE#800,#21,10,1,76,N,N>>8,0,0,0,0,0,0,N>>8^N^102:U=I2CR(79,#800,13,#820,3):RTN

*即時送信バージョン(4Gの正式版はこれだけでOK!)

100 @Q:POKE#800,#20,10,1,76,N,N>>8,0,0,0,0,0,0,N>>8^N^103:U=I2CR(79,#800,13,#820,3):RTN 110 @SENDQ:POKE#800,#24,0,#24:U=I2CR(79,#800,3,#820,3):RTN 120 @CHK:POKE#800,1,0,1:U=I2CR(79,#800,3,#820,4):C=PEEK(#822)&~U:RTN 130 @SENDN 140 GSB@CHK:IF C<>128 WAIT30:?".":CONT 150 GSB@Q:GSB@SENDQ:?"SENT! ";N:RTN

*LoRaのα版/4Gのβ版は送信キューにいれる必要があります(回線状況チェック付きバージョン)

通信モジュールが1回点滅になるのを待ってから、sakura.ioのコンソール、WebSocketのページを見ながら、テストしてみましょう

N=15:GSB@SENDN OK

うまくいったら、温度異常を検出するプログラムを加えてできあがり!

1 'TEMP-D WATCHER 10 OUT8,1:OUT11,0 20 N=ANA(2) 30 @L 40 WAIT10:M=ANA(2):?"ANA(2) ";M 50 IF ABS(N-M)>6 N=M:GSB@SENDN 60 GOTO @L

ABSはabsoluteの略で、絶対値を求める関数です。差が6以上あったら、基準の値Nを書き換えて、送信!


どんどん温度が下がっていく様子が分かりますね!
* 注意、冷蔵庫内の冷媒に引火して火災になるリスク、湿度が高いため結露による故障リスクなどがあるので、短時間の実験までに留めておきましょう!

来週10/7、広島県尾道にて、
IchigoJamとsakura.ioを使った、プログラミングの基本からIoTづくりまでのセミナー開催決定!
【IoT入門】~はんだづけ、プログラミング、sakura.ioを使ったIoTづくりまでを実体験〜

ジョンバーガーのランチ付き!

7行のプログラムで捉えるアプリづくりの本質、研究イノベーション学会にて講演、オープンデータ活用人材の育成と成果

2017/09/28 23:55:00
#opendata #KidsIT #IchigoJam 

魚沼産が有名なコシヒカリが実は福井産なように。
イギリスで生まれのオープンデータにこどもパソコンムーブメント、鯖江で大きく育てます!

研究・イノベーション学会、プロデュース研究分科会にて講演と、 イギリスつながり、ZESDA代表の桜庭大輔さんモデレートによるミニパネル。
大学からの技術移転(TLO = Technology Licensing Organization)を手がけるキャンパスクリエイトの安田さん、須藤さんとの出会いも貴重です!

桜庭さんの掲げる「タテ」から「ヨコ」へ、さまざまな業界での集中によって磨かれてきた日本の技術や文化、「ヨコ」や「ソト」にちょっとつなげて起こる化学反応、熱いですね!
ベトナムで開催された『APEC BEST Award2017』にて、和える代表の矢島が『APEC BEST Award(大賞)』」(日本の伝統工芸xこども、aeru

こちらオープンデータとIoT、こどもプログラミングによって加速する鯖江イノベーションについて話したスライドです。

今回の参加者中、プログラミング経験ある方は3割ほど。
子供も大人もひとまず体験してもらう、かわくだりゲームのロジックをさらっと紹介。

10 CLS:X=15 20 LOCATE X,5:?"O" 30 LOCATE RND(32),23:?"*" 35 WAIT 3 36 X=X-BTN(LEFT)+BTN(RIGHT) 37 IF SCR(X,5) END 40 GOTO 20

初期化(10行)と繰り返し(20-40行)が基本構造。
スピード調整にウェイトをいれて(35行)、押したら反応(36行)、当たったら終了(37行)
と、とってもシンプルですが、普段使っているアプリの基本構造そのものです。

ちょっと応用してゲームプログラム「CURSOR」をつくりました。
あなたは、コンピューターの指示に従って、すばやくカーソルの上下左右を押さなければなりません。
無事、10回正確に押すことができたら、コンピューターが評価してくれます。


タイトル画面、スタート待ち、ゲーム中、スコア表示、そして、タイトルへ。
このように画面は移り変わっていきますが、それぞれの構造が単純に増えているだけだとわかります。

10 CLS:LC13,8:?"CURSOR" 20 WAIT180:CLK 30 LC8,12:?"PRESS KEY TO START" 40 IF INKEY()=0 CONT 45 S=0:CLT 50 CLS:N=RND(4):LC9,11:?"HIT "; 55 WAIT 30 60 IF N=0 ?"LEFT" 70 IF N=1 ?"RIGHT" 80 IF N=2 ?"UP" 90 IF N=3 ?"DOWN" 100 IF INKEY()-28!=N CONT 110 S=S+1:IF S<10 GOTO 50 115 BEEP8,10:WAIT20:BEEP8,25 120 T=TICK():CLS:LC9,12:?"TIME:";T 124 LC9,14 125 IF T<1200 ?"GREAT!" 126 IF T<1500 AND T>=1200 ?"GOOD" 127 IF T>=1500 ?"NOT BAD.." 130 WAIT 300 140 GOTO 10

伝えたいことは3点。
1. コンピューターとプログラミングの基本
2. オープンデータとIoTなど技術で広がる可能性
3. 未来は自分の力で切り開けること

3年前、IchigoJamでプログラミングを学び始めた一期生は、福井ご当地ロボットの販売に到達!
レーザーカッターで作った筐体、モータードライバーを持つ専用プリント基板を発注し、組立説明書もあります。 大人と混じってハッカソンで活躍するだけでなく、自分のプロダクトをもつエンジニアへとレベルアップしました。


鯖江Hana道場にて、87(ハナ)価格(8,700円)で登場!
Hana道場発「越前がにロボット」完成&販売開始!!: Hana道場
15(イチゴ)価格のIchigoJamは付属しません。


越前がにロボット開発者、メカ担当 MASAHARU(中2) & 基板担当 MISAKI(高2)
かにロボ事前講習会場にて)

イノベーションを、おもてなしの如く、オペレーションに。やればできる日本人!

ZESDAのプロデューサーシップあふれる楽しい懇親会!

多様性あふれる少数精鋭ユニットのゆるいヨコ連携でいきましょう。

links
- 研究・イノベーション学会 | Japan Society for Research Policy and Innovation Management
- NPO法人ZESDA - プロデューサーシップで新しい市場を拓く
- ZESDA's blog

コンピューター教育投資、アメリカの2億ドル相当、鯖江市は275万円拠出済み

2017/09/27 23:55:00
#opendata #KidsIT 

世界中で進むプログラミング/コンピューター教育、アメリカに新たな動き
トランプ大統領、コンピューター科学への年間2億ドルの助成を教育省に要請 | TechCrunch Japan

日本円にして220億円、一見巨額ですがアメリカに対象となる子供は約6000万人と日本の約6倍!
アメリカは人口動態の見地からは「日本化」しない - Market Hackアメリカ人口は約3.2億人

なので、日本でいうと40億円のインパクト。
また、鯖江市に限ると7,199人なので、約300万円。
実は鯖江市、272万円、すでに今年度のコンピューター教育事業として投資決定済み!
- プログラミング教育推進事業 182万円 (programming)
- クリエイティブ教育都市事業 70万円 (creative education)
- アプリコンテスト開催事業 20万円 (App contest)
Sabae to the World! 101 Businesses and Budgets in 2017 fisical year

鯖江市の子供に関するお金は、アメリカ全土のざっくり1万分の1規模。
世界と渡り合える人材教育は、地域の判断で十分実現可能です!


子供の人口を調べるために作ったオープンデータ活用アプリ「子供率」

Kindle版「小学校教員のためのプログラミングで考える教育の実践入門」とプログラミングと一緒に学ぶ英語「えいごのかずをマスターしよう」IchigoJamプリント

2017/09/26 23:55:00
#IchigoJam #KidsIT 

教員向けシニア向けと、小学校でのプログラミング必修化に向けて準備が進む福井から、小学校教員向けの電子書籍「小学校教員のためのプログラミングで考える教育の実践入門」が登場!

IchigoJamを題材に、なぜプログラミングか?国語、算数、理科、社会、英語、音楽、図工、それぞれの科目にどのように採り入れるかなど、ヒントが詰まった全270ページ。

スマホ、PC、タブレットなどでぜひどうぞ!Kindle unlimitedの読み放題の対象です。
こちらは先日持ってきてくれた、通常書籍版(一般向け未発売)

全教科横断的に「考える教育」としてプログラミングが採り入れられる小学校のカリキュラム用に英語とプログラミングの例が掲載されています。 IchigoJam BASICのコマンドは、簡単な英単語と対応!自然と英語に馴染めます。

プログラムの読解は、英文の読解にも通じます。何がどうのようにどうするか、構造を把握して、ひとつひとつの単語(=コマンド)の意味を読み解けば、自分で組み立てかえることもできるようになりますね。

えいごのかずをマスターしよう」(PDF/PNG) - IchigoJamプリント (IchigoJam ver 1.2以上向け)
英単語が出題されて、キーで答えるゲームに仕立て、スコアを加えて競い合うまでと、各自のチャレンジを促すところまでをサポート。 「IchigoJamはじめのいっぽ」をやったことある人が対象です。


写真左が、著書の元福井高専の先生、吉村忠与志さん(再掲
プログラミングいちねんせい!」の著書でもあるPCNの原さんも共著として参加してます。

3D空間で動画をくるくる回す JavaScript x three.js

2017/09/25 23:55:00
#js #3d 

ウェブで遊べる3Dライブラリ「three.js」を使ったIchigoJamの入門動画紹介ウェブアプリ

IchigoJam Intro Movies」 (元アプリ - css3d_youtube

マウスでくるくる回す操作プログラム js/controls/TrackballControls.js の止まりにくさを表す変数 dynamicDampingFactor を小さくしたので、離してからもくるくる回ってくれます。 ただ、ズームも合わせて滑るようになってしまうので、 dynamicDampingFactorZoom という変数があったらそっちを優先するように改造して js/controls/TrackballControlsZ.js にしました。

サンプルを元に自分好みにどんどん変更しちゃいましょう。(サンプル多数!
three.js全部ダウンロードすると228MBと結構重いので、今回サンプルのみのzip用意しました。
ichigomovies.zip (285KB)
動画を4つ変更するだけなら、htmlへYouTubeのidをコピペでOK!

VR空間を泳ぐように動画を探す体験とか楽しそうですね!
PCのパフォーマンスアップと便利なライブラリで、夢はどんどん広がりますが、実現速度は速まるばかり。

links
- ついにリアル公安9課誕生!オープンデータを推進する神戸市役所の本気!攻殻機動隊風、避難所ナビ3D
- iOS8 WebGL解禁記念! 触れるjig.jpロゴ

画面をイチゴで埋め尽くす12の方法 / IchigoJamではじめるARMマシン語その11

2017/09/24 23:55:00
#IchigoJam #asm 

IchigoJamのキャラクターコード255は、イチゴ。
これで画面を埋め尽くす12の方法、まずはBASICから!


1. 延々イチゴを表示して埋め尽くす(GOTO編)

10 ?CHR$(255);:GOTO10 RUN

2. 延々イチゴを表示して埋め尽くす(CONT編)

1 ?CHR$(255);:CONT

再開するCONTコマンドは、プログラム内に書くとその行を再度実行として機能します

3. FOR/NEXTコマンドで埋め尽くす(768=32*24)

FORI=1TO768:?CHR$(255);:NEXT

4. VIDEO0で一旦画面出力を止めて高速化(画面表示OFFで約3倍速)

VIDEO0:FORI=1TO768:?CHR$(255);:NEXT:VIDEO1

5. LOCATE(短縮計LC)を使って縦に埋める

FORI=0TO31:FORJ=0TO23:LCI,J:?CHR$(255);:NEXT:NEXT

6. VRAMに直接書き込む(HELPコマンドでVRAMのアドレスが確認できます)

FORI=#900TO#BFF:POKEI,255:NEXT

7. COPYコマンドを使って一瞬で埋める

POKE#900,255:COPY#901,#900,768-1

実用的にはこれで十分ですが、マシン語を使って究極を目指してみます

8. マシン語を使って埋める (22byte 5383cycle)

R2=9 R2=R2<<8 R1=R1+R2 R2=32 R3=24 R2*=R3 @LOOP [R1]=R0 R1+=1 R2-=1 IF !0 GOTO @LOOP RET

32*48で768、数値が1byteの上限255を超えるので、掛け算命令で設定。

POKE#700,9,34,18,2,137,24,32,34,24,35,90,67,8,112,1,49,1,58,251,209,112,71 U=USR(#700,255)

ハンドアセンブルか、asm15アセンブラを使ってマシン語を作成しUSRコマンドで実行!
1cycle = 21nsec、割込が無いとすれば、113usec、つまり0.1ミリ秒で処理完了です。

9. マシン語、4byteまとめて埋めて高速化 (32byte 1356cycle)

R2=9 R2=R2<<8 R1=R1+R2 R2=R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R0=192 @LOOP [R1]L=R2 R1+=4 R0-=1 IF !0 GOTO @LOOP RET

メモリへの書き込みは1byte、2byte、4byteと3種類。まとめて4byte書くように変更することで、プログラムは10byte増えてしまいましたが、約4倍速に!

10. マシン語、まとめて転送命令STMを使って高速化 (42byte 381cycle)

PUSH {LR,R4,R5,R6,R7} R2=9 R2=R2<<8 R1=R1+R2 R2=R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R3=R2 R4=R2 R5=R2 R6=R2 R7=R2 R0=32 @LOOP STM R1,{R2,R3,R4,R5,R6,R7} R0-=1 IF !0 GOTO @LOOP POP {PC,R4,R5,R6,R7}

ARM Cortex-M0にあるまとめて転送命令STMは、アドレスR1へ複数指定したレジスタの値をアドレスの値を変更しながら高速に転送してくれます(転送時間=転送数+1クロック)。 R2からR7まで6レジスタ、24byteまとめて転送できるので32回ループすれば画面全部を埋められます。

11. マシン語、ループ展開 (92byte 251cycle、転送部分220cycle)

PUSH {LR,R4,R5,R6,R7} R2=9 R2=R2<<8 R1=R1+R2 R2=R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R3=R2 R4=R2 R5=R2 R6=R2 R7=R2 R0=R2 STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3} POP {PC,R4,R5,R6,R7}

ループのために分岐すると3cycle時間を消費してしまうので、ループの数がそれほど多くなければ展開して高速化できます。 ループ用の変数が不要になるので、7レジスタ使ってSTMの回数も減らせて一石二鳥。 ただ、プログラム量は必然的に多くなりがちなので、容量に余裕がある時に使いましょう。

12. キーボードで ALT+V 押しっぱなし(手動)
プログラムを作ることはあくまで手段。手でやったほうが速いこともあります。

目的を達成するための方法は様々です。

同じマシン語でも8番のシンプルなマシン語に比べ、11番のプログラムでは、24倍も速くできました。
ターゲットのCPUに合わせた最適化を行うことで、ぐっと効率が上げられたりします。

BASICであってもコマンドの使い方次第でぐっと速くできます。
リファレンスを見直して、いろいろな使い方を探ってみるのもいいですね。

速度重視?容量重視?作りやすさ重視?
目的に合わせて選択できる手段を増やしておくと、叶う夢の幅が広がります!

(追記)
13. マシン語、ループ展開 PUSH編 (90byte 250cycle、転送部分214cycle)
IchigoJam-FANにて、PUSHを使った更に速い方法が発見されました!(Thanks Amanagi-san)
転送部分のみで214cycle、方法11と仕様を合わせても90byte/250cycleと、2byte減って1cycle/21nsec高速!

PUSH {LR,R4-R7} R2=#C R2=R2<<8 R1=R1+R2 R2=R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R12=R13 R13=R1 R1=R2 R3=R2 R4=R2 R5=R2 R6=R2 R7=R2 R0=R2 R14=R2 PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {LR,R0-R7} PUSH {R0-R2} R13=R12 POP {PC,R4-R7}

* スタックポインタ(R13)を破壊可能なR12に退避し、VRAMの末尾アドレスに変更、LR(R14)も使って36byte(9レジスタ*4byte)転送するという技!埋めるキャラクターがイチゴ(#FF)なのを利用して、更に縮めることも!?

- 連載、IchigoJamではじめる、ARMマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法

ファミコンMIDI音源「ふぁみみみっでぃ」音声出力簡単改造 x IchigoJam

2017/09/23 23:55:00
#IchigoJam #midi #maker 

コミケC92で入手したファミコンをMIDI音源にしてしまうカセット「ふぁみみみっでぃ by @hekekekun」をちょっとだけ改造してIchigoJamに接続。


起動音がかわいい、ふぁみみみっでぃ、IchigoJamでいろいろ鳴らしてみるプログラムがこちら。普通のMIDI音源として使えます。

10 UART0:BPS31250:V=127 20 FOR I=30 TO 100 30 C=#90:GSB100 40 C=#93:GSB100 50 IF BTN() END 60 NEXT 70 GOTO 10 100 UART1:?CHR$(C,I,V);:WAIT10:?CHR$(C,I,0);:UART0:RTN

普通のファミコンの場合、音声出力がRF(アンテナ)なので、AV改造などが必要でしたが、カセットの仕様を見ると音声がカセット端子にでています(45ピン)。 これを使って鳴らしてみた今回ですが、ちょっとノイズがひどいのでもうちょっと解析と対策が必要な様子。

ふぁみみみっでぃのBACK側、真ん中あたりの青い線がSOUND INにあたる45ピン。 ついでに、VCCにIchigoJamからの5Vをつなぐので、ファミコンのACアダプターもいらなくなってコンパクト!

links
- ファミコン実機とMIDI連携できるカセット「ふぁみみみっでぃ」のご紹介!MIDINES欲しかった人は要チェックです! | ハイレゾスタイル
- へけけくん (@hekekekun) | Twitter (ふぁみみみっでぃの作者さんのTwitter)
- 極楽ほんげら (ふぁみみみっでぃの作者さんのサイト)
- IchigoJam BASIC 15行、バンブラ奏法で奏でるMIDI楽器

セグメントを2つ減らして消費電力3割減、5セグメントLED時計風アプリ

2017/09/22 23:55:00
#js #maker 

IchigoJam webでPCブラウザ上のフルスクリーンという技を覚えたので、プロジェクターなどの大画面に映える時計アプリを作ってみました。 ビジュアルで魅せるアプリづくりのテンプレートとしても活用ください。

選んだのは、一日一創2012の中でもお気に入り成果のひとつ、5セグメントディスプレイを使った時計「my5segclk
ゼビ文字に似せたことでちょっとが読みにくかったので、0と4を変更。


1 2 3 4 5
6 7 8 9 0 、と読みます。

エレベーターなどでおなじみ7セグメントLEDとくらべて2セグメント少ないので、消費電力28%減!(単純計算)
一味違った雰囲気で時を伝えます。


fivesegclk」 大きさ色をカスタマイズ可、表示部分クリックでフルスクリーン化

links
- 一日一創 - 時計アプリ
- 【IchigoJam】5セグメントLED - 2017-09-24 - SHIROのモバイル日記 (角型LEDで実現!)
- http://scientific601.altervista.org/5segment.html 1973年に考えられた5セグディスプレイ
- 道新スタッフブログ: いまだ現役!41年前のシャープ製電卓 - 7セグに固まる前は8セグ?

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