課題3:光を追うロボットを作る

○目次○

制作者

子供の頃から神童
二等兵
ツノハラ

課題の内容

懐中電灯の光を追いかけるロボットを作り、次の中から2種類以上のプログラムを作る。

  1. 光源を見失った時に音楽を演奏しながら旋回して光源を探す
  2. 光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す
  3. 光源を見失っていないときには音楽を演奏し、見失った時には別の曲を演奏しながら光源を探す
  4. 光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す
  5. 上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する

マシンの図

光を追う写真.JPG横から見た図光を追うロボ横.jpg

マシンの製作の上で

  • 今回の課題はロボットの機構はあまり重要でないので作成に苦労はしなかった、しかし上り下りをスムーズのするため小さなタイヤを前後中心あたりにつけたり、写真をみてわかるように風車がついているなどこだわりは随所にある。
  • モーターは3つ使用しており、2つは左右のキャタピラの動力、1つは後ろの風車の動力である。
  • 懐中電灯は人が持っているため、光センサーには少し角度をつけ、上のほうからの光にも対用できるようにした。
  • 風車には意味があり、風車を回転させたり止まっていることで数個あるif文の中で今どれが遂行しているかわかるようにする。

起こった問題と解決法

  1. 音楽のプログラムを作る上で、まず楽譜が読めなくてはいけない。また楽譜が読めただけではいけなく、それぞれの音を周波数で表し、流れる音の間隔また長さを決めなくてはいけない。楽譜を読むのは、音楽に詳しい人に協力してもらった。音の間隔は1つの目安の時間を作り、あとは実際にロボの演奏を聴き微調整していく。
  2. while文を数個作ったのでwhlile分の切り替えがうまくできない。単純に時間や力の値を変えることで、違うwhile文に移るようにした。
  3. 光を追う場面では、数個あるif文を同時に行ってしまい変な動きになってしまう。単純に数値を定義しただけでは、そのような同時進行が起きてしまうため&&や||を使い、より細かく正確な場合分けをするようにした。

マシンが動いている時にかかっている音楽01

 ○制作者○ツノハラ◎協力者◎ブライト

#define mi  659 //ミ
#define fa  698 //ファ
#define so  784 //ソ
#define sol  831//ソの#
#define ra  880 //ラ
#define shi  988//シ
#define Do  1047//ド
#define re  1175//レ
#define mil  1319//1オクターブ高いミ
#define fal  1397//1オクターブ高いファ
#define soy  15681//オクターブ高いソ
#define ral  1760 //1オクターブ高いラ
 task play_music()
 {
    while(true)
    {
       PlayTone(mi,40); Wait(40);
       PlayTone(ra,40); Wait(40);
       PlayTone(sol,40);Wait(40);
       PlayTone(ra,40);Wait(40);
       PlayTone(shi,40);Wait(40);
       PlayTone(Do,40);Wait(40);
       PlayTone(shi,40);Wait(40);
       PlayTone(Do,40);Wait(40);
       PlayTone(re,40);Wait(40);
       PlayTone(mil,240);Wait(240);
       PlayTone(soy,80);Wait(80);
       PlayTone(mil,240);Wait(240);
       PlayTone(ral,40);Wait(40);
       PlayTone(soy,40);Wait(40);
       PlayTone(mil,160);Wait(200);
       PlayTone(mil,40);Wait(40);
       PlayTone(re,40);Wait(40);
       PlayTone(Do,40);Wait(40);
       PlayTone(re,20);Wait(20);
       PlayTone(Do,20);Wait(20);
       PlayTone(ra,200);Wait(200);
       PlayTone(Do,80);Wait(80);
       PlayTone(ra,400);Wait(500);
      
       
    }
}

これでわかる人はかなりすごい! 答えは→コンドルは飛んでいく

マシンが動いている時にかかっている音楽02

 ●制作者●子供の頃から神童

 #define TURN_TIME 600
 #define mi  659 //ミ
 #define fa  698 //ファ
 #define fal  740//ファの#
 #define so  784 //ソ
 #define sol  831//ソの#
 #define ra  880 //ラ
 #define ral 932 //ラの#
 #define shi  988//シ
 #define Do  1047//ド
 #define Dol 1109//ドの#
 #define re  1175//レ
 #define rel 1245//レの#
 task play_music()
 {
    while(true)
    {
       PlayTone(so,80); Wait(82);
       PlayTone(fal,20);Wait(20);
       PlayTone(so,20);Wait(20);
       PlayTone(ra,40);Wait(42);
       PlayTone(mi,80);Wait(82);
       PlayTone(re/2,80);Wait(82);//*○/2というものが有りますが、これは1オクターブ低いものになります*
       PlayTone(Do/2,80);Wait(62);
       PlayTone(shi/2,20);Wait(22);
       PlayTone(Do/2,20);Wait(22);
       PlayTone(re/2,40);Wait(42);
       PlayTone(ra/2,160);Wait(162);
       PlayTone(shi/2,80);Wait(82);
       PlayTone(Dol/2,20);Wait(22);
       PlayTone(re/2,40);Wait(42);
       PlayTone(mi,20);Wait(22);
       PlayTone(ra,80);Wait(82);
       PlayTone(re/2,80);Wait(82);
       PlayTone(so,80);Wait(82);
       PlayTone(so,20);Wait(22);
       PlayTone(fal,40);Wait(42);
       PlayTone(mi,20);Wait(22);
       PlayTone(re/2,160);Wait(162);
      
       
    }
}

これでわかる人は天才! 答えは→威風堂々

プログラム(光源を見失った時に音楽を演奏しながら旋回して光源を探す)

プログラムの概要

このプログラムは前回のライントレースのプログラムに似ていて2つのセンサーを使い左右につけ、左右の光センサーを使い両方とも光があたっていると前進、片方どちらかだと光のあたりが弱いほうをひかりに近づけ,両方のセンサーにあたる光が弱いと音楽をかけながら光を見つけるまで回転するプログラムである。

プログラム(光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す)

プログラムの概要

このプログラムではまず、一回転させ光の最大値や、一番明るいところまでの時間を定義し、音楽をかけながら一番光の強い方へ向かわせる、次には最初のプログラムの要領で光を追うようにさせるその際にも同じ音楽をかけている、光を見失ったときには2番目の曲を演奏する。

反省

  1. 今回の光を追う課題は、課題の1番最後なだけあって、すごく大変だった。プログラムがかなり複雑になり、しかもロボットを動かしてみても思うように動いてくれず、何回も直した。まず始めには最大値の定義、これは先生が前のボードに書いたものを初めそのまま使い自分なりに加工してみたが、このタイマー機能が完全に理解できていない。苦労したもうひとつの点は数個あるwhile文をどのようにして切り替えるか、2つ目のプログラムでは、まずタイマーをクリアして0にすることを利用して光の一番強い場所を探し、その方向へむくように時間を設定する。そうするとタイマーに時間が設定されるので次のwhile文に移行する。ここからが問題だった、その2番目のwhile文の中に光を追いかけるプログラムをif文を使ってやろうとしたが、初めに光の強い位置に回転→前進するを繰り返すようになってしまった。そこで3番目のwhile文を作り、光を追うのはそっちで行うようにさせた、2番目のwhlie文の最後でモーターの力を変え、力が変わったことにより3番目のwhile文に行くようにした。
  2. 音楽の方は、吹奏楽の友人の協力によりすんなりといった。「芸は身を助ける」というか本当にその分野に精通している人がいると助かります。
  3. 1オクターブ高い音ってもとの音を2倍したものとほぼ同じなんですね、実際普通にすべての周波数を打ち込んだものと*2などを使ったものとでは、ほとんど同じ音でした、あと目安の時間も定義することで数値をいちいち書き込まなくてもよかったんですね。プログラムを作った後に教えてもらいました。 [worried]
  4. ホームページの方なんですが、音楽のプログラムを載せたせいでかなり大きくなってしまいました、見づらいと思います。許してください。訂正→光を追うプログラムはリンクをはり、そちらを見てもらうようにしました。そのことでホームページが見やすくなったと思います。
  5. あとホームページで色分けをして見やすくしたつもりです、逆に見づらくなった所もあるかもしれません。

コメントお願いします [wink]

  • 順調に開発できているようですね。素晴らしい。 -- ゆき(TA)? 2006-07-07 (金) 16:56:43


添付ファイル: file光を追うロボ横.jpg 217件 [詳細] file光を追う写真.JPG 197件 [詳細] fileSN310026(02).JPG 109件 [詳細] fileSN310026.jpg 111件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-10 (月) 12:10:27