1: 2011-07-14 (木) 14:28:13 yoshida[5] [6] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | TITLE:ライントレースロボットのプログラミング | ||
+ | **プログラムの改造 [#g710f954] | ||
+ | ***赤外線反射センサの値を確認 [#k8495ea4] | ||
+ | 赤外線反射センサで地面の白と黒を判断するので、センサの値がどのように変化するのかを確認します。~ | ||
+ | GCC Developer Liteを起動して、赤外線反射センサの値を表示するプログラムを作成します。 | ||
+ | #html{{ | ||
+ | <pre class="brush:c"> | ||
+ | #include <fd.h> | ||
+ | void main (void) { | ||
+ | uint8_t GroundData; | ||
+ | fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); | ||
+ | fd_SetUVThreshold (7.4); | ||
+ | DX_ChangeBaudrate (1000000); | ||
+ | |||
+ | while (!fd_rx_buff ()) { | ||
+ | DX_ReadByteData (100, 28, &GroundData, 10, NULL); | ||
+ | fd_printf ("ground: %3d\r", GroundData); | ||
+ | fd_Wait (10); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | [[DX_ReadByteData>FDIIILIB#t86b5caf]]で赤外線反射センサの値を取得し、[[fd_printf>FDIIILIB#p02de6dd]]で値を表示しています。~ | ||
+ | プログラムをビルドして、FDIII-HCに書込んで実行してみましょう。 | ||
+ | |||
+ | 赤外線反射センサと地面の距離が近ければ地面の色に関わらず値は255となっているのではないでしょうか。距離を離すと地面の色によりセンサの値が変わることが分かります。~ | ||
+ | AX-S1を地面から離した状態でロボットにするにはバランスも悪く、AX-S1の固定方法も難しいため、センサ自体の出力を抑えることにします。 | ||
+ | |||
+ | **赤外線の照射量の調整 [#q5c2328c] | ||
+ | |||
+ | 先ず赤外線反射センサの原理を説明します。 | ||
+ | |||
+ | AX-S1を見ると3方向にそれぞれ2つの丸い物が並んで付いています。その2つの丸いものを良く見ると片方は黒く、片方は透明です。~ | ||
+ | 黒い方から赤外線が照射されます。照射された赤外線は直進し、その先に物体があると反射します。~ | ||
+ | 反射して戻ってきた赤外線の量を透明の方が測定します。~ | ||
+ | これによって、対象との距離や色を判別します。 | ||
+ | |||
+ | #ref(line_2.png, 100%); | ||
+ | #ref(line_3.png, 100%); | ||
+ | この測定された赤外線の量を0~255の値に変換した値を、今私たちは見ています。 | ||
+ | |||
+ | 跳ね返ってくる赤外線の量が多すぎて飽和してしまっているのであれば、照射する赤外線の量を減らせば良いのです。~ | ||
+ | では、出力を抑えるにはどうすれば良いのか、物理的に赤外線照射部を隠すのが一番簡単ではないのでしょうか。 | ||
+ | |||
+ | #ref("line_4.png"); | ||
+ | |||
+ | 黒いビニールテープで少しだけ隙間残して赤外線照射部を隠してみました。 | ||
+ | どれくらい隠すかは、赤外線反射センサの値を見ながら調節することになります。~ | ||
+ | 上図の場合、白い地面では約120、黒い地面では約20という値になりました。~ | ||
+ | これで白い地面の上にいるか、黒い地面の上にいるかを判断することができるようになりました。 |
(This host) = http://www.besttechnology.co.jp