第 6 章 単体動作実験 23
6.2 結果
第 7 章 二体間通信実験
前述の単体制御動作完了後、二機による二体間通信実験を行った。
この二体間通信実験を行うことでロボット同士が通信する際の通信角度、距離、
精度の検証を行う。
7.1 実験方法
二体間通信実験方法を以下に示す。平面な床の上に
1
台を待機させ、赤外線を 後方に送信しながら前進するもう1
台を置き、後方の待機しているロボットが前 方機の発する赤外線を受信したときのみ発信するようにプログラムを組み実験を 行う。図
7.1
後方機待機 図7.2
前方機設置図
7.3
追従7.1.1 二体間通信実験フローチャート
図
7.4
に実験フローチャートを示す。FRONT(B)
前進赤外線送信
2秒間維持
停止 赤外線停止
2
秒間維持BACK(A)
前進 待機
赤外線
受信
YES
NO
図
7.4
二体間通信実験以下に二体間通信実験の流れを示す。
1.
他機からの赤外線受信時にのみ発進するようにプログラムした1
台(A)
を待 機させる。2.
待機しているロボットの前に停止、前進を繰り返し、前進時のみ後方に赤外 線を発信するようにプログラムした(B)
をA
の前に置く。3. B
の前進に従って後方に置かれたA
が追従し前進する。4.
以降繰り返す。という実験を行い検証した。
7.1.2 実験プログラム A
以下に実験プログラムを示す。
1: /* --- * 2: * Filename: tusin.c
---3: *
4: * Copyright (C) 2008 by Faculty of Engineering, Kokushikan University 5: * 著者: Suzuki Youhei <[email protected]>
6: * Time-stamp: <08/11/25 15:34:49 youhei>
7: *
8: * --- */
9: #include <16f877.h>
10: #fuses HS, NOWDT, PUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT 11:
12: #use fast_io(A) 13: #use fast_io(B) 14: #use fast_io(C) 15: #use fast_io(D) 16: #use fast_io(E)
17: #use delay(CLOCK = 20000000) 18: #bit TOIF =0x0bb.2
19:
20: /* input */
21: #define LIGHT_SENSE_FRONT_LEFT PIN_B7 // 前左赤外線受信 22: #define LIGHT_SENSE_FRONT_RIGHT PIN_B4 // 前右赤外線受信 23: #define LIGHT_SENSE_REAR PIN_C7 // 後赤外線受信 24: #define REFC_LEFT PIN_A1 // リフレクタ 中央 25: #define REFC_CNTR PIN_A0 // リフレクタ 左 26: #define REFC_RIGT PIN_A2 // リフレクタ 右 27: #define RD_SONIC PIN_C0 // 超音波距離 28: /* output */
29: #define LIGHT_OUT_FRONT PIN_B6 // 前赤外線 LED 30: #define LIGHT_OUT_REAR PIN_C5 // 後赤外線 LED 31: #define MT_RIGT_1 PIN_D1 // 右モーター IN1 32: #define MT_RIGT_2 PIN_D0 // 右モーター IN2 33: #define MT_LEFT_2 PIN_D3 // 左モーター IN2 34: #define MT_LEFT_1 PIN_D2 // 左モーター IN1 35: #define MONITOR_LED PIN_B5 // モニターLED 36: /* reaction */
37: #define NO_ACTION 0 // 0 動作無し
38: #define GO_STRAIGHT 1 // 1 直進 39: #define GO_STRAIGHT_FAST 2 // 2 直進
40: #define GO_BACK 3 // 3 後退
41: #define BRAKE 4 // 4 ブレーキ
42: #define TURN_RIGHT 5 // 5 右ターン 43: #define ATURN_RIGHT 6 // 6 その場右ターン
44: #define BACK_RIGHT 7 // 7 右バックターン
45: #define TURN_LEFT 8 // 8 左ターン
46: #define ATURN_LEFT 9 // 9 その場左ターン
47: #define BACK_LEFT 10 // 10 左バックターン 48: #define MOTOR_STOP 11 // 11 停止
49:
50: void setup()//初期設定。1がINで0がOUTのこと。使わないPINは1になってます。
51: {
52: setup_adc_ports(NO_ANALOGS);
61: /* 基本の動作 ハードへの出力 */ //void □□□という関数の中身を決めてます。
62:
63: /* 左車輪バック */
64: void left_motor_back(){ output_high(MT_LEFT_1); output_low(MT_LEFT_2); } 65: /* 左車輪前進 */
66: void left_motor_forward(){ output_low(MT_LEFT_1); output_high(MT_LEFT_2); } 67: /* 左車輪ストップ */
68: void left_motor_stop() { output_low(MT_RIGT_1); output_low(MT_RIGT_2); } 69: /* 左車輪ブレーキ */
70: void left_motor_brake() { output_high(MT_RIGT_1); output_high(MT_RIGT_2); } 71: /* 右車輪バック */
72: void right_motor_back() { output_low(MT_RIGT_1); output_high(MT_RIGT_2); } 73: /* 右車輪前進 */
74: void right_motor_forward() { output_high(MT_RIGT_1); output_low(MT_RIGT_2); } 75: /* 右車輪ストップ */
76: void right_motor_stop() { output_low(MT_LEFT_1); output_low(MT_LEFT_2); } 77: /* 右車輪ブレーキ */
78: void right_motor_brake(){ output_high(MT_LEFT_1); output_high(MT_LEFT_2); } 79:
80: /* 前進 */
81: void forward() { output_low(MT_LEFT_1); output_high(MT_LEFT_2); output_high(MT_RIGT _1); output_low(MT_RIGT_2); }
82: /* 後退 */
83: void back() { output_high(MT_LEFT_1); output_low(MT_LEFT_2); output_low(MT_RIGT_1);
output_high(MT_RIGT_2); } 84: /* その場時計回り */
85: void right() { output_low(MT_RIGT_1); output_high(MT_RIGT_2); output_low(MT_LEFT_1);
output_high(MT_LEFT_2); } 86: /* その場反時計回り */
87: void left() { output_high(MT_LEFT_1); output_low(MT_LEFT_2); output_high(MT_RIGT_1);
output_low(MT_RIGT_2); } 88: /* 停止 */
89: void stop(){ output_low( MT_RIGT_1); output_low(MT_RIGT_2); output_low( MT_LEFT_2); o utput_low( MT_LEFT_1); }
90: //ここまでが下準備
91: void MITUKO(){ output_high(MONITOR_LED); } 92: void SHOUKO(){ output_low(MONITOR_LED); } 93: main()
94: {
95: setup();
96: while(1)
97: {
98: if(input(LIGHT_SENSE_FRONT_LEFT) != 0 && input(LIGHT_SENSE_FRONT_RIGHT) !
= 0){
99: forward();
100: MITUKO();
101: }else{
102: stop();
103: SHOUKO();
104: }
105: }
106: }
7.1.3 実験プログラム B
以下に送信側の
B
のプログラムについて示す。93行以前のプログラムの基本設 定は7.1.1
と同様。93: main() 94: {
95: setup();
96: while(1)
97: {
98: forward();
99:
100: MITUKO();
101: output_high(LIGHT_OUT_REAR);
102: delay_ms(1000);
103: stop();
104: output_low(LIGHT_OUT_REAR);
105: delay_ms(1000);
106: SHOUKO();
107: }
108: }