Studuinoとプロデルでロボットプログラミング


ロボット製作や電気実験に特化したArduino互換基板であるアーテック社のStuduinoを使って、プロデル上でロボットプログラミングをしてみようと思います。

プロデル言語で書かれたプログラムをArduino言語へ変換する「プロデルStuduinoトランスレータ」をすでに公開しています。このツールを使ってプロデルの文法でロボットプログラミングできます。

今回記事を書くにあたり、Studuinoの基板とセンサー・モーター、ロボットパーツなどと、書籍がセットになった「アーテック うきうきロボットプログラミングセット(書籍付)」を購入して試してみました。付属するブロックや電子部品が異なるいくつかのStuduinoのセットが量販店や専門店で2万円前後で販売されていますので、お好みのものを購入してみてください。

なお東京秋葉原のツクモロボット王国本店では値引きしているので、定価より少し安く買えます(小声)。

後継品の「Studuino:bit」は開発環境が大きく異なるため、プロデルでは対応していません。購入時にはご注意下さい。

ロボットの作成方法

ロボットの作成は、次の順に進めていきます。

  1. モーターやセンサーにブロックを付けて、組み立てます。
  2. プロデルのプログラムを.rdrファイルとして作成します。
  3. 接続しているモーターやセンサーの種類を.jsonファイルで設定します。
  4. PCにUSBケーブルでStuduinoを接続します。
  5. プロデルStuduinoトランスレータでArduino言語に変換し、Studuinoへ書き込みます。
  6. Studuino本体のリセットボタンを押して動作を開始させます。

書き込みにはArduino IDEのインストールやStuduino用ライブラリの登録などの準備が必要ですこちらをご覧下さい。

プロデルStuduinoトランスレータでは、.rdrファイルに加えて、.rdrファイルと同名の.jsonファイルを作り、その中で使用する部品を設定します。

(なお現在、プロデルのプログラム作成と、プロデルStuduinoトランスレータの呼び出しが簡単に操作できるエディタを作成中です)

プロデルStuduino用エディタ

自動ドア

書籍に載っている赤外線フォトリフレクタとサーボモーターを使った題材です。詳しい説明は、書籍に書かれていますので、プログラムだけご紹介します。

書籍にある通りにブロックを組み立てると、ドアがうまく開閉できないようですので、この写真ではドアに隙間を空けるために、少し変則的な組み方にしています。

さらに、下記のプログラムでは書籍と異なりドアを内開きにしてみました。赤外線フォトリフレクタは、動作環境によっても異なりますので、値を調整しながら試してみて下さい。

自動ドア.rdr

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

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

自動ドア.json

D9にサーボモーターを接続します。またA4に赤外線フォトリフレクタを接続します。

{
  "ServomotorPort": [
    "D9"
  ],
  "SensorPort": {
    "A0": "PIDPUSHSWITCH",
    "A1": "PIDPUSHSWITCH",
    "A2": "PIDPUSHSWITCH",
    "A3": "PIDPUSHSWITCH",
    "A4": "PIDIRPHOTOREFLECTOR",
    "A5": "PIDPUSHSWITCH",
    "A6": "PIDPUSHSWITCH",
    "A7": "PIDPUSHSWITCH"
  }
}
自動ドアの組み立て・動作例

ロボットカー

DCモーターとサーボモーターを使ったロボットカーの例です。アーテック公式サイトにて掲載されている教材PDFで解説と共に作ることができます。

https://www.artec-kk.co.jp/artecrobo/edu/products/es_download.php

ロボットカー側面
ロボットカー全面
(目玉を付けてみました)

ロボットカー.rdr

「スタディーノ.プロデル」を参照する

スタート手順
	DCモーターM1の速さを100へ設定する
	DCモーターM1を正転する
	サーボモーターD9を90へ設定する
	1だけ待つ
	サーボモーターD9を60へ設定する
	1だけ待つ
	サーボモーターD9を120へ設定する
	1だけ待つ
	サーボモーターD9を90へ設定する
	1だけ待つ
	DCモーターM1を停止する
終わり

ロボットカー.json

DCモーター(M1)とサーボモーター(D9)をそれぞれ使います。

{
  "DCMotorPort": [
    "M1"
  ],
  "ServomotorPort": [
    "D9"
  ]
}

掃除ロボット

壁に当たらないように床を進む掃除ロボットです。こちらも書籍で紹介されていますので、プログラムだけご紹介します。

掃除ロボット

掃除ロボット.rdr

自動ドアと同様に、赤外線フォトリフレクタの値を使用環境に合わせて調整してください。

// 掃除ロボット //
「スタディーノ.プロデル」を参照する
【角度】

スタート手順
	角度を0にする
	繰り返す
		もし2が(A4から赤外線フォトリフレクタの値)より小さいかつ(A4から赤外線フォトリフレクタの値)が10より小さいなら
			DCモーターM1の速さを50へ設定する
			DCモーターM1を逆転する
			サーボモーターD9を角度へ設定する
			0.5だけ待つ
			角度を1だけ増やす
		でなければ
			DCモーターM1を正転する
			サーボモーターD9を90へ設定する
			5だけ待つ
			サーボモーターD9を180へ設定する
			0.5だけ待つ
			3から7まで乱数だけ待つ
			角度を0にする
		もし終わり
	繰り返し終わり
終わり

掃除ロボット.json

DCモーター(M1)とサーボモーター(D9)、また赤外線フォトリフレクタを接続します。

※なお、サーボモーターの駆動時にDCモーターのコードの長さに余裕が無くなるためDCモーターM2に接続すると良いかと思います

{
  "DCMotorPort": [
    "M1"
  ],
  "ServomotorPort": [
    "D9"
  ],
  "SensorPort": {
    "A0": "PIDPUSHSWITCH",
    "A1": "PIDPUSHSWITCH",
    "A2": "PIDPUSHSWITCH",
    "A3": "PIDPUSHSWITCH",
    "A4": "PIDIRPHOTOREFLECTOR",
    "A5": "PIDPUSHSWITCH",
    "A6": "PIDPUSHSWITCH",
    "A7": "PIDPUSHSWITCH"
  }
}

信号機

こちらは、アーテック公式サイトに載っている教材です。信号機は、うきうきロボットプログラミングのキットに含まれない部品(緑のLEDライト, タッチセンサー,ブザー,ケーブル)を使用しています。部品は、ヨドバシカメラなどで単品購入できます。なお、ここではタッチセンサーの代わりにStuduino基板のプッシュボタンを使います。

https://www.artec-kk.co.jp/artecrobo/edu/pdf/text/87379.pdf

信号機.rdr

「スタディーノ.プロデル」を参照する

スタート手順
	A1でLEDを点灯する
	繰り返す
		もしA2からボタンの値が0なら
			2秒待つ
			A1でLEDを消灯する
			A0でLEDを点灯する
			5回繰り返す
				A3で64をブザーから鳴らす
				0.1秒待つ
				A3でブザーを止める
				0.3秒待つ
				A3で60をブザーから鳴らす
				0.2秒待つ
				A3でブザーを止める
				0.6秒待つ
			繰り返し終わり
			A0でLEDを消灯する
			0.5秒待つ
			5回繰り返す
				A0でLEDを点灯する
				0.5秒待つ
				A0でLEDを消灯する
				0.5秒待つ
			繰り返し終わり
			A1でLEDを点灯する
		もし終わり
	繰り返し終わり
終わり

信号機.json

A0とA1がLED、A2がプッシュスイッチ(タッチボタン)、A3がブザーとなるように接続します。

{
  "SensorPort": {
    "A0": "PIDLED",
    "A1": "PIDLED",
    "A2": "PIDPUSHSWITCH",
    "A3": "PIDBUZZER",
    "A4": "PIDPUSHSWITCH",
    "A5": "PIDPUSHSWITCH",
    "A6": "PIDPUSHSWITCH",
    "A7": "PIDPUSHSWITCH"
  }
}

トラブルシューティング

・何か動作するが、指示した通りに動作しない

.jsonファイルでモーターやセンサーが正しく設定されているか確認して下さい。またモーター利用時は電源に接続する必要があります。

・書き出されない (前回書き込み時の動作となる)

コンパイルエラーまたは書き出し時のエラーが発生した可能性があります。不要なプログラムがないかなどプログラムをご確認下さい。またsetting.jsonにてUSB接続のシリアルポート番号(COM)の番号を変えて確認して下さい。

Scratch(ブロックプログラミング)との違い

プロデルは、テキスト形式のコードを入力するプログラミング環境です。プロデルの文法の特徴としては次の点が挙げられます。

  • 操作の対象を助詞(てにをは)を使った文で指示できる
  • 変数や関数を日本語で名付けられる
  • コピー&ペーストによるソースの利用・改良ができる
  • プログラムや教材を、掲示板(もしくは教育支援システム)で共有できる

一方、Studuino付属のソフトウェアではブロック環境(Scratch)でプログラムを組み立てています。ブロックプログラミングでは、タイプミスが起こらない、おまじないや特殊な記号がない等の視覚的な読みやすさがあり、テキスト形式で起こる躓く点を解消しています。ブロック環境では、本質的ではない躓く点を排除して、本来教えるべきロジックに集中することができます。集団で学ぶ場合には、特に適していると思います。

ブロック形式とテキスト形式それぞれ一長一短があり、学習の時間的制約や環境によって善し悪しが変わってくると思います。ただ、プログラミングに取り組み時間が長くなるにつれて、いつかはPythonやJavaScriptと言ったテキスト形式のプログラミング言語に接することになります。それを考えれば、ブロック形式は導入で用いるものとなり、はじめからテキスト形式でプログラミングすることも学習プランとして考えてもよいかと思います。ブロック環境とPython等の間の位置づけとしてプロデルがお役に立てればと考えております。

  • 続きを読みたい (1)
  • いいね (2)

コメントを残す