2024年11月7日
002-1.NXT ソフトウェア入門-第1回「計算ブロックの使い方」
ここではレゴマインドストームNXTとNXTソフトウェアを使ったプログラミング方法について、できるだけ初歩的なところから紹介していきます。(文/松原拓也)

写真は皆さんご存知のNXTの「インテリジェントブロック」です。
この中には32ビットのマイコンと8ビットのマイコンが合計で2つ入っています。つまり、計算能力の高いコンピュータでもあるというわけです。今回はこの能力を生かして、計算を行うプログラムを作ってみたいと思います。

プログラムを作る方法として、代表的なものとしては「NXTソフトウェア」と「ロボラボ(Robolab)」の2つがあります。
どういうわけか教育現場ではロボラボが使われる場合が多いため、今までの連載では、主にロボラボを使ってました。一般用のレゴマインドストームNXTを買った場合には「(教育用でない一般用の)NXTソフトウェア」が付属しています。アフレルさんで売ってる「デスクロボ」というセットを買った場合には「教育用NXTソフトウェア」が付属するようです(最新バージョンは1.1)。

写真は「教育用NXTソフトウェア」を立ち上げた時の画面です。

参考までに一般用と教育用のNXTソフトウェアの違いには次のような点があります。
- ・教育用では画面の右側に「ロボット・エデュケーター」というウインドウがありますが一般用にはありません。ロボット・エデュケーターはプログラム方法の製作例をまとめたものです。
- ・教育用ではランプや温度センサ、9Vモーターなどのブロックが最初から使えるようになっています。一般用はプラグインを入れないと使えません。
- ・操作方法の違いは特にありません。この記事で紹介するプログラムは教育用でも一般用でも関係なく使うことができます。

まずは、メニューから「ヘルプ」「目次と見出し」を選択してみてください。

メニュー選択すると、ヘルプが表示されます。ここにはNXTソフトウェアの使い方が載っています。おそらく、どんな書籍よりも細かく説明していますので、ここをしっかり読めば、教科書は何もいらないということになります。
、、、とすると、もう私の書くことが無くなってしまいます。なので、以下の記事ではできるだけヘルプに載っていないようなことを紹介していきたいと思います。

NXTソフトウェアはロボラボと同様にタイル状の命令を並べてプログラムを作っていきます。
タイル状の命令は「ブロック」と呼びます。まずは矢印の部分をクリックして、すべてのブロック(完全なパレット)が表示されるように設定してください。
◆ 表示をするプログラム

では、最初は練習がわりとして、文字を表示するだけの単純なプログラムを作ってみます。
写真のようにブロックを配置してみてください。

最初なので、手順を細かく解説します。
まず、マウスカーソルをパレットの上から2番目(動作)に合わせて、それから丸の部分をクリックしてください。

すると「表示ブロック」が浮かんだ状態になりますので、マウスを動かして開始と書かれた位置でクリックしてください。
これでブロックが固定されます。

画面下に注目してください。これは、表示ブロックの設定を行うためのウインドウです。そのままの状態では、スマイルマークを表示するように設定されています。

「動作」のコンボボックスを「テキスト」に設定します。こうすると、文字を表示させることができます。これ以外に「動作」には線を描いたり、円を描く機能があります。

続いて、「ウエイトブロック」を表示ブロックの右どなりに置きます。ウエイトブロックとは「処理を待つ」ために使うブロックです。
2つのブロックが白い棒(ビーム)に乗っていますが、この棒のことを「シーケンスビーム」と呼びます。ブロックはこの棒をつたって左から右へ順番に実行されます。
以上でプログラムは完成です。

ウエイトブロックの設定は次のようにしてください。
コントロール:センサー
センサー:NXTボタン
ボタン:入力ボタン
動作:ぶつかった
、、、このように設定すると、入力ボタンが押されるまで処理を待つようになります。

インテリジェントブロックをパソコンにつないだ状態で、「ダウンロードして実行」を押します。
ダウンロードを実行すると、インテリジェントブロックにプログラムが書き込まれます。

インテリジェントブロックをパソコンにつなぐためには「USB」と「ブルートゥース(Bluetooth)」の2種類があります。ダウンロード前にあらかじめ設定しておいてください。

仕様的な問題なのですが、ロボラボとNXTソフトウェアは一緒に
使うことができません。たとえば、インテリジェントブロックにロボラボのファームウェアが書き込まれている場合には「File error!」というエラーが表示されてしまいます。もし、このエラーが出た場合にはファームウェアを更新してください。

なお、作成したプログラムに間違いがあった場合、次のような画面で「エラー」と表示されてしまいます。エラーとなる原因は様々ですが、可能性としてはブロックを置き間違っていることが考えられます。問題点を突き止めて、直してください。

うまくいくと、写真のような文字が画面に表示されます。
そして、入力ボタン(四角いボタン)を押すと終了します。
[Download]計算プログラム・その1(NXTソフトウェア用)
◆ 「1+1」を計算するプログラム

その1で作ったプログラムを改良します。
プログラムの左側に「計算ブロック」と「数値→テキスト変換ブロック」という2つのブロックを追加してください。

「計算ブロック」は写真の場所にあります。画面には「数学」と
表示されていますが、正しくは「計算ブロック」です。

「数値→テキスト変換ブロック」は写真のところにあります。
「テキスト番号」と書かれていますが、正しくは「数値→テキスト変換ブロック」です。

計算(数学)ブロックの設定を修正します。
キーボードを使って、AとBのテキストボックスにそれぞれ「1」を入力します。

写真のようにブロック同士を線でつなぎます。この線を「データワイヤ」と呼びます。
「データワイヤー」というのは「データの線」、情報の通り道のことです。この線を通ってブロックからブロックに値が伝えられます。
データワイヤーの接続する部分をプラグと呼びます。

たとえば、ブロック1つ1つが人間、そしてデータワイヤーは「糸電話」として考えることができます。ただし、大きく違う点として、普通の糸電話はお互いに交互に会話ができますが、データワイヤーでは一方通行にしか会話ができません。データの流れる向きはプラグの位置によってすでに決まっています。

うまく実行できると、写真のようになります。1+1の計算結果の「2」です。
[Download]計算プログラム・その2(NXTソフトウェア用)
◆ 変数を使った足し算

さらに凝ったプログラムに改良していきましょう。
その2で作ったプログラムに4つのブロックを追加します。

次の方法で変数を作ります。変数というのは値をしまうための
「入れ物」のことです。
メニューから「編集」→「変数を定義」を選択します。

名前「変数_1」、データタイプ「数値」に設定して、「作成」ボタンを押します。それからさらに名前「変数_2」、データタイプ「数値」に設定して、「作成」ボタンを押します。

変数ブロックを2つ配置します。1つのブロックは「変数」の設定画面で、リストを「変数_1」を選択。そしてもう1つのブロックは「変数_2」を選択します。

変数_1と変数_2のブロックは、もう一組同じものを配置します。
変数ブロックは合計で4個です。 左側2個の変数ブロックは「動作」のラジオボタンを「書き込み」に設定します。右側2個の変数ブロックはラジオボタンを「読み込み」に設定します。

その2のプログラムでは足すための値が計算ブロックの中に
入っていましたが、このプログラムでは変数から値をもらっています。

ちなみにデータワイヤーは、このように交差させることもできます。見づらいだけですが問題はありません。

それから、ブロックがシーケンスバーに乗っていないとエラーに
なってしまいますので注意してください。

プログラムの実行がうまくいくと、写真のように計算結果が表示されます。
正解の「2」が表示されました。表示される内容はその2の時と同じです。
[Download]計算プログラム・その3(NXTソフトウェア用)
◆ (おまけ)電卓プログラム

その3のプログラムをさらに発展させて、電卓のプログラムを作ってみました。足し算しかできませんが、2つ値を足して答えを求めることができます。 なぜわざわざ変数を使って計算をするのか? それはこのようなプログラムが作れるというメリットがあるためです。

これが電卓プログラムです。
プログラムのサイズが大きくなりすぎて、縮小すると見づらくなってしまいました。そこで、4つに分割して内容を紹介します。

最初の処理です。「+」「=」を表示させています。

左ボタンがぶつかった場合の処理です。変数_1の値を増やして表示します。
処理の分岐を繰り返しを行うために「ループブロック」「スイッチブロック」というブロックを使っています。これらについては次回に紹介します。

左ボタンがぶつかった場合の処理です。変数_2の値を増やして表示します。

入力ボタンがぶつかった場合の処理です。

実行すると、次のようになります。
まず、「+」と「=」の記号が画面に表示されます。

それから、左右のボタンを押します。

すると、赤い線を部分の数字が増えていきます。数字はボタンを押した数だけ増えます。

入力(四角い)ボタンを押すと計算結果が表示されます。
これが電卓プログラムです。足し算しかできないという欠点がありますが、改良すれば四則演算は切りかえることができるようになると思います。
[Download]計算プログラム・その4(NXTソフトウェア用)
次回にはループブロックやスイッチブロックについて紹介します。
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。