Spheroで正方形を描いてみよう

※はじめてSphero(スフィロ)でプログラミングをはじめる人は、こちらから見てくださいね。

1.正方形に動かすためには?

今回は正方形の形にロボットを動かす方法について、いっしょに考えていきましょう。まずは、動かすための「ロール(英語で転がるという意味)」ブロックをおきます。

このブロックの意味は「0」の方向に「120」のスピードで「1秒」間を動くという意味です。

参考 スフィロの方向について

正方形を描くということは…
これを90°ずつ方向を変えて繰り返せばいいのかな

いいアイディア!!「スタート」を押してみよう!

スタート!わー!できた!

ロボットが正方形を描くことができました。
次に正方形を2回描くプログラムを作ってみよう。

2回描けばいいのだから…簡単!

これも正解!

では3回、4回と続ける場合はどうしたらいいでしょう。正方形のプラグラムでなにか気づくことはありませんか?

方向のところだけが変わっている

そうですね!

方向に注目してみると、90°ずつ変わっていることがわかります。
この変化しているところを使って、より簡単に描くために、さらに2つの方法を試してみましょう。

2.センサーを使ってみよう

まずは、スフィロが持っているセンサーから今のスフィロの向きを指示する方法。

下のメニューの「演算子」の中から、「0+0」ブロックを持ってきて、一番上のロールの「方向」のところに入れます。

下のメニューの「センサー」の中から、「進行方向」ブロックを「0+0」ブロックの左側の「0」の部分に入れて、右側の「0」に「90」と入れます。

上の赤枠内3つのロールブロックを捨て、下のブロックだけを残します。

まずはこの状態でスタートをタップしてみましょう。
すると…

上の図のように、右の方向に1秒動いて止まりました。

? どうしてこのような動きになるのか ?

進行方向」ブロックは、今のスフィロがある向きに対しての進行方向のことです。
はじめはどこにも動いていないので、はじめの値の「0(上)」です。そこに「進行方向+90」ブロックにより、90が足されて、「進行方向(0)+90=90」の方向に、つまり右(90)に動くという意味となります。

ここで、メニューの「コントロール」の中から、「永久ループ」ブロックをもってきます。(ループとはくり返し行われるという意味)

「永久ループ」ブロックの中に、「ロール」ブロックを入れて、次のように「プログラム開始」の下に入れてみよう。

これで完成!

スタートボタンを押してみると…

上の図のように、①→②→③→④の順に右(90)に角度を変えながら、正方形を描くように動きます。

? なぜこのように動いたか ?

「永久ループ」ブロックはその中にあるブロックを何度も繰り返すことができるブロックです。
はじめに「進行方向(0)+90=90(右)」の方向に動きます。そして永久ループにより上に戻ってくり返します。

次に「進行方向+90」の方向に動くことになりますが、①で90(右)の方向に進んだので、「進行方向」は今スフィロがある方向のことなので「90(右)」となります。
そこにさらに90が足されると、「進行方向(90)+90=180(下)」となり、下の方向に進みます。…②

そして次に、「進行方向(180)+90=270(左)」…③、その次は「進行方向(270)+90=360(上)」…④というように、正方形を描きます。
スフィロのロボットに組み込まれているセンサーから取ったデータを活用することで、正方形を描きながら動かすことができます。

3.変数を使ってみよう

次に紹介するのは「変数(へんすう)」を使って正方形を描く方法です。
 
★変数とは、「変化する数という意味」で、例えばいろいろな数字を入れることができる箱だと思ってください。
変数がよくわかると、後にむずかしい動きをプログラムすることができるようになります。

変数は箱

下の写真を見てください。
①メニューの「変数」から「変数を作成」のボタンをタップ。
②変数名は数字(number)の英語、「num」とします。
③「数字」を選びます。右の「0」というのは変数の箱にはじめに入る数字ですが、これは「0」のままでOK。
④最後に右上のチェックマークを押しましょう。

すると「num」という名前の変数の箱が作られます。ここには、はじめに「0」が入っています。

はじめの値は0

ここから変数を使ってみよう!

これを4つのブロックのうち一番上の「ロール」ブロックの「方向」のところに入れてください。

上の赤枠内3つの「ロール」ブロックは捨てると、下のブロックだけ残ります。

そして、メニューのコントロールの中から、「永久ループ」ブロックを持ってきて、

下の図のように「プログラム開始」のブロックとつけます。

永久ループの間にあるブロックは止める指示をするまで、何度もくり返されます。
では、スタートボタンを押してみましょう。

スタート!

様子を見ていると、まっすぐ上に進み続けるのがわかりますね。
「永久ループ」ブロックではさんでいるので、「numの方向(はじめの値を「0」にしたので0°の方向、つまり正面)に120のスピードで1秒動く」をくり返して、正面にまっすぐ進むしかないわけです。

そこで正方形を描くために、右、下、左…と、少しずつ角度を変えたいので、次の操作をします。

「変数」の中から、「numを0にセット」というブロックを、次の写真の2つの位置に入れてください。

上の「numを0にセット」というブロックは、変数のはじめの数字を「0」にするために入れました。
※もともと「0」が入るように変数を作ったのでこのブロックは入れても入れなくてもかまいません。はじめに上(0°、つまり正面)ではなく右方向(90°)に動かしたいときなどに使います。

★大切なのは下の方にある「numを0にセット」のブロックです。
このブロックの数字を90に変えます。

これで正方形を描きそうですよね。プログラムは考えるよりやってみる!が大切です。答えもたくさんあるので、まずはスタートを押して試してみましょう。

あれ?途中から戻ってこない。

? なぜこのような動きになってしまったのでしょうか ?

プログラムを上から順に見ていきましょう。

プログラムがスタートされると、
①まずは変数numに0が入ります。
②その後「ロール」ブロックにより0の方向、つまり上に動きます。
③そして「numを90にセット」ブロックで、numに入っていた0が消えて、90が入ります。

④「永久ループ」ブロックにより、永久ループの中の一番上のブロック、「ロール」ブロックに戻り
⑤「ロール」ブロックによりnumの方向、つまり今度は90°の方向(右)に進みます。
⑥「numを90にセット」ブロックで、numに入っていた90が消えて、もう一度90が入ります。同じ90です。そのため、「永久ループ」ブロックにより上にまた戻ったときも、「ロール」ブロックではまた90の方向に、つまり右に進んでしまいます。

このようにして、0、90、90、90、、、

と進んでしまうので、うまく正方形を描くことができません。

しょんぼり。。

ここでわかったことは変数「num」のブロックに入る数字(角度)を1回ごとに変えていく必要があるということです。

メニューの「演算子」の中から、「0+0」のブロックを、

ループの中の「numを90にセット」の、90のところに入れます。(90が消えてしまいますが気にしないでください)
そして「0+0」の左の「0」に変数「num」ブロックを入れて、右の「0」に「90」を打ち込みます。

さて、これで動かしてみましょう。

うまくいったね!

? なぜうまくいったのでしょうか ?

プログラムを上から順に読んでみてください。

変数「num」に注目をしてみていきましょう。
まず「ロール」ブロックの一番左の「num」には0が入ります。そして方向「0」の方向(上、つまり正面)に1秒間動きます。「num」にはいった0が消えて90が入ります。どうして90になったかというと、その下のブロックの左から2つ目の「num」には、初めは「0」が入っているので、隣の90と足されます。つまり、0+90=90が入ります。

「90」の方向(右)に進んだ後、「永久ループ」ブロックで「ロール」ブロックに戻り、方向「90」(右)に動きます。そして、numに入っていた90が消えて、90+90=180が入ります。
「永久ループ」ブロックで「ロール」ブロックに戻り、

方向「180」(下)に動きます。そして、numに入っていた180が消えて、180+90=270が入ります。「永久ループ」ブロックで「ロール」ブロックに戻り、

方向「270」(左)に動き…というようにして、変数に入った数字が少しずつ変わるため、正方形を描くことができます。

変数を使う前(左)と使った後(右)のプログラムを比べて見てみましょう。変数を使うとブログラムも短くなって、読みやすくなりましたね。

? 変数の数値が本当に変化しているのか ?

チェックしたい場合は、スフィロに今の変数をおしゃべりさせながら動かすこともできます。
下のプログラムのように組んで試してみよう。

⑴メニュー「演算子」から「文字構築」ブロックをもってきます。

右側の鉛筆マークを押して、「数を追加ボタン」を押して、チェックマークをタップします。


このような数字の1が表示されればOK!

次にメニューの「色とサウンド」から「スピーク」ブロックをもってきます。

ここに「文字構築」ブロックを入れて、「永久」ループの最後に入れます。
また文字構築の数字「1」の部分に変数「num」ブロックを入れてください。

これで完成。それでは動かしてみましょう。

〈角度をしゃべりながら正方形 動画〉

文字構築ブロックは、numに入った数字を文字(例えば、1だと「イチ」)に変更にします。
文字にすることによってスピークブロックでおしゃべりできるようになるのです。なお、音が出るのはスフィロからではなく、プログラミングをしているデバイス(スマートフォンやタブレットなど)からです。
変数を使うことの良いところは、プログラムを簡単に組めるようになるということだけではありません。

実はこの状態でプログラムを少し直すと、今度は正三角形が描けるのです。
どうすればいいのか?
ヒントはココをある数字に変えると…

答えは、スフィロで正方形を書いてみようで紹介します!

今回使ったブロック

「進行方向」


現在のスフィロの「今現在」のデータを活用するためのブロック。「センサー」カテゴリー内にあります。

「0+0」


数を足したり、引いたりするときに使用するブロック。中央の矢印を押すと、+の他にいろいろな演算子が出て来ます。「演算子」カテゴリー内にあります。

「永久ループ」


間にはさまれたブロックを繰り返します。ストップが押されるまで繰り返される。「コンパレータ」カテゴリー内にあります。

「numを0にセット」


作った変数の値を変えるときに使用します。「変数」カテゴリー内にあります。

「スピーク」


中に入っているものを、スフィロにおしゃべりさせることができるます。「サウンド」カテゴリー内にあります。

「文字構築」


数字を文字に変えるときに使います。今回は「スピーク」ブロックに入れるために使用しています。「演算子」カテゴリー内にあります。

Step3. Spheroで正三角形を描こう >

協力/桑子研 様(サイエンストレーナー)