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

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地域コミュニティ創造部会にて情報提供&体験会

Hana道場主催、プログラマブルな教育用ドローン「TELLO EDU」を IchigoJam でプログラミングするeスポーツ大会! こどもも大人も、ドローンによる熱き戦い、盛り上がりました!

参加してくれたHana道場に通う、8人の小学生!


わくわくな顔!


IchigoJam と TELLO EDU とは、MixJuice1.2.2bファーム)を使って無線LAN接続(UDF)
まずはチュートリアル、IchigoJam BASIC によるプログラミングで、飛ばし方を学びましょう。


飛んだ!

飛ばし方、コントロールの仕方が分かったら、早速4ステージに挑戦!

ぴったりちゃくち(精度を競う!)


まずは測量!


おぉ、かなり近い!


ボウリング


おもちゃのボウリングのピン、風ですぐ倒れるので、実際の配置は、ばらばらに。


2人チーム、協力して作戦を練ります。本日の最高得点、4点!


スピードレース(フープを通り、ポールを回ってゴールを目指そう)


測量結果を元に設計中。


最後のフープ、くぐれるか!?


福井新聞社による取材、ここの写真が使われた!?(鯖江、牧野百男市長による福井新聞掲載紹介


スモウ(ひもでつないでファイト!)


その場で組んで、対戦も熱い!(まったさん親子による試験中)


時間の都合上、トーナメント戦で1発勝負!動画でその熱い戦いの一部、ご紹介。


ドローンを使った新eスポーツ、楽しい競技を考えた人にはIchigoJam用ゲームをプレゼント企画!
早速、スピードレースをリレーして競う、団体戦とするアイデア。センサーを加え、タッチを実現できるとおもしろいかも。


お試し初大会の参加者は、Haan道場でIchigoJamを学ぶ、8人!


IchigoDakeスクールセットDakeJacketMixJuiceを使ったグループワーク対応セット。 1人ずつ準備したスクールセット、ドローンはチームで1台、作ってIchigoDakeを差し替えて飛ばす!
45分の制限時間の間、3ステージをどう分担するか!?


さて、狙い通りに飛ぶか!?


優勝!なんと、全国大会出場権をゲット!


DJI Japan からもご来鯖!


本日のスライド「IchigoJam x ドローン - プログラミングeスポーツ大会
IchigoJam体験者向けのスライド、事前にTELLO EDUとUDP対応のMixJuiceβを接続しておけば即、飛ばせます!
MixJuiceに TELLO EDU モードを追加して、ぐっと簡単になる予定。
「IchigoJam x TELLO EDU - リファレンス
チュートリアルが終わったら、リファレンスをみながら、いろいろトライ!
IchigoJamの基本を学んだ次のステップにオススメです!

links
- プログラミング教育は「メンター育成」から、鯖江市ではシニアが活躍 | Forbes JAPAN(フォーブス ジャパン)
- Hana道場

Rubyのまつもとさん、Ruby on IchigoJamを思案!

IchigoJamのCPU、LPC1114FN28/FDH28は、Flash32KB, RAM4KB、mrubyがターゲットとするRAM400KBとは100倍の開きあり。
でも、ぎゅっとプログラミングの楽しさにフォーカスすれば、きっと、大丈夫!

まずは、IchigoJamで人気の「かわくだりゲーム」をRubyでコンパクトに書いていてみて、コンソールで動かしてみました。

「かわくだりゲーム in Ruby」 ターミナルのフォントはIchigoJamフォントに!
できたRubyのプログラムはこんな感じ。

require "./ichigoruby" 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

こちらIchigoJam BASIC版と比べてみてください。簡単にステップアップできそうですね!

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

かわくだりゲームを手軽に動かすために、エスケープシーケンスから探し始めましたが、リアルタイムなキー入力や、画面表示場所のチェックなどで、行き詰まり、Cursesというライブラリを使いました。

gem install curses

で、cursesをインストールし、なんちゃってIchigoJam風ライブラリ「ichigoruby.rb」と共にお試しください!
IchigoRuby src on GitHub

IchigoJamでRubyを動かす、2つのアプローチ
1. IchigoJam BASIC や、IchigoLatte 同様、スタンドアローンで動かす。
2. PCでコンパイルした中間言語をIchigoJamへ転送して、動かす。

1は、エディタやコンパイラも含めて実装する必要があるので、制限が強めのRuby。 2は単純にLPC1114を使い切るC言語より手軽な中規模組み込み開発まで使えるくらいを目指せるかも?

なんと、IchigoJam / IchigoLatte でForthが動く!
LED Blinking with Forth!? Do you want “IchigoLatte Forth” which is uncompromising programming environment for IchigoJam machine? / ForthでLチカ!?IchigoJam用 超絶硬派プログラミングOS「IchigoLatte Forth」はいかが? – about yrm

きっと、まったさんが1をやってくれそうな気がするので、こちらは2の実装、やってみます!

links
- 100円マイコンを使い倒そう!たった28byteから始めるマシン語アプリ開発
- Create Happy! Ruby City Matsue 三度目の訪問

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