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

Maker Faire Kyoto 2019の戦利品、IchigoJam Things の組み立て方、紹介!
ただし、うっかり黄色い5Pピンソケットの向きを逆にする失敗をしたときの写真になっているので、要注意!

IchigoJam Things とは、Raspberry Pi Zeroの発表にインスパイアされて 2017年に発表。
IchigoJam Zero the World's Lightest PC 0g 150yen for IchigoJam Things!
チーム伊勢から晴れて、製品化となりました!


IchigoJam Things パーツ一式。はんだづけしやすい、DIP部品ばかりでこどもにもやさしい!


こちら IchigoJam Things! 表面実装のCPU、LPC1114FDH28ははんだづけ済み!


まずは抵抗、R1からR5をはんだづけ。(向きはないですが、揃えておくと気持ちいい)
R1 黄紫茶金 470Ω
R2 茶黒茶金 100Ω
R3 赤赤橙金 22kΩ (I2C用プルアップ抵抗、IchigoJamでは未実装)
R4 茶黒赤金 1kΩ (LED用電流制限抵抗、IchigoJamでは330Ω)
R5 茶黒緑金 1MΩ


次に低い部品、microUSBをはんだづけ。挿して、手で押さえつつひっくり返し、押さえつけながらはんだづけ。はんだを多めに流し込む。 またひっくり返して、伸びた足2本もはんだづけ。microUSBの側面、表からもはんだづけで補強しておくと安心。


15pFのコンデンサ(1uFのコンデンサと間違い注意)とクリスタル12MHzをはんだづけ。


10uFのコンデンサ、足をペンチで伸ばしてあげると、基板にぴったりつけられます!
(曲げずに広い方の穴を使うのもOKですが、CN5のピン名が見えづらい? 106は、10x10の6乗(pF)の意味)

LCDと書かれた、液晶用ピンをピンヘッダーや、L字ピンヘッダー、ピンソケットなどをつける場合は、USB端子を付ける前に!
低いピンソケットがオススメ! シングルピンソケット 低メス 14P20Pを8Pにカットし裏面からはんだづけし、ショートしないように、表面のはみだした分をカットしておく。


USBコネクタは基板面に水平に、基板に接しない用に注意!
3端子レギュレーターは、向きと差し込む場所に注意!
2列ピンソケットは、シールが貼ってあるので向き注意!2つ並んだ3.3VがmicroUSB側を向けます。


タクトスイッチ(BTN)とリセットスイッチをはんだづけ。
ぴったりサイズなのでひっくりかえしても安定、はんだづけしやすい!


LEDは向きに注意、足の長いほうが +。電源用スライドスイッチをはんだづけ。
そして、CN5の5ピン、ピンソケットのはんだづけ。
実はこの時は気がついてませんでしたが、上下逆です。写真は間違ってます!!


キーボード、テレビ、電源をつないでスイッチON、動いた!エルチカできた!
・・・その後、I2C端子にVFDをつないで、コンパクトなカウントダウンタイマーを・・・と思って、間違って接続して、CPUを壊してしまいました。

10 [0]=180 20 R=I2CW(8,#800,2):WAIT60 30 [0]=[0]-1 40 IF [0]>=0 GOTO 20 50 PLAY "L16CDEFG"

IchigoJamから操る4桁7セグVFD表示器、はじめてのArduinoでI2Cスレーブ開発

壊してしまった IchigoJam Things、残念ですがせっかくなので後付液晶改造を紹介。

任意長ピンソケットの作り方。必要なピン数のとなりをニッパーかペンチでひっこぬく。


ひっこぬいてプラスチックだけになった部分をニッパーでまっすぐカット、できあがり!


ピンソケットにはんだをのせて(予備はんだ)


IchigoJam Things 裏面に乗せて、はんだづけ!


液晶ピン付き IchigoJam Things のできあがり!

LCDモジュール「FSTN液晶モジュール(SPI) - aitendoと接続すれば、使えるとのこと!
Maker Faire Kyotoの戦利品:IchigoJam Thingsの組み立てとLCD接続|JO3GBD - ブログ

Ruby on Jam を実現した、mrubyVMの軽量実装「mruby-l1vm
その軽さを生かして、WebAssembly化。web上クライアントサイド記述言語としての可能性を探ります。


mruby on web
アプリを開き、mruby 2.0 以降でコンパイルした、中間コード mrb ファイルをドロップ。
VMがバイトコードを実行し、最終値を表示します。

サンプルプログラムとお試しバイナリ sum.mrb

a = 100 sum = 0 while a>0 sum += a a -= 1 end sum

必要なメソッドなどは、emb_method内に実装すればOK!
DOM操作などをつければ、クライアントサイドのプログラムをRubyでサクサク書いちゃうことも可能ですね!

WebAssmeblyのバイナリである、wasmファイル、4KBを超える場合 Web Workers を使う必要があります。 その場合、Web Workers を使った「murby on web - over 4KB」を参考にどうぞ!

WebAssemblyのコンパイル、現在はこのようにしています (Mac)

PRJ=test-wasm clang -emit-llvm --target=wasm32 -S -I../ -Os $PRJ.c llc $PRJ.ll -march=wasm32 s2wasm --allocate-stack 100000 $PRJ.s > $PRJ.wast wast2wasm -o $PRJ.wasm $PRJ.wast

mruby、いろいろ活用方法探ってみます!

mruby で、Ruby on Jam、Windows環境でもコンパイルと転送、できたとのこと!
mrubyがIchigoJamで動くらしい 第4回戦 - Qiita

Maker Faire Kyoto 2019Ichigo Project チーム伊勢ブースでゲットしたマトリックスのようなVFD表示器、IchigoJamから自在に操れるよう、改造しました。

独特の発光が美しい、VFD。1970年代、海外産液晶の使用料が高かったことから生まれた、日本発技術!
VFDの強みとは? | 特集 | ノリタケ伊勢電子株式会社
こちら、現在は生産されていないレトロな7セグ単管VFD、DG12H1 by 伊勢電子工業を使った、時計がベース。
VFDふぁん: VFD単管時計


IchigoJam用のUSBシリアルの書き込み機を使って、TXD/RXD/GND/RESET(DTR)を接続。VFDは別途USBで電源をとっておきます。 Arduinoの開発環境上で、ボードを「Arduino/Genuino Uno」、ポートを使っているUSBシリアルを選択。Uploadで書き込めます。
src 「vfd_i2cslave.inoVFDふぁん: VFD単管時計の時計プログラムを元に改造


配線はこのように。上から32K,SQW,SCL,SDA,VCC,GNDとなっているVFDコントローラ基板のCN1。SCL,SDA,GNDをそれぞれIchigoJamのCN5のSCL,SDA,GND接続すればOK!

I2Cコマンド、送信する長さによって、10進数、16進数、7セグ自由表示、アニメーション設定まで可能としてみました。(I2Cアドレス、ひとまず8)

10進数4桁表示

[0]=1234:?I2CW(8,#800,2)

16進数など4桁表示(2進数、8進数なども可能)

POKE#700,16,#AB,#CD:?I2CW(8,#700,3)

7セグ自由表示(ドットを含めて8セグ、自在に表示可能、下位から下・左下・左上・中・右下・ドット・右上・上、の順)

POKE#700,#10,#20,#40,#80:?I2CW(8,#700,4)

アニメーションパターン

POKE#700,10,20,8,1,1,8:?I2CW(8,#700,6) POKE#700,11,20,8,#80,#80,8:?I2CW(8,#700,6) POKE#700,12,0,0,0,0,0:?I2CW(8,#700,6) ?I2CW(8,10)

10フレーム目(最大200フレーム)、WAIT20で、8,1,1,8のパターン登録(EEPROM)
11フレーム目、WAIT20で8,#80,#80,8のパターン登録
12フレーム目、WAIT値0で繰り返し。
10フレーム目を表示。


Enjoy with VFD!

Maker Faire Kyoto 2019での戦利品を素材に、いろいろ作ろう第一弾は、連打ゲーム!

楽しい素材がたくさん手に入りました。楽しみだったモノは、共立ブースで見つけた「ピエゾ素子/圧電素子!」


曲げると発電するピエゾ素子(圧電素子 - Wikipedia)。
LEDを差し込んで、曲げると・・・


光る!


オシロスコープで見てみると、軽く曲げるだけで、なんと+/-30Vもの電圧が!
これを直接 IchigoJam などマイコンにいれるとまずそう・・・。


マイナスの電圧をカットするためダイオードを接続し、LEDを付けてみました。


曲げるとプラス1.7V程度で反応する、使いやすい電圧になったので、IchigoJamにつないで、実験!

1 ?BTN();:CONT RUN

LEDのアノード側(プラス側)をBTNへ、マイナス側をGNDへと接続して、このプログラムを動かすと、軽くタッチするだけで反応するボタンになりました!


せっかくなのでちょっとプログラムを足して「連打測定マシーン」にしてみました!

10 VIDEO5 20 CLS:?"READY?":WAIT30 30 CLS:?"GO!":N=0:CLT 40 IF BTN()=0 CONT 50 N=N+1:?N 60 IF BTN()=1 CONT 70 IF TICK()<5*60 GOTO 40

5秒たつまで(TICK()<5*60)、カウントとして使っている変数Nをカウントアップ。BTNの押し下げ数を連打スコアとして表示し続けます。

机などにぶつけるとチャタリングのような現象で高速カウントアップしちゃったりするので、うまくチートを防ぐプログラムをかくか、いっそチートありでのハイスコアを目指すか、好きなように改造ください!
圧電素子■ジャンク■ / PIEZO-DJK」通販で買えます!(圧電サウンダーとして音も出せるんですね)

ダイオード、LED、ブレッドボードか簡単な基板でキット化するとかもよいかも!?
ゲームのコントローラーとして、ちょっと高いいろんなセンサーの置き換えはもちろん、未来を先取りするツールづく欠かさません!


今日、こどもの日のHana道場、新社会人になったMisakiくん企画のUnity講座!参加者は、小学生から大学生まで幅広い。


軽やかにジャンプするミミズが主人公の製作途中のゲーム、見せてもらいました。


新高専生と作曲好きなお友達、初Hana道場、プログラミングとコンピューターの超入門、楽しんでもらいました。

ピエゾ素子、Hana道場にも置いてきたので、ぜひ遊んでみて下さい!

ものづくり好きのための祭典、Maker Faire Kyoto 2019 DAY1!(たくさんの出会い!)
思わず動画撮影した、イチオシ3点を紹介!


電気楽器テスラコイル!1F奥のダークルームの一番奥、いい音させてる物理な自動演奏!


飛んでくるボールをサーベルで落とす!BeatSaberなヒト、ぜひ挑戦を!


自動割り箸割り機!2分ほどかけて丁寧に割ってくれます!


禁断の中身も公開!


ヒトとの比較w

作りたいたいから作る。
他に理由は必要なし!


発想の幅を広げたいときには、共立ブース。多量のピエゾ素子(圧電素子)!


曲げると発電する不思議素子。早速、手持ちのLEDを差し込み、遊んでもらいました!


IchigoJamにつないで、連打測定マシーンにしてみました!(制作方法、後日!)

会場はアイデアの宝庫!


フルカー7セグアクセサリー、電池の持ちは1分w


奈良高専による空間お絵かき、3Dクレヨン!


こどもに人気、サーボを使って魚釣りゲームマシンとして活躍する、IchigoJam!


電子銃の展示、大型ディスプレイがステキ!


テーブルを囲んで4人でゲーム!


着用する百葉箱、Chakuyo-bako。BLEでスマホと通信。作者さん、高専OB!


A3、PCN三重 / Team Ise ブースは盛りだくさん!


2017.4.1発表のIchigoJam Thingsが、なんと Team Ise から商品化!
レイアウトもすっきりかわいくなってます!記念特価(?)の1,500円!
残りはDIP部品ばかりではんだづけもやさしいので、こどももOK!(完成品もあります)


液晶付きIchigoJam、ICHIGO BOY 2 もあります!


PCN三重、プログラミング教室へ通うこどもがみんな持ってるという、かわいいEEPROM!
抜き差ししやすい取手に、裏面には名前欄も!
EEPROM経由でロボットプログラミングもありですねっ。


IchigoJamのアナログ入力を3チャンネル使って、フルカラーLEDの色ミックス実験機!


なんと、3Dプリンターによる6足歩行ロボ!


アメリカ東京上海バンコク、世界各地で開催、Maker Faire!
ものづくりに興味がある人にはぜひ!

ついに動いた、かわくだりゲーム in Ruby on Jam!

ひとまず画面出力のみ接続して、いろいろ試験中です。
mruby-L1VM、クラス対応した level 2(?) でも2.5KBで実装できました!(mruby VM level 1 in 2KB

LPC1114 IchigoJam OSが24KB、BASICプログラムの保存領域の余り3KBにmruby VMと、IchigoJam OS用のマシン語コードが収まっています。

4KBごとの書き換えに対応しているLPC1114、OSの後ろ、sector6だけ書き換えられたら速くて、OSを用意する必要もなく便利そう。

お世話になっている、lpc21ispというオープンソースな書き込みツールに、-sector オプションを追加して、プルリクも送ってみました。
taisukef/lpc21isp: lpc21isp - Portable command line ISP for Philips LPC family and Analog Devices ADUC70xx
(おまけに、うちの環境ではうまく動かない -contorol 用に、-controlwithoutwait オプションも追加)

バイナリデータにした軽量mrubyVM「mruby.bin」を sector6 に書き込み、IchigoJam で、LOAD0、RUNで、かわくだりゲームっぽいものを見ることができます。(カーソルがまだ効きません)

また、こちらのRubyのコード、mruby2.0.1のmrbcでコンパイルし、

cls lc 5,10 print "Hello Ruby on Jam!"

bin2basでPOKE文に変換

10 POKE#700,82,73,84,69,48,48,48,54,51,70,0,0,0,133,77,65,84,90,48,48,48,48,73,82,69,80,0,0,0,103,48,48 20 POKE#720,48,50,0,0,0,182,0,1,0,5,0,0,0,0,0,29,16,1,46,1,0,0,16,1,11,2,3,3,10,46,1,1 30 POKE#740,2,16,1,79,2,0,46,1,2,1,55,1,103,0,0,0,1,0,0,18,72,101,108,108,111,32,82,117,98,121,32,111 40 POKE#760,110,32,74,97,109,33,0,0,0,3,0,3,99,108,115,0,0,2,108,99,0,0,5,112,114,105,110,116,0,69,78,68 50 POKE#780,0,0,0,0,8

これをUSBシリアル経由でIchigoJamへ書き込み、RUNすると、画面にでます!

Let's play with Ruby on Jam!

I implemented mruby VM level 1 in 2KB ROM! Also runs on IchigoJam.
ROM2KBで動く極小 mruby-L1VM を作りました! IchigoJam でも動きます。


C言語で拡張するIchigoJam BASIC」と組み合わせて Ruby on Jam! IcihgoJam上でもこのRubyプログラムのバイナリ版、ROM容量2KBで動きました。
Ruby on Jam in ROM2KB! with bas2bin for 3KB asm

a = 100 sum = 0 while a > 0 sum += a a -= 1 end sum

sum.rb として保存したRubyファイル。mruby-2.0.1 のコンパイラ、mrbc を使って、mrbファイルを作って、mruby-L1VMへセットすればOK。(localvariableは不要なので、 --remove-lv オプションを付けて軽量化しておきましょう)
make mrb by mrbc (mruby 2.0.1), and set to mruby-L1VM.

mrbc --remove-lv sum.rb

とっても短いので、VMやコンパイラ学習用にもオススメ! メモリはすべてスタック管理なので組込の長時間運用にも向いてます。
I recommend you to learn about the VM and the compiler. No dynamic alloctations.

src on GitHub
mruby-L1VM: mruby VM implementation in 2KB ROM

人気のかわくだりゲームのRuby版はVM的には動作OK! IchigoJamと接続トライしてみます。
"Kawakudari (Rafting game)" famous game on IchigoJam also works it. I'll try to connect to IchigoJam.

cls; x=15 while true lc x,5; print "O" lc rnd(32),23; print "*" wait 3 k=inkey() x=x-(k==28?1:0)+(k==29?1:0) if scr(x,5)!=32 break end end

まったさん、スタンドアローン型Rubyの第一バージョン公開!
Mr. Matta publish the Ruby on Jam standalone edition!

- IchigoJam機で動く Ruby 、Lチカ成功! – about yrm

links
- Ruby on Jam! IchigoJamで動くROM8KBのミニ Ruby VM と、mruby ver2.0対応はじめのいっぽ - mmruby for LPC1114

mrubyのmgemのように、IchigoJamをC言語で拡張する方法をつくりました。
最大バイナリサイズ、なんと3KB!

IchigoJamのプログラムは、USBシリアル経由でターミナルなどで接続すれば、PS/2キーボードやテレビを用意することなく、らくらく開発! 完成したプログラムをサクっと転送するのに便利なツール「bas2bin for IchigoJam

これを使えば、BASICのファイルをIchigoJamに書き込むバイナリファイルにできるので、4ファイルまとめて書き込めるので、ワークショップ用などでまとめて準備する時、実製品として出荷するときなどに便利です。(初公開は2016/2/28

今回、C言語でつくったマシン語プログラムをIchigoJamのファイル1〜3へ書き込み、呼び出すマシン語プログラムを追加開発!

bas2bin/src/main.c の、main関数を使って開発し、ファイル1-3の3KBへ書き込んだプログラムを、ファイル0に書き込んだ起動用マシン語が入ったBASICプログラムから呼び出します。

__attribute__ ((section(".MAIN"))) int main(int param, int ram, int rom, int (*divfunc)()) { //return param + 1; return divfunc(100, param); // == 100 / param }

* 割り算はIchiogoJam内のバイナリを使えるので、400byte節約できます。

呼び出し用、ファイル0におかれる IchigoJam BASICプログラム (entry.bas)

1 '3KB asm 10 POKE#700,3,180,5,73,8,120,1,40,0,208,4,73,5,49,139,70,3,188,88,71,112,71,0,0,0,100,0,0,0,116,0,0 20 ?"100/3=";USR(#700,3)

実行すると、100/3の「33」と表示され、無事マシン語が呼び出されたことを確認できます。

IchigoJamはOSサイズ24KB、LPC1114FDH28のROMサイズ32KBの後ろ8KBをユーザーファイル用としています。 残念なことに4KB単位でしか消去できないので、1KB x 4のユーザープログラムを交互に書き込む仕組みになっています。

この後ろ3ファイル、3KBにマシン語をおき、25KB目か29KB目のどちらかマシン語がある方を呼び出しています。 FILESで見ても、1-3は何もでなかったりおかしな表示になる部分が、マシン語です。 先頭4byteを使って、マシン語が書き込まれているかどうかを判定しているので、厳密には3068byte(3KB-4B)まで。 利便性を削って、ファイル0の領域にも食い込ませれば、約4KB使ったオールマシン語プログラムも!

IchigoJam、どんな拡張しましょう!?
初回起動時に動く、すごいデモプログラムを作るのも楽しいかも!

bas2bin for IchigoJam - src on GitHub

呼び出し用のマシン語プログラム、asm15ソースがこちら (entry.bas)

PUSH {R0,R1} R1=[@FILE1A]L R0=[R1] R0-1 IF 0 GOTO 2 R1=[@FILE1B]L R1+=5 R12=R1 POP {R0,R1} GOTO R12 @FILE1A DATA L (24+1) * 1024 @FILE1B DATA L (24+4+1) * 1024

ファイル1の場所にマシン語があるかどうかチェックして、破壊可能なレジスタR12を使って呼び出し!

links
- USB-シリアルモジュール - ショップのふうせん
- はじめてのマシン語 - IchigoJamではじめるArmマシン語その1
- Ruby on Jam! IchigoJamで動くROM8KBのミニ Ruby VM と、mruby ver2.0対応はじめのいっぽ - mmruby for LPC1114

平成最後の一日一創、ついにIchigoJamで動いた Ruby on Jam!

IchigoJamでかんたんなRubyのコードをmrubyで中間コードにしてLPC1114用に改造したmmrubyを転送して実行! プログラムサイズが8KBしかないので、転送もサクサク。

Rubyのプログラム、転送から実行まで!

led 1 while btn()==0 end led 0 while true out 2,1; wait 10 out 3,1; wait 10 out 4,1; wait 10 out 4,0; wait 10 out 3,0; wait 10 out 2,0; wait 10 end

LEDを付けて、ボタンが押されるまで待つ。
押されたらLEDを消して、PCN金沢フルカラーLEDアクセサリーをOUT2/OUT3/OUT4でコントロール!


プログラムはパソコン上で編集する、パターン2(パソコンを持っている人向けの Ruby on Jam)


ボタン押さなくても光らせたい?
Rubyを編集して、再度コンパイルして、転送すれば、電源オンですぐに動く Ruby on Jam のできあがり!

mmruby IchigoCakeで動いたバージョンでは、52KBあったROMをダイエットして、8KBに!(主に標準ライブラリや、浮動少数ライブラリでした)

ただし、ちょっと複雑なコードになると動かなくなってしまうので、Ruby VMの理解を深めることと併せて、mruby 2.0 対応VMを作りかけてみました。 コンパクトで、コンパイラとかアセンブラとか言語とか、いろいろ勉強になって楽しいです。

src on GitHub
taisukef/micro_mruby_for_lpc1114: micro mruby VM implementation for LPC1114

links
- Ruby on Jam!? micro mruby VM for LPC1114, ひとまずIchigoCakeで動かしてみよう
- IchigoJamでRubyは動くのか?2つのアプローチとPC上試作 kawakudari.rb

IchigoJamでRubyを動かす2つ目のアプローチ、mrubyの中間コードをIchigoJamで動かすトライ、ひとまずプログラムサイズが50KB程度だったので、ROM56KB/RAM8KBのIchigoCakeで動作確認!

点滅しました!

Rubyのコードはこちら

while true led 1; wait 10; led 0; wait 10 led 1; wait 30; led 0; wait 30 end

国産プログラミング言語 Ruby の組込版 mruby、そのサブセット mruby/c を更に削った mmruby for Arduiono One を Arm Cortex-M0 のLPC1114に移植したものです。この連携連鎖こそ、オープンライセンスなオープンソースの真骨頂!

ちょっと複雑なコードにすると落ちてしまうので、まだまだ試験段階ですが、PC/Macでコンパイルして転送する基本的なところ、動きました! どこまで切り詰めてIchigoJamで動くようにするか、どういう機能を盛り込むか、削るかのバランス調整へと進みます。

VM側のコードはそのままに、中間コード(mrbファイル)やそれを変換したものだけを転送すればすばやく試せて便利そう。 使う機能に合わせてVM側のコードが自動的に生成され、小さければIchigoJamでOK、大きければIchigoCakeと変われば便利かも。 さくらインターネットのIchigoSodaと合わせて、RubyでかんたんIoTというプログラミング中級者向け大人向けワークショップも楽しいかも?

名付けて、Ruby on Jam!
Rubyで広げよう楽しいマイコン開発!

src on GitHub
taisukef/micro_mruby_for_lpc1114: micro mruby VM implementation for LPC1114

ちなみに、IchigoJam BASIC でつくるIoTは超簡単。シンプルな実装なら、その場で数行書いてデプロイ可!
大人も手軽にIoT! IchigoJam ver 1.3 は何が違うのか?>」
こどもプログラミング+IoT=大人プログラミング! 総務省 デジタル活用共生社会実現会議 ICT地域コミュニティ創造部会にて情報提供&体験会

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