プロデルで書いたプログラムをStuduinoで動かす「プロデルStuduinoトランスレータ」(β版)


Studuinoを動かすためのプログラムをプロデル言語で書ける「プロデルStuduinoトランスレータ」(β版)を公開しました。Studuinoは、小型マイクロコンピュータArduinoの互換機で、ブロックや電子部品と共に学校教育向けのセットとして販売されています。

Arduinoは、Arduino言語と呼ばれるC言語に似たプログラミング言語で動作を書きますが「プロデルStuduinoトランスレータ」を使うことでプロデルの文法で書いたプログラムをArduino言語(Studuino専用のinoファイル)へ変換できます。

アプローチ

プロデルStuduinoトランスレータは、Studuinoのライブラリを利用したinoファイルをプロデルプログラムから生成します。Studuino添付のスクラッチ互換のブロックプログラミング環境で生成できるinoファイルと同様の変換処理をします。このツールを使うことで、ブロックプログラミング環境を使わずにプロデルらしい文法でStuduinoを制御するプログラムを作成できます。

必要な環境

注意: 「プロデルStuduinoトランスレータ」は、
アーテック様製品とは関係の無い非公式のツールです。本ツールやプロデルについてアーテック様へ問い合わせしないでください。

プロデルStuduinoトランスレータは、プロデル言語からStuduino向けArduino言語(.inoファイル)を生成するだけのツールです。

プログラムのコンパイルとStuduino本体への書き込みには、Arduino IDEを使います。Arduino IDEでStuduinoを使う方法は、公式のドキュメントが用意されていますので、そちらをご参照の上環境を準備して下さい。

プロデルStuduinoトランスレータのダウンロード

RdrStuduino.zipのダウンロード

主なファイル

  • readme.txt ・・・ はじめにご覧下さい
  • RdrStuduino.exe ・・・ トランスレータ本体
  • head.txt, foot.txt ・・・ .inoファイルの冒頭と末尾(Studuinoソフトウェアに同梱)されているもの
  • settings.json ・・・ 設定ファイル(変換およびポート設定、モータ補正)
  • board.bat ・・・ コンパイル・書き出しバッチひな形

使い方

本ツールは、β版ですのでプロデル言語からArduino言語への変換機能と、Arduino IDEでのコンパイル・書き込みのバッチ処理のみを提供しています。現在の所、プロデルデザイナ上では利用できません。教育環境での実利用には適していませんので評価のみにご利用下さい。

まずプロデル言語で「スタート」手順を定義します。次のプログラムは、A4端子に接続したLEDライトのブロックを点滅させるプログラムです。

//led.rdr
スタート手順
	繰り返す
		A4でLEDを点灯する
		1だけ待つ
		A4でLEDを消灯する
		1だけ待つ
	繰り返し終わり
終わり

プログラム作成後、「プロデルStuduinoトランスレータ」で変換します。コマンドプロンプトなどで次のように実行します。

rdrstuduino.exe led.rdr

変換が成功すると、ledフォルダが作成され、その中に変換されたled.inoファイルが生成されます。Studuinoが接続されている場合は、inoファイルがコンパイルされ、プログラムが本体へ書き込まれます。

なお、プロデル言語からArduino言語への変換処理のみ実行したい場合は、次のように「/trans」オプションを指定します。生成されたinoファイルはArduino IDEで開くことができ、Arduino IDEでの編集やコンパイル、書き出しも可能です。

rdrstuduino.exe /trans led.rdr

文法

プロデルの文法に従います。ただしプロデル標準の種類や手順は、利用できません。Studuino向けに用意された手順のみが使用できます。

制御構文(もし文や、繰り返し文)は、ブロックプログラミング環境で指定できる制御ブロックに準じます。変換時に、プロデルの通常の制御構文からArduino言語に相当する表現へ置き換えられます。

繰り返す

繰り返し終わり

//////////
10回繰り返す

繰り返し終わり

//////////
Aが10未満の間繰り返す

繰り返し終わり

//////////
もしAが10なら

もし終わり

//////////
もしAが10かつbが1なら

そうでなければ

もし終わり

式は、四則演算ブロックと比較演算ブロックに相当するプロデルの文法が使用できます。記号(+*=<>)もしくは日本語(~が~、~が~より大きいetc.)どちらでも指定できます。全角・半角も区別されません。

1+2
2-10
b<10
c>10
dが1以上
cを2で割った余り
dを丸める
10の平方根
1から10までの乱数

また、関数および変数についても、ブロックプログラミング環境で宣言・表現できるものについてのみ対応しています。関数名および変数名には、日本語を使用できます。(.inoファイルへの変換時に適当な半角英数字に置換されます)

スタート手順
   処理する
終わり
処理する手順

終わり
【値】
スタート手順
  値は、値+1
  もし値が10なら
    値は、0
  もし終わり
終わり

プログラム例

自動ドア

赤外線フォトリフレクタが反応するとドアが開くプログラムです。

スタート手順
     繰り返す
         もしA4から赤外線フォトリフレクタの値が15未満なら
             サーボモーターD9を180に設定
         そうでなければ
             サーボモーターD9を90に設定
         もし終わり
     繰り返し終わり
 終わり

手順のリファレンス

動かす

  • [時間]だけ、待つ
  • [変数]を[値]だけ増やす
  • [サーボモーター]を[角度]に設定する
  • [ポート]でLEDを点灯する
  • [ポート]でLEDを消灯する
  • [速さ]へDCモーターM1の速さを設定する
  • [速さ]へDCモーターM2の速さを設定する
  • [DCモーター]を正転する
  • [DCモーター]を逆転する
  • [DCモーター]を解放する

調べる

  • [ポート]からボタンの値
  • [ポート]から光センサーの値
  • [軸]から加速度センサーの値
  • [ポート]から赤外線フォトリフレクタの値
  • [ポート]から音センサーの値
  • [ポート]から温度センサーの値

指定できる定数値

引数には次の定数が指定できます。

  • DCモーター={DCモーターM1,DCモーターM2}
  • サーボモーター={サーボモーターD9,サーボモーターD10,サーボモーターD11,サーボモーターD12}
  • ポート={A0,A1,A2,A3,A4,A5,A6,A7}

setting.config

利用ポートの選択や接続された部品を指定、サーボモータ補正データを登録するには、setting.configを使います。

{
  "ComPort": "COM4",
  "DCCalibrationData": [ 100, 100 ],
  "DCMotorPort": [
    "M1",
    "M2"
  ],
  "SvCalibrationData": [ 0, 0, 0, 0, 0, 0, 0, 0 ],
  "ServomotorPort": [
    "D9",
    "D10",
    "D11",
    "D12"
  ],
  "SensorPort": {
    "A0": "PIDPUSHSWITCH",
    "A1": "PIDPUSHSWITCH",
    "A2": "PIDPUSHSWITCH",
    "A3": "PIDPUSHSWITCH",
    "A4": "PIDLED",
    "A5": "PIDIRPHOTOREFLECTOR",
    "A6": "PIDPUSHSWITCH",
    "A7": "PIDPUSHSWITCH"
  }
}
  • ComPort・・・COMポート
  • DCCalibrationData・・・DCモーターの補正値
  • DCMotorPort・・・使用するDCポート{DC1,DC2}
  • SvCalibrationData・・・サーボモーターの補正値
  • ServomotorPort・・・使用するサーボモーターのポート{D9,D10,D11,D12}
  • SensorPort・・・使用するセンサーポートと接続する部品。ポート名={A0,A1,A2,A3,A4,A5,A6,A7}。
センサーポートに接続する部品の設定値意味
PIDLEDLEDライト
PIDBUZZERブザー
PIDLIGHTSENSOR光センサー
PIDTOUCHSENSORTouch sensor
PIDSOUNDSENSOR音センサー
PIDIRPHOTOREFLECTOR赤外線フォトリフレクタ
PIDACCELEROMETERAccelerometer
PIDPUSHSWITCHPush switch
PIDIRRECEIVERIR Receiver
PIDGYROSCOPEGyroscope
PIDTEMPERATURESENSOR Temperature sensor
PIDULTRASONICSENSORUltrasonic sensor
PIDCOLORSENSORColor sensor
PIDGANALOGOUTPUTAnalog Output
PIDGDIGITALINPUTDigital Input
PIDGDIGITALOUTPUTDigital Output
PIDGANALOGINPUTAnalog Input

まとめ

プロデルのプログラムを構文解析して別のArduino言語へ変換するトランスレータを公開しました。まだツールはプロデルデザイナには対応しておらず実用レベルにはなっておりません。まずは変換が技術的に可能であることを確認することができ、Studuinoで求められる基本的な機能についてはほぼプロデルでも実装できる環境が作れることが分かった所です。

昨今言われているプログラミング教育では、ブロックプログラミングを用いたものが多くを占めていますが、ブロックプログラミングに頼らないプロデルのようなテキストで入力する日本語プログラミング言語にも良さがあり、それについては、すでにこのブログで紹介しております。Studuinoのような学習キットでも、プロデルの文法でプログラムが書けることは、プログラミング環境の多様性の点でも意味があるかと思います。

なお、記事につきましては、バージョンアップと主に改訂していく予定です。

ツールのコード

トランスレータのソースコードは、GitHubで公開しています。
https://github.com/utopiat-ire/RdrStuduino

更新履歴

  • 2019/5/21 初版
  • いいね (4)
  • 続きを読みたい (6)

コメントを残す