2024年12月23日

015-1.EV3で楽しむスクラッチ3.0-第3回「センサーの入力」

ここでは「スクラッチ(Scratch)」を使ってレゴ マインドストームEV3のプログラミングを行う方法を紹介します。スクラッチとはMITメディアラボという研究施設のライフロングキンダーガーテングループによって開発されているプログラムのツールです。スクラッチの特徴としては、教育向けに作られていて親しみやすいこと、無償で使えること、Webブラウザでも動作すること、直観的にプログラムが作れることなどがあります。(文/松原拓也)

◆ タッチセンサーの検出

今回はスクラッチを使ってEV3のセンサーを入力してみたいと思います。
赤いワクで囲んだ部分がセンサーに関連するブロックです。 全部で6種類あります。スクラッチが対応しているセンサーはカラーセンサー、超音波センサー、タッチセンサーの3種類です。このためジャイロセンサーなどは検出することはできません。
6種類あるブロックのうち、「ボタン~が押されたとき」「距離<~のとき」「明るさ<~のとき」ブロックはイベントの発生用として使います。「ボタン~が押された」ブロックは条件判定用として使います。「距離」ブロックと「明るさ」ブロックは変数として使います。

タッチセンサーを使ってみましょう。タッチセンサーはこのように接続します。接続する入力ポートは1~4番のどれでもかまいませんが、ここでは1番につなぎます。

作成したプログラムがこちらです。パソコンのWebブラウザを使い、スクラッチの公式ページ(https://scratch.mit.edu/)を開いてプログラムを入力しましょう。詳しい操作方法は第一回目の連載記事で紹介しています。
「ずっと」ブロックを使って処理を繰り返します。そして、「もし」ブロックを使って条件判定を行います。「もし」ブロックの中の「ボタン~が押された」ブロックはタッチセンサーの状態を判定しています。この「ボタン」というのはタッチセンサーのことです。ブロック内の数値は入力ポートの番号を表しています。ここでは1番にセンサーを接続していますので、「1」に設定します。

画面上の「緑の旗」のアイコンをクリックするとプログラムを実行することができます。 プログラムを実行して、タッチセンサーを押すと「こんにちは!」というメッセージが表示されます。
うまくタッチセンサーを検出することができました。

◆ 超音波センサーで距離を検出

続いて超音波センサーを検出してみましょう。
このように超音波センサーを接続します。

このようなプログラムを作ります。
先ほどと同じく「ずっと」ブロックを使って処理を繰り返します。「~と~秒言う」ブロックの中に「距離」ブロックを組み込んで、超音波センサーの値を表示します。 このブロックには入力ポートの番号を設定する項目がありませんが、どうやら自動的に設定されるようです。

プログラムを実行すると、このように距離が表示されます。
一見するとうまく動いているように見えます。しかし、値が実際よりもかなり小さく表示されてしまいます。おそらく、この距離の値は単位が「cm」ではなく「inch」で表示されていると思います。たとえば「7.5」と表示された場合、1インチは2.54cmですから、7.5×2.54=19.05cmということになります。

◆ カラーセンサーで明るさを検出

続いて、カラーセンサーを使って明るさを読み取ります。インテリジェントブロックにカラーセンサーを接続すると、 LEDが赤色ではなく、青色に光っています。カラーセンサーが周辺の明るさを検出するモードに設定されているということです。なお、現時点では光の反射量を検出したり、色の検出をすることはできません。

作成したプログラムがこちらです。
「~と~秒言う」ブロックの中に「明るさ」ブロックを組み込んで、カラーセンサーの値を表示しています。

実行した結果です。吹き出しに明るさの測定値が表示されます。
思ったよりも測定値が小さいです。これは、反射量を測定するモードではないため、受け取る光量が少なくなっているためです。

ちなみにカラーセンサーを2つ接続してみたのですが、正しく動作しませんでした。測定値が「0」になってしまいます。どうやら、一度に接続できるカラーセンサーは1つだけのようです。

◆ ライントレースロボットを作る

センサーの使い方が一通りわかりましたので、ライントレースロボットを作ってみましょう。
前回に作成した車型ロボットにカラーセンサーを1つ取り付けます。

作成したライントレース用のプログラムです。
先ほどと同じく「ずっと」ブロックを使って処理を繰り返します。そして、「もし~なら~でなければ」ブロックを使って処理の分岐を行っています。分岐の条件と、分岐後の処理は次のとおりです。
・カラーセンサーの「明るさ」が3より大きい場合→モーターAを0.1秒間正転する(左折する)。
・カラーセンサーの「明るさ」が3以下の場合→モーターDを0.1秒間正転する(右折する)。
このように右折と左折を繰り返すことで、ロボットが線の境界を走ります。

実行してみます。カラーセンサーの値が小さめに出てしまいますので、いつもより照明を明るくします。
実行すると、ロボットが線の黒と白の境界を走っていきます。見事、ライントレースロボットを作ることができました。 ただ、ロボットの動きがギクシャクしています。これはモーターの回転とセンサーの検出を同時にできないためです。動きの悪さが気になりますが、これが現時点での限界です。

今回作成したプログラム(スクラッチ3.0用)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。