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


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

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

トランスレータ概要

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

必要な環境

注意: 「プロデルStuduinoトランスレータ」は、
アーテック様製品とは関係の無い非公式のツールです。本ツールやプロデルについてアーテック様へ問い合わせしないでください。
また後継品の「Studuino:bit」は開発環境が異なるため、対応していません。

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

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

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

RdrStuduino.zipのダウンロード 1.0.2 (2019/7/6更新)

主なファイル

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

使い方

本ツールは、β版ですのでプロデル言語からArduino言語への変換機能と、Arduino IDEでのコンパイル・書き込みのバッチ処理のみを提供しています。プロデルデザイナ上では編集のみ可能です。教育環境での実利用には作成環境が不足していますので評価用としてお試し下さい。

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

//led.rdr
「スタディーノ.プロデル」を参照する
スタート手順
	繰り返す
		A4でLEDを点灯する
		1だけ待つ
		A4でLEDを消灯する
		1だけ待つ
	繰り返し終わり
終わり

『「スタディーノ.プロデル」を参照する』を書くことでArduino言語への変換ルールが読み込まれ、プロデルデザイナでも正しく解釈できるようになります。

プログラムを変換する際には、あらかじめ、Studuinoのポートに接続されたモーター類(キャリブレーションを含む)、センサー類を設定しておく必要があります。setting.jsonもしくは、プロデルファイルと同名の.jsonファイルに記述します。

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

rdrstuduino.exe led.rdr

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

なお、プロデル言語からArduino言語への変換処理のみ実行したい場合は、次のように「/trans」オプションを指定します。生成されたinoファイルはArduino IDEで開くことができ、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
  もし終わり
終わり

プログラム例

プログラム例は、「Studuinoとプロデルでロボットプログラミング」にて紹介しています。

自動ドア

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

// 自動ドア //
「スタディーノ.プロデル」を参照する

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

手順のリファレンス

動かす

  • [時間]だけ、待つ
  • [変数]を[値]だけ増やす
  • [サーボモーター]を[角度]に設定する
  • [ポート]で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を使います。また、ポートについては変換時のプロデルファイルと同名の.jsonファイルでも指定することができます。

{
  "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・・・Studuinoが接続されたUSBのCOMポート (setting.jsonのみ)
  • DCCalibrationData・・・DCモーターの補正値 (setting.jsonのみ)
  • SvCalibrationData・・・サーボモーターの補正値 (setting.jsonのみ)
  • DCMotorPort・・・使用するDCポート{DC1,DC2}
  • ServomotorPort・・・使用するサーボモーターのポート{D9,D10,D11,D12}
  • SensorPort・・・使用するセンサーポートと接続する部品。ポート名={A0,A1,A2,A3,A4,A5,A6,A7}。
センサーポートに接続する部品の設定値意味
PIDLEDLEDライト
PIDBUZZERブザー
PIDLIGHTSENSOR光センサー
PIDTOUCHSENSORタッチセンサー
PIDSOUNDSENSOR音センサー
PIDIRPHOTOREFLECTOR赤外線フォトリフレクタ
PIDACCELEROMETER加速度センサー
PIDPUSHSWITCHプッシュスイッチ
PIDIRRECEIVERIR Receiver
PIDGYROSCOPEジャイロスコープ
PIDTEMPERATURESENSOR 温度センサー
PIDULTRASONICSENSORUltrasonic sensor
PIDCOLORSENSORColor sensor
PIDGANALOGOUTPUTAnalog Output
PIDGDIGITALINPUTDigital Input
PIDGDIGITALOUTPUTDigital Output
PIDGANALOGINPUTAnalog Input

まとめ

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

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

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

ツールのコード

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

更新履歴

  • 2019/7/6 1.0.2公開 モーター・センサー設定をrdrファイルと同名のjsonファイルに追記できるように変更。簡易エディタ「プロデルdeStuduinoエディタ」の追加。不具合の修正
  • 2019/6/23 1.0.1公開 Arduino言語への変換ルールを「スタディーノ.プロデル」へ移動。同時にプロデルデザイナでのシンタックスハイライトにも対応。ブザー命令を追加。お掃除ロボットのサンプルを追加。
  • 2019/5/21 初版

  • いいね (4)
  • 続きを読みたい (7)

コメントを残す