目次 #contents #hr *図1 (簡単ボット) [#a666b1bd] #ref(ciec-pcc-2006/ciec-2006-1.pdf); *図2 (プログラム例) 黒い線に沿って動くロボット [#u710031b] #ref(ciec-pcc-2006/ciec-2006-2.pdf); **光センサを一つ使用した場合 [#w3990fa1] #define THRESHOLD 40 // 黒と白の閾値を設定 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); // センサ1は光センサ while(true){ // 無限ループ if (SENSOR_1<THRESHOLD){ // 光センサが黒線上にあるときは OnFwd(OUT_A); // 右にターン Off(OUT_C); } else { // 光センサが黒線上にないときは OnFwd(OUT_C); // 左にターン Off(OUT_A); } } } ** 光センサを2個使用した場合 [#ofe4104d] #define THRESHOLD 40 // 黒と白の閾値を設定 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); // センサ1(左)は光センサ SetSensor(SENSOR_3,SENSOR_LIGHT); // センサ3(右)も光センサ while(true){ // 無限ループ if (SENSOR_1<THRESHOLD){ if (SENSOR_3<THRESHOLD){ // 光センサが2個とも黒線上 OnFwd(OUT_A); // にある場合は直進 OnFwd(OUT_C); } else { // 左だけ黒線上の場合は Off(OUT_A); // 左にターン OnFwd(OUT_C); } } else { if (SENSOR_3<THRESHOLD){ // 右だけ黒線上の場合は OnFwd(OUT_A); // 右にターン Off(OUT_C); } else { // 2個とも黒線上にない Off(OUT_A); // 場合には停止 Off(OUT_C); } } } } *授業工程表の例 (90分×15週)[#k7e29e57] :第1週〜第3週:図形や文字を書くロボット (センサは使用しない)| --キットに慣れる (個々の部品の確認、サンプルロボットの作成など) --プログラム作成→コンパイル→プログラム転送までの基本操作 --モータを回転させるための基本的なAPI (Application Programming Interface)の利用方法 --定数や変数の使用 --手続きの抽象化を理解する(サブルーチンや関数の使用) --チーム内の交流を深める :第4週〜第5週:障害物を避けるロボット (タッチセンサを使用)| --論理式や制御構文の基礎学習 --『押されている(1)』『押されていない(0)』という2値を取る タッチセンサをロボットに取り付け,if文やwhile文などを 使ったプログラムを作成する (論理積や論理和といった演算も登場) :第6週〜第7週:黒いラインに沿って走るロボット (光センサを使用)| --多段階の値を与える光センサを使用 --光センサを1個使った場合、2個使った場合、 モータを1個使った場合、2個使った場合など 種々のロボットを製作してスピードや確実性をアップさせる :第8週〜第9週:光を追いかけるロボット| --最大値を求めたり,近傍での明るさの差分を取って比較して進むなど これまでよりも多少複雑なアルゴリズムを考える --タイマ(時間センサと考えてもよい)の活用 //--ウェブ上での実習報告 :第10週〜第11週:曲を演奏しながら動くロボット| --曲を演奏しながら光センサとタッチセンサの両方を監視するなど 複数のタスクを並列で実行させる --割り込み処理やリソース(モータ)へのアクセス権についての学習 :第12〜第15週:簡単なロボット・コンテストの開催| --空き缶を集めてきて積み上げるロボットや、 紙パックを運搬して所定のカゴに投げ込むロボットなど、キットを2セット使用して多少複雑なロボットを作成する --通信機能を用いる(原始的なプロトコルを設計) --チームの人数も増えるため,作業分担を上手に行うことも重要