障害物を発見したら避ける


このセクションは入門編では本来扱いません。

フリータイムで余裕がある方が自習するために設けてあります。

 

ここでは、ロボカーの障害物回避行動をプログラムします。

 

仕様書を書いてみます。

 

 1 前進をする

 2 超音波センサーで前方に障害物を発見したら走行を停止

 3 後方に下がり

 4 方向転換

 5 上記「1」に戻る

 

ですね。

 

 

さて、いよいよ特別ミッションに挑戦です。

今まで少しずつ実習してきた知識を総動員してプログラミングしていきます。

 使うブロックは左のようなものです。

 

・「ずっと」

・「もし ならば でなければ」

・「前進」「停止」「その場で旋回」

・「一時停止」

・「超音波スキャナー」

 

※左のプログラムに特に意味はありません。

 

超簡単なプログラム構造で実験します。
「ボタンを押したら・・」という仕組みにするには

更なるテクニックが必要となるので今回は使いません。

 

注意:いきなり走り出します。

必ずTiny:bitを台座の上に置いて

プログラムを転送してください!!

 

「ずっと」ブロックの中に

「論理」群から「もし<真>なら・・でなければ」を

組み込みます。

 

・「論理」群から「2つの値を比較」するブロックを置き

・「Tiny:bit」群から「超音波センサー(cm)」を組み込み

・比較条件を「>」に設定して

・「もし<真>なら」の六角形に組み込みます。

 

”正面15cmに何もなければ・・・”

というプログラムです。

 

「Tiny:bit」群から「車速 前進 0」ブロックを

「もし・・・」の上側に組み込みます。

速度を「50」に変更します。

 

これで障害物がない場合は前進することになります。

 

次は「障害物があった場合の回避行動」ですね。

 

先程作った「車速 前進 50」ブロックを右クリックして複製を作ります。

 

複製したブロックの動作を「前進」から「後退」に変更

「でなければ」の中に組み込みます。

 

「基本」群から「一時停止(ミリ秒)」をその下に組み込み

数字を「200」に変更します。

 

同様の作業で

「車速 左旋回(その場)・・」「一時停止・・」を

組み込みます。

 

 

 

台座の上へTiny:bitを置いてください。

Tiny:bitの電源はOFFにしておいてください。

プログラムを転送します。

 

PCからの給電でもタイヤが回り始めます。

手を近づけて、タイヤの動きが変わることを確認してください。

両輪:前進 → 両輪:後退 → 左:後退 / 右:前進 → 両輪:前進

と変わります。

 

 

動作が確認できたら

 

USBケーブルを外し

車をフロアの上へ置き

Tiny:bitの電源スイッチをONにします。

 

周囲の人に踏まれないように声掛けしてくださいね!

停止命令は入っていないので、手で持ち上げてスイッチを切ってください。

 

 

ーーー 初級講座はこれで終わりです ーーー


以下は初級編で扱わなかった部分で ”付録” 扱い です。

 

今回の入門講座は、最低限の機能だけを使って講座を構成しています。

 

「ステップアップ講座(仮称)」では、自分が描いた黒い線の上をたどって走る「ライントレース」などを通じて、いちばん大切な「プログラミング的思考」を学びます。

「ロボコン」へチャレンジするため必要な知識が満載です。

 

                    2024年7月

 

 

サンプル

超音波 乱歩くん ←ここをクリック

 

このプログラムでは今まで使っていない「変数」「関数」を使っています。

変数は「距離」と「速度」を記憶しておく ”場所” です。

「速度」を変数にすることで一斉に変更ができます。

「関数」は同じ処理を外に出せるのでプログラムが見やすくなります。

 

これらの機能は「中級編」で勉強します。

開催することが決まったら是非来てくださいね!

 


以下は作ったけど今回は使わないことにした記事です。

「変数」と「乱数」を使うと「超音波 乱歩くん」がほぼ作れます。

「関数」は「拡張機能」から「関数」を選んで、(今回は)名前を「距離測定」などと決めるだけです。

プログラムが複雑になるとこういう機能がないととてもスマートなプログラムは作れません。

これらは「中級編」でじっくり学びます。

 

 

変数について

興味があればどうぞ


 

今までの実習では「ランダム」は出てきていません。

ランダムとは「適当に選ぶ」ことで、サイコロを投げることに例えられます。

 

この実習では、「右か左いずれか」に方向を変えることに利用します。

プログラム上で「0」か「1」の目しかないサイコロを振るようなものです。

 

 

簡単に「乱数」の実習をしてみます。

 

新しいプロジェクトを作成します。

 

「入力」群から「ボタンAが押されたら」を置きます。

 

その中に「論理」群から「もし<真>なら でなければ」ブロックを組み込みます。

 

 

 

 

 

 

 

「基本」群から「数を表示 0」を2個

「もし」ブロックの囲みの中へ組み込みます。

上側の「数を表示」の数値を「1」に変更します。

 

※コンピュータ内部の電圧の有無(2進数)が起源で

  「真(True)」は1、「偽(False)」はゼロ

と扱われることが多いです。

 

 

 

「計算」群の中に「ランダムに真か偽を決める」ブロックがあります。

 

これを「条件判断」に使います。

 

 

※「0から10までの乱数」というのが見えます。

 ゲームなどによく使われるブロックです。

 「1から6までの乱数」だとまさにサイコロですね。

 

条件判断部分に組み込みました。

ちょっと日本語的に怪しいのですが、

 

 「真と偽」二値の乱数を発生し

 もし「真」だったら「1」を表示

 でなければ(残るのは当然「偽」)なので

  「0」を表示する。

 

が、このプログラムの意味するところです。

 

Tiny:bitに転送し、動作を確かめてみてください。