micro:bitを自分だけのパソコンに改造しよう!プログラミングもロボット操作もお手軽なmicroDake環境の作り方!

micro:bitを自分だけのパソコンに改造しよう!プログラミングもロボット操作もお手軽なmicroDake環境の作り方!

02.JPG

micro:bitがパソコンになる「micro:Dakeアダプタ」、ちょっと使ってみましょう。まずは何はともあれ micro:bit を準備。hexファイルを書き込むために一般的なパソコン、そして USB<->microUSB ケーブルも準備してください。

01.png

最新のmicroDakeOSをこちらよりダウンロードしてください。

03.JPG

パソコンとmicro:bitを接続します。

04.png

すると「MICROBIT」という外部ストレージが現れますので、「ichigonquest.ubit.dj.ja.aiueo.hex」をドラッグ&ドロップで書き込みます。写真はmacですがWindowsでも同じです。書き込みが終わるとmicro:bitが自動でリセットしますが、書き込んだhexファイルは見えません。

05.JPG

これでOK、ケーブルをはずします。

06.jpg

micro:Dakeアダプタに取り付けます。

07.JPG

ちょっと硬いですがザクッと。

08.jpg

あとはスクールセットなどのIchigoIgai に差し込めば、

09.JPG

小さなMyパソコンのできあがり、IchigoDakeのように使うことができます。

IMG_6200.jpeg

もちろん DakeJacket に刺せばカムロボだって動かせます。

標準のIchigoDakeと違って、

  • ボタンが2つ
  • LEDが5×5こ
  • 加速度センサー
  • 無線通信

など、楽しみがたくさん!

今回つかった IchigonQuestならキーボードタイピングも必要ありません。どんどんプログラミングを楽しもう!

 

 

 

 

 

 

 

 

.

 

micro:bit でお手軽プログラミング「micro:Dakeアダプタ」提供開始、無線通信はとっても便利!

micro:bit でお手軽プログラミング「micro:Dakeアダプタ」提供開始、無線通信はとっても便利!

IMG_2518

micro:bit用のロボットカー「Ring:bit Car」をゲットしました。

IMG_2520.jpg

キット状態で入っています。micro:bit本体も付いて $34.50

IMG_2521.jpg

なんと、走行用モーターは360度サーボ

IMG_2523.jpg

電源は単4電池3本です。

IMG_2522.jpg

完成。組み立ては本当に簡単、10分程度。

IMG_2528.jpg

ではmicro:bitにプログラムを入れましょう(こちらを参考に準備)。micro:bitをパソコン化する micro:Dakeアダプタ を使って IchigoIgai に接続して IchigonQuest (for uBit) を起動します。

IMG_2530.jpg

Ring:bit Car は360度サーボで動きますので、命令は ぱるす(PWM) を使います。

IMG_2532.jpg

150が停止、100や200で正転反転します。今回は1秒前に進んで止まる、とやってみました。

IMG_2533.jpg

micro:Dakeアダプタからmicro:bitをはずして、

IMG_2534.jpg

Ring:bit Car に取り付け、ネジ5本です。

IMG_2538.jpg

micro:bitのボタンを押しながらスイッチを入れれば 1秒前に 進みます!

IMG_2527.jpg

もう少し複雑な動きにしましょう。毎回ネジ5本をつけたりとったりするのは面倒なので、別のmicro:bitをもう1つ、こっちでプログラムを組むことにします。

IMG_2539.jpgIMG_2540.jpg

15行のこんなプログラムにしました。5×5 LEDに矢印を表示しながら左右にゆらゆら動く予定です。

IMG_2541.jpg

ちなみに IchigonQuest uBit (microDakeOS) では micro:bit 前面にある 5×5 LED に絵を表示するためのエディタを備えているので簡単です。

IMG_2542.jpg

できたプログラムは無線で送ります。ロボット側のmicro:bitの電源を入れ、そのあとにスイッチを押します。すると5×5 LEDが光り プログラム受信モード になります。

IMG_2543.jpg

そこでプログラム作った側から つうしん -> おくる とすれば送信完了。

ロボットのスイッチを入れれば動き出します。無線送信便利ですね。

せっかくなので2台で並走してみました、かわいい。

 

c4345cbcaa917216fb3c.jpeg

micro:bit でお手軽プログラミング「micro:Dakeアダプタ」いよいよ提供開始。

 

 

 

 

 

.

 

8kB JavaScriptエンジン「MINIScript」を使ってみよう!Cで書かれたスレッドクラスの使い方やスタッククラスの派生方法を徹底詳説!

8kB JavaScriptエンジン「MINIScript」を使ってみよう!Cで書かれたスレッドクラスの使い方やスタッククラスの派生方法を徹底詳説!

「8kB ROM, 1kB RAM」の極小JavaScriptエンジン「MINIScript」を使ってみます。

Screen Shot 2018-08-29 at 10.25.48.png

まず “Clone or download” から “Download ZIP” でソースコードをダウンロードします。

Screen Shot 2018-08-29 at 10.27.53.png

内容はこんな具合です。”readme.c” が使い方となる説明になっていて、ひとまず

$ gcc -m32 miniscript.c mslib.c readme.c && ./a.out < sample.js

とすればビルドしてサンプルJSを動かすことができます。

 

今回は自分で一から使ってみましょう。

Screen Shot 2018-08-29 at 13.38.52.png

まずは空っぽのCファイル、ここでは “myproduct.c” を用意します。

int main(){
    MyStack stack;
    MyScope scope;
    Thread thread;

    Stack_(&stack.base, SIZE_STACK);
    Scope_(&scope.base, SIZE_SCOPE);
    Thread_(&thread, src, &stack.base, &scope.base);

    Thread_run(&thread);      //[*1]

    Thread__(&thread);
    Scope__(&scope.base);
    Stack__(&stack.base);
}

これが最低限、肝となるコードです。その中でも特に [*1] がスクリプトを実際に実行する箇所です。命名規則上、コンストラクタはクラス名の後ろにアンダーバー “_” が1つ、デストラクタはアンダーバーが2つです。Stackオブジェクト stack とScopeオブジェクト scope を作り、それらを用いて Threadオブジェクト thread をコンストラクト、最後に Threadクラスのメンバ関数 Thread_run を呼べば完了です。JavaScriptのソースコードは thread コンストラクト時に渡しておきます。thread,scope,stackの各オブジェクトは使い終わったらデストラクトしておきます。

#define SIZE_STACK 0x40

typedef struct{
    Stack base;
    Var vars[SIZE_STACK];
} MyStack;

stackオブジェクトはMyStackクラスですが、このようにStackクラスから派生させてください。派生元のStackクラスは実メモリを持たない状態で宣言されています。SIZE_STACKで好みの深さのStackとして派生させてください。

#define SIZE_SCOPE 0x40

typedef struct{
    Scope base;
    VarMap nvars[SIZE_SCOPE];
} MyScope;

scopeオブジェクトについてもstack同様です。scopeオブジェクトは実行中の変数や関数の名前を保持することに使われます。JavaScriptソースコード中で多くの名前が登場する場合にはSIZE_SCOPEを多めに設定してください。

#define MS_SIZE_POOLEDOBJ 0x04  // object member max
#define MS_SIZE_POOLEDARR 0x20  // array length max
#define MS_SIZE_VARNAME   0x8   // var name length max
#define MS_SIZE_PROPNAME  0x8   // property name length max
#include "miniscript.h"

あとは “miniscript.h” を #include すればいいのですが、このヘッダーファイルは設定すべき値が4つあり、#include より前に上記のように適当な値を設定してください。

const char src[] =
    "var calc = function(p1, p2){ return p1*p2; };"
    "var a = calc(3, 6);"
;

今回のJavaScriptソースは試しにこのようにしてみましょう。”a” が 18 になるはずです。

    printf("%d\n", Stack_tip(&stack.base, -1)->num);

スクリプト実行後、stackの最後尾を調べれば 変数a の値が入っているはずですのでこのようにしてprintfして見てみましょう。

 

#include <stdio.h>

#define MS_SIZE_POOLEDOBJ 0x04 // object member max
#define MS_SIZE_POOLEDARR 0x20 // array length max
#define MS_SIZE_VARNAME   0x8  // var name length max
#define MS_SIZE_PROPNAME  0x8  // property name length max
#include "miniscript.h"


#define SIZE_STACK 0x40
typedef struct{
 Stack base;
 Var vars[SIZE_STACK];
} MyStack;

#define SIZE_SCOPE 0x40
typedef struct{
 Scope base;
 VarMap nvars[SIZE_SCOPE];
} MyScope;

const char src[] =
    "var calc = function(p1, p2){ return p1*p2; };"
    "var a = calc(3, 6);"
;

Var Stack_OVERFLOW;

int main(){
    MyStack stack;
    MyScope scope;
    Thread thread;

    Stack_(&stack.base, SIZE_STACK);
    Scope_(&scope.base, SIZE_SCOPE);
    Thread_(&thread, src, &stack.base, &scope.base);

    Thread_run(&thread);

    printf("%d\n", Stack_tip(&stack.base, -1)->num);

    Thread__(&thread);
    Scope__(&scope.base);
    Stack__(&stack.base);
}

こちらが今回の “myproduct.c” の全貌です。保存したら,

$ gcc -m32 miniscript.c myproduct.c && ./a.out

でビルド&実行してみましょう。

18

と表示されましたか?

今回はJavaScriptの配列やオブジェクトを利用しませんでしたが、それらを使うこともできます。詳しくは付属の readme.c をご覧ください。

 

MINIScript」は NXP LPC1114 用 組み込みOS「IchigoLatte」のために作られたJSエンジンです。容量的な制約が多い中、少しでもフットプリントの小さいエンジンを目指してヒープは使わずメモリはCスタックやグローバルに確保します。ちなみにIchigoLatteでは libc も自前実装してあります。

ECMAScriptのサブセットとして作っていて機能はまだまだ少ないですが、今後はJSON表記に対応したり、いろいろ加えたいなと思っています。みなさんの楽しいご意見、お待ちしています!

 

 

 

 

 

 

 

 

.

 

The gerber data of “IchigoJam S” and the BOM list has published in GitHub. / オープンハードウェア「IchigoJam S」のガーバーデータとBOMリストをGitHubに公開!

The gerber data of “IchigoJam S” and the BOM list has published in GitHub. / オープンハードウェア「IchigoJam S」のガーバーデータとBOMリストをGitHubに公開!

Screen Shot 2018-08-28 at 9.12.22.png

We have published the gerber data of  “IchigoJam S” designed by NaturalStyle. The BOM list also included. Please use for creation your original boards or extension boards.

 

NaturalStyleデザイン「IchigoJam S」の基板データ(ガーバーデータ)を公開しました。推奨パーツリスト(BOM.xls)も同梱しています。独自基板、拡張基板の製作などに活用ください。

 

 

 

 

 

 

.

 

極小JavaScriptエンジン「MINIScript」、GitHubに登場!フットプリントはROM 8kB、RAM 1kB

極小JavaScriptエンジン「MINIScript」、GitHubに登場!フットプリントはROM 8kB、RAM 1kB

Screen Shot 2018-08-27 at 10.04.37

極小JavaScriptエンジン「MINIScript」のソースコードをGitHubに公開しました。これは IchigoLatte に使われているエンジンです。

これは8kbのROM、1kBのRAMしか使用しません(arm thumb)。機能はまだサブセットですが、みなさんのForkを待っています。

 

[使い方はこちら]
8kB JavaScriptエンジン「MINIScript」を使ってみよう!Cで書かれたスレッドクラスの使い方やスタッククラスの派生方法を徹底詳説!

 

 

 

 

.

 

A tiny JavaScript engine “MINIScript” appears on GitHub! It’s need only 8kB for ROM and 1kB for RAM.

A tiny JavaScript engine “MINIScript” appears on GitHub! It’s need only 8kB for ROM and 1kB for RAM.

Screen Shot 2018-08-27 at 10.04.37

I have published source code of tiny javascript engine ‘MINIScript’ to the GitHub. It is the engine used in IchigoLatte.

This MINIScript use only 8kB of ROM space, RAM usage is about 1kB(in arm thumb). The functions are subset yet, I’m waiting for your fork.

 

[How to use]
8kB JavaScriptエンジン「MINIScript」を使ってみよう!Cで書かれたスレッドクラスの使い方やスタッククラスの派生方法を徹底詳説!

 

 

 

 

 

 

 

.

 

宇宙へ飛び立つ”カニ”の競技「越前がにロボコン」参加者募集開始!君のロボットは無事に帰還できるか!?

宇宙へ飛び立つ”カニ”の競技「越前がにロボコン」参加者募集開始!君のロボットは無事に帰還できるか!?

第2回 越前がにロボコンルールが公開され、参加募集がはじまりました!

banner.png

事前講習会も各教室にて開催!

Screen Shot 2018-08-27 at 6.56.43.png

 

「歩行タイプは1.5倍」という昨年のルールは「歩行タイプはゴール時に+2点」に改定されました。

激闘の蟹ロボコン、事前講習会で作ってもよし、オリジナルの蟹ロボットで挑戦してもよし、大会は 2018.11.25、福井市ショッピングシティ ベル にて!

 

 

 

 

 

.