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

IchigoJam BASICでコンピューターを操る楽しみを知り、マシン語でその正体を知ったら、人類の英知コンパイラを学び、広がり続けるプログラミング言語、開発ツールの海へと出港しましょう!

コンパイラとは人間とマシン語をつなぐ翻訳者。やってほしいこと(アルゴリズム)を0と1の並びへと変換してくれるソフトウェアのこと。

福井高専電子情報工学科にもコンパイラという授業がありました。講義を単に受けるのではなく、自分でコンパイラを作りながら学ぶのが近道で楽しいのでオススメです。

C言語はその代表格。その機能限定版を実際のソースコードを読んだり、改造するのが近道です。自分だけのプログラミング言語づくりも簡単に楽しめる、コンパクトな実装「ci0 - ミニCインタプリタ」を発見。Macで動くように編集してみました。(src on GitHub

$ cat test0-hello.c int main() { println("Hello World!"); return 0; } $ ./ci0 test0-hello.c Hello World! $ ./ci0 -trace test0-hello.c 0: int ************** execute ***************** entryPoint = 2 2: entry 3: addsp int 0 4: push str "Hello World!" 5: call str println Hello World! 6: addsp int 1 7: push int 0 8: ret

このコンパイラ、字句解析、構文解析、VMまで含めて512行ととっても短いのが特徴です!
for文に対応していないなど、言語仕様は極力削ってあるので、欲しい構文を好きなように追加することも楽しめます。

VMはJavaVMやWebAssmeblyと同様のスタックマシン(mrubyはレジスタマシンなのでちょっと違う)になっていて、中間コードを見たり(-codeオプション)、実行内容を見たり(-trace)もできます。

WebAssemblyのビットコードを出力するようにして、ブラウザ上の開発環境にしてみたり、IchigoJamで動くCコンパイラに挑戦するのもおもしろそう。

links
- ミニCインタプリタ (言語処理入門 by Minoru Hatada 氏)
- 高専でなぜC言語を学ぶのか? IchigoJamマシン語生成プログラム c4ij で作る、C言語版かわくだり
- オールマシン語かわくだり - API対応 IchigoJam 1.3.2β12
- mruby VM level 1 in 2KB / 実用最小限VMとIchigoJam BASICと動かす組込Ruby

KDDIさん、岩手県立大学さんを鯖江駅で福井高専の田村校長先生とお迎えする、鯖江革新企画デー!

IoT満載、最強の日本酒工場、梵の前にて。


ようこそ、めがねのまちさばえへ!
鯖江若者活躍の原点、市長をやりませんか「鯖江市地域活性化プランコンテスト」の紹介からスタート。


ドイツ、シリコンバレー、鯖江!
ここ「Hana道場」は、本社ドイツの謎の超巨大ソフトウェア企業、SAPによるオープンイノベーション拠点、3番目。


ほぼ毎日開催、小学生向けスクール。最近はロボットが人気!
右はさばえカニロボ、モーター部分を目としてみるとかわいい。


福井高専見学。鯖江に高専あり!学生、どんどん活躍してもらいましょう!


今日は北中山小学校でプログラミングクラブ、第一回!楽しくプログラミングはじめできました。(写真 by 福井高専 斎藤さん)
Hana道場へ通う子も!(未来の高専生!?)


はじめてのプログラミング - エルチカ、エルチカゲーム、エルチカロボ」←本日分


テレビゲームをプログラミング!」次の時間用


鯖江市長と!


ここから先はIchigoJam上級編、この写真のヤバさが分かる人向けです。

IchigoJamの最新βファーム「BIOSを使ってUSキーボードとJPキーボードの切り替えに対応 IchigoJam 1.3.2β13」を使うと、なんと自分だけのキャラクターを永遠に焼き付けることができます。

?CHR$(224) POKE#700,1,2,4,8,16,32,64,128

まずは自由に、2進数を使ったキャラクターの書き換えます。

下記のプログラム(IchigoJam1.3.2b13以降専用)で#700から#7FFをPCGをIchigoJamのCPUに書き込み!

1 'Flash PCG 10 POKE#800,240,181,197,176,3,145,114,182,6,34,232,35,17,0,27,136,53,32,152,71,67,30,152,65,128,39,0,36,134,29,51,3 20 POKE#820,2,147,1,147,127,0,230,35,27,136,15,44,85,209,224,32,58,0,3,153,192,0,9,24,4,168,152,71,232,35,50,0 30 POKE#840,27,136,49,0,50,32,152,71,234,35,27,136,1,154,29,0,4,169,59,0,51,32,168,71,1,155,1,52,1,51,255,51 40 POKE#860,1,147,16,44,223,209,5,34,216,52,35,136,17,0,50,32,152,71,5,34,35,136,17,0,52,32,160,36,152,71,228,1 50 POKE#880,230,35,128,34,27,136,82,0,2,153,4,168,152,71,232,37,5,34,43,136,17,0,50,32,152,71,234,35,27,136,34,0 60 POKE#8A0,31,0,128,35,4,169,91,0,51,32,184,71,2,155,1,52,1,51,255,51,2,147,192,35,255,52,219,1,156,66,223,209 70 POKE#8C0,43,136,50,0,49,0,50,32,152,71,43,136,50,0,49,0,52,32,152,71,98,182,69,176,240,189,160,34,33,2,210,1 80 POKE#8E0,137,24,58,0,168,231 90 ?USR(#800,0)

リセットしても、電源を入れ直しても、書き込んだキャラクター!

RESET ?CHR$(224)

元に戻したいときはこちらを実行して、書き込みなおせばOK(キャラクターコード224だけ元に戻す)

POKE#700,24,56,120,255,255,120,56,24

全キャラクター戻す場合はこちら

10 POKE#700,24,56,120,255,255,120,56,24,24,28,30,255,255,30,28,24,24,60,126,255,255,24,24,24,24,24,24,255,255,126,60,24 20 POKE#720,16,56,124,254,254,56,124,0,0,108,254,254,124,56,16,0,56,56,214,254,214,16,56,0,16,56,124,254,124,56,16,0 30 POKE#740,60,102,195,129,129,195,102,60,60,126,255,255,255,255,126,60,36,106,42,42,42,42,36,0,24,36,66,129,189,189,189,126 40 POKE#760,36,90,66,129,165,129,66,60,60,66,129,165,129,126,36,102,12,10,10,8,120,248,112,0,60,66,153,165,173,161,146,76 50 POKE#780,24,24,36,36,126,255,60,126,0,24,36,66,255,84,0,0,16,16,8,8,16,16,8,8,124,16,30,185,255,159,16,126 60 POKE#7A0,8,90,108,254,60,126,74,17,28,54,58,58,58,62,28,0,0,60,66,126,90,66,126,0,0,6,6,30,30,126,126,0 70 POKE#7C0,0,124,68,100,100,68,124,0,24,24,60,90,90,36,36,102,0,24,126,153,24,60,36,102,0,24,26,126,80,28,20,102 80 POKE#7E0,24,24,16,16,16,16,16,24,0,24,88,126,10,24,46,98,24,24,8,8,8,8,8,24,4,62,47,86,106,214,172,240

書き込んだキャラクターをプログラム形式にするプログラムはこちら

10 FOR I=0 TO 256-32 STEP 32 20 ?I/32*10+10; 30 ?" POKE#";HEX$(#700+I); 40 FOR J=0 TO 31 50 ?",";PEEK(#700+I+J); 60 NEXT 70 ? 80 NEXT

鯖江市は、進化し続けます!

links
- 地方創生は鯖江から発信。ITと人材育成 | きらきら星のつぶやき☆

小学校で習う不等号記号を使って囲むことにしたものをタグと呼びます。

<!DOCTYPE html> <html> </html>

<!DOCTYPE html> と最初に書くと、HTML5モード、現代HTMLとしてブラウザが解釈してくれます。
<html> これがHTMLタグ、同じ中身でスラッシュで始まる </html> までが、HTMLです。

<!DOCTYPE html> <html> <head> </head> <body> </body> </html>

HTMLタグの中に、HEAD(頭)とBODY(体)を追加します。こういう入れ子構造(ツリー構造)で作っていきます。

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>simple - A-Frame</title> <script src="https://aframe.io/releases/0.9.1/aframe.min.js"></script> </head> <body> </body> </html>

HEADには文字コードや、タイトル、拡張したいものなどを書きます。
グローバル社会における文字コードは、utf-8(ユニコードの可変長エンコード体系)が標準です。 (ファイルの保存も utf-8 にしておかないと、文字化けするかも)

index.html と名前をつけて保存して、ブラウザで開いてみましょう。まだ中身(=BODY)がないですが、タイトルに注目!

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>simple - A-Frame</title> <script src="https://aframe.io/releases/0.9.1/aframe.min.js"></script> </head> <body> <a-scene id="scene"> <a-sky color="#000000"></a-sky> <a-plane rotation="-90 0 0" width="50" height="50" color="#333333"></a-plane> </body> </html>

VR空間(=asscene)に背景(=a-sky)と、地面(=a-plane)を作りましょう。色(=color)は、赤緑青の順、0-255まで16bit2桁を3つ続けて#と合わせて表記します。 a-で始まるタグは、WebVR用のフレームワーク A-Frame による拡張タグです。HEADで読み込ませたので使えます。

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>simple - A-Frame</title> <script src="https://aframe.io/releases/0.9.1/aframe.min.js"></script> </head> <body> <a-scene id="scene"> <a-sky color="#000000"></a-sky> <a-plane rotation="-90 0 0" width="50" height="50" color="#333333"></a-plane> <a-sphere position="0 1.5 -2" radius=".5" color="#EF2D5E"></a-sphere> <a-box position="2 1.5 -2" rotation="0 0 0" width="1" height="1" depth="1" color="#4CC3D9"></a-box> <a-cylinder position="-2 1.5 -2" radius="0.5" height="1" color="#FFC65D"></a-cylinder> </a-scene> </body> </html>

球(=a-sphere)を、自分の位置を原点として、真ん中、右へ1.5m、奥に2mの位置(=position)に置きます。同様に箱(=a-box)と円錐(=a-cylinder)も置きました。


simple WebVR - A-Frame
マウスやタッチで視点を動かせます。


PCの場合カーソルキーで移動もできます。

3Dゲームも作れちゃうような気がしてきましたね!
プログラミング言語、JavaScriptを使うと、この3D空間を自在に操れます。

jig.jpロゴを作ってみたものがこちら。

jig.jp logo WebVR - A-Frame


Oculus Questだと、寄ってみたり、歩き回れたりするので楽しさが格別です。
スマホへ画面を転送し、録画しました。

Oculus Quest、Oculus Go、スマホVRを使って自分で作った空間に入ってみましょう!

福井高専でも Oculus Quest は大好評!

スゴイ → もっとやってみたい → 自分でも作ってみたい → じゃあ、作ろう!
この流れは、小学生でも高専生でも一緒です。

HTMLで作る自分だけの3Dホームページ、JavaScriptを学べば画面転換、アニメーションや、ゲームまで!
高専は教えてくれるのを待つところではなく、自分で学び放題な5年間を楽しむところ。

広大でなお広がり続ける技術の世界へようこそ!

APIに対応し、オールマシン語でかいた「かわくだり」、APIをC言語環境から呼び出せる環境を整えたC言語用ヘッダファイル std15.h を作って、C言語版も作ってみました。 PCとUSBシリアルケーブルを手に入れれば、BASICではできないスゴイモノが簡単に作れます!(マシン語をハンドアセンブルすれば、PCがなくても同等以上のものは作れます)

#include <std15.h> __attribute__ ((section(".main"))) int main(int param, int ram, int rom, int (*divfunc)()) { cls(); int x = 15; for (;;) { locate(x, 5); putc('O'); locate(rnd(32), 23); putc('*'); putc(10); wait(3); int c = inkey(); if (c == LEFT) x--; if (c == RIGHT) x++; if (scr(x, 5)) break; } return x; }

IchigoJam BASIC に慣れた人なら読めますね!(IchigoJam BASIC版、Ruby版
#include というのは、コンパイラ向けの命令で、その後ろに書かれた std15.h というファイル名のファイルの中身をまるっと取り込んでくれます。 このファイルの中に main cls locate などが何なのかが書いてあります。(通常のC言語では stdio.h というファイル名をincludeしますね)

std15.h の中身はこのような感じ。IDを覚えていなくても、分かりやすい名前で呼び出せて、コンパイルする際、間違った使い方は警告してくれるなど、いたれりつくせり。

typedef unsigned int uint32_t; typedef unsigned short uint16_t; typedef uint32_t (*IJFUNC_P1R)(uint32_t n); #define rnd(n) ((IJFUNC_P1R)(void*)(uint32_t)*(uint16_t*)0xC0)((n))

生成されたコードサイズは、108byte、オールマシン語で作ったものが 90byte だったので20%ほどコード量が増えてしまってますが、十分に小さいのでOKですね。 使える容量は、#700-#7FFまでで256byte、変数を使わないことにすれば512byteまで。プログラム領域#C00以降にPOKEコマンドで書き込むように変更すると、1KB近くまで使えます。

ダウンロードはこちら(IchigoJam 1.3.2b12 以降用)
IchigoJam/c4ij: C language for IchigoJam」 - src on GitHub

マシン語を読みたいときは、 make dasm とすると、マシン語コードを表示します。コンパイラがどのようなマシン語にするか辿って、どこに無駄があるか読んでみるもまたおもしろいですよ。

某現役高専生による高専生のためのC言語連載が始まりました!
C言語 - Part.0:C言語とは - 某高専生の某高専生による高専生のための...
ただ、C言語、初めてプログラミングとしていきなり学ぶのはオススメしません。

まずは、IchigoJam BASIC、JavaScript、Python、Ruby、Unity、何でもいいので、サクッと簡単に楽しいゲームが作れることを体験しましょう。 便利なツールを使って、実現したいことを最短で実現し、もっとやってみたい!と興味を持つことが何より大事です。

コンピューターの気持ちが気になったら、コンピューターの構造(アーキテクチャ)、マシン語、C言語、現代言語の順に学ぶのがオススメです。

マシン語を触ってコンピューターの真の力を体感し、ちょっとしたプログラムを作るのに苦労してもらった上で、C言語のコンパイラに触れると、もう一度コンピューターってすごい!となれます。 もっと楽しく、もっと速く作りたい!という思いが、Python、Ruby、JavaScript、Go、Javaなどの言語を産みました。

なぜC言語を学ぶのか、それは、それらのモダン言語と言われている言語自体を作った言語がC言語だからです。

高専の情報系の学科にはOSを学ぶ授業があります。自分で使って作って遊んでみるのが近道です。

IchigoJamへの要望に応えるため、一部はIchigoJam OSの外での実装を検討中。 その手段として、マシン語やmrubyなどからの呼び出しに便利なAPI提供を行う予定にしています。公開時はAPIテーブルとして固定のアドレスに置くことになりますが、先行してAPI直接呼び出しする実験方法を紹介します。
* IchigoJam 1.3.2b11専用なのでご注意ください(他のファームウェアだと停止します)


(IchigoJam as an OS: rnd API example)

ゲームでは欠かせないランダム(rnd)はこんな風に呼び出せます。

[0]=#4700:?USR(#800,#11B9) 8423

アドレス #11B8 に、rnd関数が入っていて、+1 した #11B9 でThumbマシン語として呼び出します。返り値はR0に格納されるので、マシン語はシンプルにGOTOするだけ。

GOTO R0

inkeyは#A15、clsは#196D、wait1は#219です。

パラメーターを渡すAPI、画面表示のputcは、こんな風に使います。(UARTのみのputcは#A51)

LET[0],#4900,#4708,#18BD,0:U=USR(#800,ASC("A"))

マシン語は、このように呼び出し先アドレスをR1にセットしています

R1=#18 R1=R1<<8 R1+=#BD GOTO R1

パラメータを一つ受け取るAPIとして、数を出力するputnum(#18E1)もおもしろいです。

LET[0],#4900,#4708,#18E1,0:U=USR(#800,12345) 12345

RNDを使った応用例として画面をランダムに埋め続けるプログラムを、ステップバイステップで解説します。

'R3=#900 R3=9 R3=R3<<8 R3=R3+R1 [R3]=R0 RET

asm15でアセンブルするか、マシン語表を使ってハンドアセンブル

POKE#700,9,35,27,2,91,24,24,112,112,71 ?USR(#700,65)

Aが画面左上(#900)に表示されます。USRの第二パラメータに表示したいキャラクターコード、レジスタR0として使えます。

rndを使って、ランダムなキャラを出します。

PUSH {LR,R4} 'R4=#900 R4=9 R4=R4<<8 R4=R4+R1 'R2=#11B9 R2=#11 R2=R2<<8 R2+=#B9 GOSUB R2 'RND [R4]=R0 POP {PC,R4}

関数内で更に関数を呼び出す場合、戻り先LRをPUSHで保存しておき、POPで戻しましょう。

POKE#700,16,181,9,36,36,2,100,24,17,34,18,2,185,50,144,71,32,112,16,189 ?USR(#700,0)

ランダムな場所に出します。

PUSH {LR,R4-R6} 'R6=#11B9 (RND) R6=#11 R6=R6<<8 R6+=#B9 'R4=#900 R4=9 R4=R4<<8 R4=R4+R1 GOSUB R6 'RND R1=#FF R0&=R1 R5=R4+R0 GOSUB R6 'RND [R5]=R0 POP {PC,R4-R6}

R3の割り算を使って、%(32*24)を実現して画面全体ランダム表示。
捨て身の無限ループなので、電源を切るまで停止することはできません。戻ってこないのでPUSHもなし。

'R6=#11B9 (RND) R6=#11 R6=R6<<8 R6+=#B9 'R7=32*24 R0=32 R7=24 R7*=R0 'R12=R3 (UDIV) R12=R3 'R4=#900 R4=9 R4=R4<<8 R4=R4+R1 @LOOP GOSUB R6 'RND R1=R7 GOSUB R12 'UDIV R0=R1 R5=R4+R0 GOSUB R6 'RND [R5]=R0 GOTO @LOOP


POKE#700,17,38,54,2,185,54,32,32,24,39,71,67,156,70,9,36,36,2,100,24,176,71,57,70,224,71,8,70,37,24,176,71,40,112,247,231 ?USR(#700,0)

正式実装をお楽しみに!

see also
連載、IchigoJamではじめる、Armマシン語入門

グラフィクス対応に続き、一日一実装。
こどもたちにも大人気のフルカラーテープLED、WS2812Bへネイティブ対応。
できるだけシンプルにと、配列へ緑、赤、青の順に入れて WS.OUT [LED個数] だけでOK!

WS2812Bの5V,DIN,GNDを、IchigoJamのVCC,OUT1,GNDへと接続して、

[0]=30:WS.OUT 1

これだけでOK! 緑色に光ります。(* 1.3b10で WS.OUT は WS.LED と命令名が変更になりました)

試してみたい方はβ版をこちらからどうぞ!
ichigojam-1.3b09.zip
新命令:WS.OUT, 命令変更:PSET → DRAW, 命令削除:VPEEK, LANG

バージョンアップ方法はまったさんのブログを参考に!
IchigoJamボードのファームウェアの焼き方 – about yrm

配列を使うので、102/3で最大34コのLEDまで対応。
エモメガネの片側20コをランダムに光らせるには・・・

10 FOR I=0 TO 3*20-1:[I]=RND(40):NEXT 20 WS.OUT 20 RUN


簡単ですね!

実装には、現在172byte使いました。
I/O関係がちょっと怪しく、ちょっと余計なコードが入っていて、要調査です。


福井高専に新着任、徳山高専出身の田村校長先生! 地球物理学研究会(通称、なまず)の岡本先生と。
キラキラ光る簡単電子工作&プログラミングで、プログラミング好きな学生増やしましょう!

すでにプログラミング好きな高専生にオススメイベントといえば、jigインターン2019!

Let's enjoy programming!

3度目の明石高専にて、IoTプログラミング&情報セキュリティ講座!
1年生から5年生まで幅広く、学生30名以上が参加してくれ、大盛り上がり。
多数のうれしいツイート、ありがとう!

懇親会時に好評だった、チーム伊勢発のVFD単管時計を改造したVFD表示器
調子に乗って、スロットゲームつくってみました。プログラムと接続方法は、ブログ末尾で。

授業が終わった、16時半、自由参加の課外活動。定員上回る参加者!

情報系だけではない高専生、プログラミングやったことない人もまだまだ多数。来年からいよいよ日本の全小学生がプログラミングするので、高専生であれば、一歩先のIoTプログラミングくらいまでは押さえておこう。 非IT系xIoTが実は熱いよ!


講義スライドPDF「IchigoJamではじめてのプログラミング x 情報セキュリティー講座 in 明石高専
自由に使えるオープンデータです。どうぞいろいろアレンジして使ってください。


LEDに、ゲームに、IoTに、さすが高専生、サクサク進んだので、サーボ遊びもやりました!


楽しんでくれた感じの笑顔がうれしい!


眼鏡堅パン、喜んでくれました!
実は,登場当初は今のもう2段階堅かったw


和歌山高専出身で、高専の卒検をそのまま事業化している、株式会社CuboRex(キューボレックス)の社長、寺嶋さんにも会えました! その基幹部品を見せてくれました。サーボ信号でコントロールできるので、IchigoJamでもなんと遊べてしまう!?


電気情報工学科の2年生の授業にも少しおじゃましました。
なんと、2014年とかなり初期、神戸で開催したIchigoJamワークショップに参加してくれた小学生が高専生に!
ハンダ付け不要!持ち帰れるコンピューターづくりワークショップ IchigoJam x ビスケットボード


アナログな課外活動掲示板システムが楽しい!
スマホで更新できるようにしたり、デジタル化してどこかでも見えたりするのもおもしろいかも?


主催してくれた、いささかさんに、福井高専の先生が書いてくれた教科書と最新IchigoJam Sをプレゼント!
ステキで楽しい機会、ありがとう! きっかけになった高専カンファレンス、7/14、三ノ宮で開催ですよ!


本場、明石焼き(卵焼き)、自宅でも作ってみたい!そういえば、明石の人は一般的な卵焼きはなんと呼ぶ!?
福井県ではカツ丼がデフォルトソースカツ丼なので、一般的なカツ丼は卵カツ丼、タマカツ、と呼ばれてます。


明石高専、また来ます!

さて、次はどこの高専!?
高専いったことあるよマップ - 全国63キャンパス訪問率50%
jigインターンjig.jpへの就職に関しても受付中です!

「スロットゲーム with VFD」のプログラムと解説。

1 'SLOTGAME with VFD 10 CLS 20 FOR I=1 TO 3:CLT 30 IF I=1 A=RND(1000)+10000 40 IF I=2 A=RND(100)+A/100*100 50 IF I=3 A=RND(10)+A/10*10 60 LC 4,5:?DEC$(A,3) 65 R=I2CW(8,#8CC,2) 70 IF !BTN()||TICK()<20 GOTO 30 80 NEXT 90 WAIT20 100 IF BTN()=0 CONT ELSE RUN

CLTとTICK()を使って、ボタンが連続して押されないようにしているのがポイントです。
IchigoJam web で試す場合は、BTN()をINKEY()に変更してください。
VFDがなくても動きます。VFD無いときは、65行消してしまってOKです。
VIDEO3とかVIDEO5で文字を大きくするのもいいですね!
詳しく知りたい方は、シンプルな「IchigoJam BASICのリファレンス」を参照ください。


VFDモジュールCN2のVCCは5Vなので、IchigoJamのCN5の5Vと接続して、VFD表示器とIchigoJamを単一電源化! コントロールは、VFDモジュールCN1のSCL/SDA/GNDでIchigoJamとつないだI2C。I2CWコマンドで制御してます。


Slot Game with VFD / 動画 on YouTube

links
- VFDふぁん: VFD単管時計
- 【共立エレショップ】>> 【電子部品・半導体】/表示器/VFD(蛍光表示管) なんと1本103円〜

母校、福井高専、電子情報工学科として入学した新1年生向けに贈る「何でもやってみるのススメ」
つくればつくるほどに強くなる。

プログラミングやってみたい、ゲームつくってみたい、ロボットつくってみたい。
OK、全部やってみよう!待つ必要、遠慮する必要、全くなし!

ちょっとした目標があるといいよね。ということで、今のオススメ「高専IoTコンテスト」を紹介

スライド「ようこそ高専へ!何でもやってみるススメ 5G/IoT編


現代のスマホの主流、4Gから5Gになると、速度10倍、遅延1/10、接続数100倍になる。
これに伴って、きっと値段も1/10とかにはなるでしょう。
事実、2G時代の通信単価は、128byteで0.3円、ギガ単価にして251万円から、1/2500になってます。
湯水のように使える通信インフラを使って、なにしよう!?


コンテスト等いろいろ。究極のコンテストが実事業だとして、いろいろあるコンテスト。
全国からプログラミング好きが集まる高専プロコンもいいけど、ちょっと狭き門。
ということで、HITなど、地域開催されるコンテストや、高専IoTコンテストなどの新しいコンテストなどが狙い目!
チャンスはたくさんありますよ!


さくらインターネットのsakura.ioを使えば、月額わずか64円で4G回線を使ったIoTが実現できます!
IchigoJamと組み合わせたIchigoSodaで、超かんたんIoT。

例えば、5分おきにセンサーに触れた数(BTN端子)をネットに送り続けるIoTは

10 C=0:CLT 20 IF BTN() C=C+1:?C:WAIT 30 30 IF TICK()>5*60*60 IOT.OUT C:GOTO 10 40 GOTO 20

CLTでTICK値をリセット、CがBTNが押されたカウント。IOT.OUT命令で送信!

本日福井高専でネタに上がった駅や電車の混み具合が分かるIoTづくりのため、格安測距センサー「HC-SR04」を使うように改良するにはこちらを追加!

20 A=0:OUT1:OUT0 21 A=A+1:IF IN(1) CONT 23 IF A<5 C=C+1:?C:WAIT 30

簡単ですね!
あとは、実際の現場に置かせてもらって、データをとり、ひとまずJavaScriptで、かんたんなwebアプリを作って実験!(入門に jigjs をどうぞ)


高専ワイヤレスIoT技術実装コンテスト
略して、高専IoTコンテスト!採択されたアイデアには技術実証費用、最大300万円!

2018年度採択アイデア

5G部門
沖縄:高速低遅延回線が生み出す沖縄マリンレジャーパトロール
豊田:どこでも3次元軌道システム(スポーツの3Dデータ表現)
沖縄:高高度・高速移動体における高速・大容量通信の検証実験(飛行機内動画)

IoT部門 2018
沖縄:働きがい促進のための農福連携水耕栽培システム
木更津:カラス被害抑制のためのロボットIoT
北九州:国や文化の壁を越えたグローバルなスポーツ「COROMO」の提案
群馬:ピッツァ窯 IoT
舞鶴:スマホでつながる駅前イルミネーションの実証実験

GW、家族や、親戚の大人、身近な商店などなど、課題探しの旅にでてみましょう!
企業や、行政、社会人の方、お困りごとぜひお伝えください!
さぁ、チャレンジしよう!(4年生には、jigインターンも!)

チャレンジしてみたい人!の呼びかけると、集まってくれた福井高専電子情報工学科1年生、約20人!
課題とアイデアを考えてくることを宿題としました。

links
- 高専ワイヤレスIoT技術実証コンテスト
- 高専プロコン
- 全国高専生向けjig.jpインターンプログラム2019 ~募集開始のお知らせ~

1960年世界人口の3%だった日本は、2017年現在で1.69%。
このまま日本の人口減少と、世界の人口拡大が続くと、ますます薄れる存在感。

世界銀行の人口オープンデータを世界カラム地図にマッピング。1960年から最新の2017年までの変遷をざっと追えるアプリにしてみました。

世界人口カラム地図 / The World Population TabularMaps
中国とインドだけで40%近く、特にインドの増加がすごい!


こちら日本が世界人口の3%あった1960年のスクリーンショット。GDPなどの割合など、いろいろマッピングして見るのもおもしろそう。 カラム地図、世界を見るのに便利!

高専を選ぶ中学生もまた、1%。
ものづくり好き、プログラミング好きな高専生向け夏休み恒例企画、jigインターン2019、募集開始!
全国高専生向けjig.jpインターンプログラム2019 ~募集開始のお知らせ~
今年は随時選考、定員なり次第終了するので、応募はお早めに!


jigインターン2018ブログ - jigintern2018’s diary

前回、PCにつないだオムロン社製高級画像認識センサー「HVC-P2」を今度はIchigoJamに接続!
センサーに顔を向けて、F5でRUN!
さて、AIはあなたは何歳だと判定するでしょう!?


6サイ!
・・・おしいっ


ヒューマンビジョンコンポ、HVC-P2との接続はUSBまたは、基板側のコネクタ。
日本圧着端子製造株式会社製、SM06B-SRSS-G-TBに対応するケーブルを、千石電商オンラインショップで発見! (PRT-10361 JST SHコネクタ付ケーブル 6P (基板用ポスト付属)、200円)


センサー側の端子、CN5に接続し、基板側1と振られた端子から順番に、ブレッドボードを経由してIchigoJamに接続。 1から順に、IchigoJamの5V、TXD、RXD、GNDと4本接続すれば、OK!(5番目はRESET)
簡単に接続できる基板を作ってもいいですね!
素直なUART(速度可変のシリアル通信)なので、IchigoJamに限らず、ラズパイなど、得意なマイコンでOK!

早速実験!

BPS9600 ?CHR$(#FE,0,0,0,0);

ちゃんと型番が返ってきました!

年齢を当ててもらいましょう(プロトコルは、HVC-Pと変わっていない様子)

10 BPS9600 20 UART1,2:?CHR$(#FE,4,3,0,16,0,0);:UART0,2 30 GSB@K:IF K!=#FE GOTO10 40 GSB@K:E=K 50 GSB@K:N=K:FORI=0TO2:GSB@K:NEXT 60 IF E!=0 ?"ERR:";E:WAIT60:GOTO10 70 FORI=0TON:GSB@K:[I]=K:NEXT 80 IF[2]?"AGE:";[4] 90 GOTO20 100 @K:K=INKEY():IF!KCONT ELSE K=K&#FF:RTN

LC0,-1 を使うことで、画面に見せずに通信もできます!
[2]に人数が入っているので、複数人対応も可
起動時2秒のWAITが必要なので、自動起動する場合、10行に WAIT120 など、いれておきましょう。


IchigoJamの前に座って、どきどきしながら「F5」で判定!もりあがりました
IchigoJam5才の誕生日!【IchigoJam生誕祭】: Hana道場
こどもはやっぱり発想の天才、Hana道場の無人販売を司る、魔人ブーをかざして「15才」と判定。
いろんなキャラクターの年齢推定と設定年齢の相関というのも、確かにおもしろいテーマかも。

画像認識センサー「HVC-P2」を使えば、35人分の顔の位置、大きさ、方向、年齢、性別、表情、目つむり、視線向きなどいろいろ簡単に使えて便利です!

たくさんの人に囲まれがちなロボットが、ひとりひとりの顔をみながら、年齢に合わせてしゃべりわけるときっと賢く・かわいく見えるはず。

ポスターのどの部分を読まれているか判定したり、テレビの前において見ているかどうか、見て楽しんでいるかどうかを判定したりと、いろいろおもしろい実験に使えそう。

高専プロコンなど、コンテストや、研究にもどうぞ!

HVC-P2はどこで購入できますか?|FAQ|オムロン人画像センシングサイト:+SENSING
お値段、35,000円ほど、在庫あり!

links
- 画像認識ハードウェア「HVC-P2 by オムロン」で顔マウス!? 年齢性別顔向き視線目つむりなど多彩な認識最大35名分!
- オムロン顔認識チップ x IchigoJam でつくる年齢当てマシン!

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