#hr CENTER:&size(25){課題3:光を追うロボットを作る}; #hr ○目次○ #contents ***制作者 [#v533c5b6] 子供の頃から神童 二等兵 ツノハラ **課題の内容 [#c850f360] 懐中電灯の光を追いかけるロボットを作り、次の中から2種類以上のプログラムを作る。 +&color(red){光源};を見失った時に&color(blue){音楽};を演奏しながら旋回して&color(red){光源};を探す +&color(red){光源};を見失った時には明るさに比例した&color(blue){周波数の音};を出しながら旋回して&color(red){光源};を探す +&color(red){光源};を見失っていないときには&color(blue){音楽};を演奏し、見失った時には&color(green){別の曲};を演奏しながら&color(red){光源};を探す +&color(red){光源};を見失っていないときには&color(blue){ある曲};を演奏し、見失った時には&color(green){別の曲};を演奏しながら&color(red){光源};を探す +上記のいずれかに『&color(red){光源};に近づき過ぎると停止する』という機能を追加する *マシンの図 [#cb23da2d] &ref(光を追う写真.JPG);&size(30){→&color(brown){横から見た図};→};&ref(光を追うロボ横.jpg); *マシンの製作の上で [#u836d849] -今回の課題はロボットの機構はあまり重要でないので作成に苦労はしなかった、しかし上り下りをスムーズのするため小さなタイヤを前後中心あたりにつけたり、写真をみてわかるように風車がついているなどこだわりは随所にある。 -モーターは3つ使用しており、2つは左右のキャタピラの動力、1つは後ろの風車の動力である。 -懐中電灯は人が持っているため、光センサーには少し角度をつけ、上のほうからの光にも対用できるようにした。 -風車には意味があり、風車を回転させたり止まっていることで数個あるif文の中で今どれが遂行しているかわかるようにする。 *起こった問題と解決法 [#r9e2a50e] +音楽のプログラムを作る上で、まず楽譜が読めなくてはいけない。また楽譜が読めただけではいけなく、それぞれの音を周波数で表し、流れる音の間隔また長さを決めなくてはいけない。&color(red){&size(20){→};};楽譜を読むのは、音楽に詳しい人に協力してもらった。音の間隔の1つの目安の時間を作り、あとは実際にロボの演奏を聴き微調整していく。 +音楽のプログラムを作る上で、まず楽譜が読めなくてはいけない。また楽譜が読めただけではいけなく、それぞれの音を周波数で表し、流れる音の間隔また長さを決めなくてはいけない。&color(red){&size(20){→};};楽譜を読むのは、音楽に詳しい人に協力してもらった。音の間隔は1つの目安の時間を作り、あとは実際にロボの演奏を聴き微調整していく。 +while文を数個作ったのでwhlile分の切り替えがうまくできない。&color(red){&size(20){→};};単純に時間や力の値を変えることで、違うwhile文に移るようにした。 +光を追う場面では、数個あるif文を同時に行ってしまい変な動きになってしまう。&color(red){&size(20){→};};単純に数値を定義しただけでは、そのような同時進行が起きてしまうため&&や||を使い、より細かく正確な場合分けをするようにした。 **マシンが動いている時にかかっている音楽01 [#gb975bb3] ○制作者○ツノハラ◎協力者◎ブライト #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); } } これでわかる人はかなりすごい! 答えは→&color(blue,blue){コンドルは飛んでいく}; **マシンが動いている時にかかっている音楽02 [#zf43e6db] ●制作者●子供の頃から神童 #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); } } これでわかる人は天才! 答えは→&color(green,green){威風堂々}; *プログラム(&color(red){光源};を見失った時に&color(blue){音楽};を演奏しながら旋回して&color(red){光源};を探す) [#b6f03dbb] --[[2006a/C1/課題3左/光を追うプログラム01]] **プログラムの概要 [#s7acf876] このプログラムは前回のライントレースのプログラムに似ていて2つのセンサーを使い左右につけ、左右の光センサーを使い両方とも光があたっていると前進、片方どちらかだと光のあたりが弱いほうをひかりに近づけ,両方のセンサーにあたる光が弱いと音楽をかけながら光を見つけるまで回転するプログラムである。 *プログラム(&color(red){光源};を見失っていないときには&color(blue){ある曲};を演奏し、見失った時には&color(green){別の曲};を演奏しながら&color(red){光源};を探す) [#i70690fd] --[[2006a/C1/課題3左/光を追うプログラム02]] **プログラムの概要 [#if12c8f0] このプログラムではまず、一回転させ光の最大値や、一番明るいところまでの時間を定義し、音楽をかけながら一番光の強い方へ向かわせる、次には最初のプログラムの要領で光を追うようにさせるその際にも同じ音楽をかけている、光を見失ったときには2番目の曲を演奏する。 *反省 [#eeaffd0c] +今回の光を追う課題は、課題の1番最後なだけあって、すごく大変だった。プログラムがかなり複雑になり、しかもロボットを動かしてみても思うように動いてくれず、何回も直した。まず始めには最大値の定義、これは先生が前のボードに書いたものを初めそのまま使い自分なりに加工してみたが、このタイマー機能が完全に理解できていない。苦労したもうひとつの点は数個ある&color(red){while文};をどのようにして切り替えるか、2つ目のプログラムでは、まずタイマーをクリアして0にすることを利用して光の一番強い場所を探し、その方向へむくように時間を設定する。そうするとタイマーに時間が設定されるので&color(blue){次のwhile文};に移行する。ここからが問題だった、その&color(blue){2番目のwhile文};の中に光を追いかけるプログラムをif文を使ってやろうとしたが、初めに光の強い位置に回転→前進するを繰り返すようになってしまった。そこで&color(green){3番目のwhile文};を作り、光を追うのはそっちで行うようにさせた、&color(blue){2番目のwhlie文};の最後でモーターの力を変え、力が変わったことにより&color(green){3番目のwhile文};に行くようにした。 +音楽の方は、吹奏楽の友人の協力によりすんなりといった。「芸は身を助ける」というか本当にその分野に精通している人がいると助かります。 +1オクターブ高い音ってもとの音を2倍したものとほぼ同じなんですね、実際普通にすべての周波数を打ち込んだものと*2などを使ったものとでは、ほとんど同じ音でした、あと目安の時間も定義することで数値をいちいち書き込まなくてもよかったんですね。プログラムを作った後に教えてもらいました。&worried; +ホームページの方なんですが、音楽のプログラムを載せたせいでかなり大きくなってしまいました、見づらいと思います。許してください。&color(red){訂正};→光を追うプログラムはリンクをはり、そちらを見てもらうようにしました。そのことでホームページが見やすくなったと思います。 +あとホームページで色分けをして見やすくしたつもりです、逆に見づらくなった所もあるかもしれません。 *コメントお願いします&wink; [#e5f84d1c] -順調に開発できているようですね。素晴らしい。 -- [[ゆき(TA)]] &new{2006-07-07 (金) 16:56:43}; #comment