« 7-9 課題9 赤外線信号受信テスト | メイン | 8-1 プロポの基礎知識 »

はてなブックマークに追加   7-10 課題10 2ch赤外線受信モニタ

課題9のC言語ソース・ファイル、HEXファイルはこちらです【LZH】

■ PIC赤外線受信ボード用2ch赤外線受信モニタ

 課題9の赤外線リモコン受信プログラムはうまく動作しましたか? このプログラムが動作すれば、赤外線受光素子をはじめとしてPIC赤外線受信ボードはすべてのハードウェアが完全に動作しています。

 課題10が、第7章最後のプログラムとなります。後日、PIC赤外線送信ボードを製作します。このボードの送信確認用をはじめとして後日製作予定の2ch赤外線送信機の受信確認用ハードウェアになる予定のプログラムです。

■ チャネルについて

 ラジコンのサーボやモータを回す系統のことを"チャンネル(チャネル)"といいます。飛行機では3ch、ヘリコプタでは4chあればなんとか操縦することができます。このチャネルは操縦装置=プロポを発売しているメーカごとに構成が違っています。
 この連載ではプロポ・メーカであるフタバ社のチャンネル構成を参考にプログラミングしています。独自のチャネル構成にしても特に問題はないのですが、プロポのチャネル構成と同じにしておくとなにかと便利です。
 フタバ社のチャネル構成は以下の通りです。

1ch:エルロン
2ch:エレベータ
3ch:スロットル
4ch:ラダー

1chエルロン:
 主翼の端にあり、機体の傾きを制御します。

2chエレベータ:
 水平尾翼の端にあり、機体の上下を制御します。

3chスロットル:
 モータやエンジンを制御します。

4chラダー:
 垂直尾翼に端にあり、機首の横方向の向きを制御します。

 インドア・プレーンは屋内での飛行が前提となるので、エルロンとスロットルの2chあれば充分操縦することができます。
 プログラミングではエルロンを制御する割り当てにしていますが、実際に動作するのはラダーです。これはラジコン飛行機の慣習に従っています。

■ 2チャネル対応赤外線受信モニタ

tx2_type_m.jpg
 製作予定の赤外線2ch送信機・・・ジョイスティックの縦方向が3chスロットル、横方向が1chエルロンです。

 このプログラムでは赤外線2ch送信機より送信される1chエルロンと3chスロットルの信号を受信し、LEDを点滅させることにより、送信機が正常に作動していることを確認します。

エルロン・スティック・ニュートラル:RIGHTとLEFT_LEDの点滅
エルロン・スティックを左右に操作:RIGHTまたはLEFT_LEDの点灯
スロットル・スティック・ニュートラル:UP/DOWN_LEDの点滅
スロットル・スティックそれ以外:UP/DOWN_LEDの点灯

7-10_2ch.gif

■ ソース・リスト

// rx2_pic_rs_board.c
// PIC赤外線受信ボード用赤外線受信モニタ
// PIC16F84A用

#include<16f84a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#define ON 1
#define OFF 0
#define HI 1
#define LOW 0

#byte  RA=5
#byte  RB=6
 #bit IRSIG=RA.2
 #bit DOWN_LED=RB.0
 #bit UP_LED=RB.2
 #bit RIGHT_LED=RB.1
 #bit LEFT_LED=RB.3

//各チャネル・パルス・カウント関数

int gcount;

void ch_count()
{
  gcount=0;
  while(IRSIG==LOW){
    delay_us(49);//1ループ50μsに調整済み
    gcount++;
  }
  while(IRSIG==HI){
    delay_us(49);
    gcount++;
  }
}

main(){
  int i,pcount1,pcount3;

  set_tris_a(0xff);
  set_tris_b(0x00);

  RB=0x00;
  gcount=0;

  for(i=0;i<3;i++){
    RB=0x0f;
    delay_ms(250);
    RB=0x00;
    delay_ms(250);
  }

  while(1){//ギャップ検出
    gcount=0;
    while(gcount < 30){
      if(IRSIG==HI){
        delay_us(100);
        gcount++;
      }
      else{
        gcount=0;
      }
    }

    While(IRSIG==HI){
    }

    ch_count();
      pcount1=gcount;
    ch_count();
    ch_count();
      pcount3=gcount;
    ch_count();

// 1ch(エルロン)
    if (pcount1 < 28){
      LEFT_LED=ON;//左LED点灯
    }
    else if(pcount1 >32){
      RIGHT_LED=ON;//右LED点灯
    }
    else{
     LEFT_LED=ON;RIGHT_LED=ON;
     delay_ms(100);
     LEFT_LED=OFF;RIGHT_LED=OFF;
     delay_ms(100);
    }

// 2ch(エレベータ))

// 3ch(スロットル)
    if (pcount3 < 28){//ダウンLED点灯
      DOWN_LED=ON;
    }
    else if(pcount3 >32){//アップLED点灯
      UP_LED=ON;
    }
    else{
     UP_LED=ON;DOWN_LED=ON;
     delay_ms(100);
     UP_LED=OFF;DOWN_LED=OFF;
     delay_ms(100);
    }
    
// 4ch(ラダー)

  }
}
■ チャネル・カウント関数
void ch_count()
{
  gcount=0;
  while(IRSIG==LOW){
    delay_us(49);//1ループ50μsに調整済み
    gcount++;
  }
  while(IRSIG==HI){
    delay_us(49);
    gcount++;
  }
}

 送信されるパルスが”H”(Hi)の時間は一定なので、”L”(Low)の時間をカウントする関数です。ただし、受信時には”H”、”L”の関係は逆になります。
 50μsのループをカウントすることにより、何msの”H”+”L”か?を計測します。”H”0.5ms+”L”0.5ms~1.5msが送信されてくるので、gcountは0~40の値になります。ニュートラルはgcount=30です。gcountの長さにより、モータとラダーを制御します。

    ch_count();
      pcount1=gcount;
    ch_count();
    ch_count();
      pcount3=gcount;
    ch_count();
 
 ch_count()関数により得られた長さはpcount1・3の変数に入ります。

■ エルロンLED点滅

// 1ch(エルロン)
    if (pcount1 < 28){
      LEFT_LED=ON;//左LED点灯
    }
    else if(pcount1 >32){
      RIGHT_LED=ON;//右LED点灯
    }
    else{
     LEFT_LED=ON;RIGHT_LED=ON;
     delay_ms(100);
     LEFT_LED=OFF;RIGHT_LED=OFF;
     delay_ms(100);
    }

 pcount1の長さにより、RIGHT/LEFT_LEDを点灯・点滅させます。この部分の変更により、LEDの点滅パターンを好きなように変更できます。

■ スロットルLEDの点滅

// 3ch(スロットル)
    if (pcount3 < 28){//ダウンLED点灯
      DOWN_LED=ON;
    }
    else if(pcount3 >32){//アップLED点灯
      UP_LED=ON;
    }
    else{
     UP_LED=ON;DOWN_LED=ON;
     delay_ms(100);
     UP_LED=OFF;DOWN_LED=OFF;
     delay_ms(100);
    }

 エルロンLEDの点滅と同じです。pcount3の値によりUP/DOWN_LEDの点滅を行います。

 以上のプログラミングにより、後日製作予定の赤外線送信対応のハードウェアのチェックができるようになります。
 これで第7章PIC赤外線受信ボードに対応したプログラミングの課題は終わりにします。
 第8章は赤外線送受信の基礎知識について説明します。

課題10(この課題)のC言語ソース・ファイル、HEXファイルはこちらです【LZH】




長野県飯田工業高校 竹内浩一

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/462

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カレンダ

2008年11月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

おすすめ書籍

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

About

2007年11月 7日 10:41に投稿されたエントリーのページです。

ひとつ前の投稿は「7-9 課題9 赤外線信号受信テスト」です。

次の投稿は「8-1 プロポの基礎知識」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 4.1