2009年9月27日 (日)

PSoC + 2.4GHz その8

送信機、受信機ともに落ち着いてきたので、受信機を機体に搭載してみました。
機体そのものは昨年暮れにYSFCの飛行会に参加させていただいた時のものですが、PICを使った赤外線受信機と比べて消費電流が増えているのでバッテリーを大きなものに交換しています。(本当は逆接続防止のためにバッテリーのコネクタを変えたのですが、変えたバッテリーがまだ1個しかないため。)
Dscf1153_2


搭載した受信機の様子です。プロペラ付近の胴体がふにゃふにゃです。補強とプロペラ保護のためにアルミパイプのガードを付けていますが、着地するたびにアルミパイプの曲がり具合が変わってしまい補強になっていません。機体の上側に「竹くし」でも貼りつけますか・・・・・・。(よって今晩のオカズは焼きとりor串焼きに決定・・・・しません。)
Dscf1152


| | コメント (0) | トラックバック (0)

2009年4月 6日 (月)

455kHzマルチチャンネル化検証5(4月7日細部修正とプログラム公開)

以前、机上検討していた455kHzマルチチャンネル対応送信機と受信機を実際に製作してみました。

送信機側は下の写真のブレッドボード上に組み立てたPIC12F683を使った送信機をやめにして、代わりに以前製作していた赤外線送信機のハードをそのまま流用してプログラムを455kHz化しました。(下の写真のLCD表示器とジョイスティックが付いたモノ)受信機側はブレッドボード上に組み立てた受信機に「455kHz用受光素子」(http://fwhp6462.cocolog-nifty.com/blog/2009/04/455khz-c685.html)で作った変換基板を使って実装しました。写真右側のPIC10F222だけ使用しています。左側のPIC12F683は以前赤外線で送受信しないで電線を直結して動作確認した時のものです。今回は使用していません。既存のPIC10F222などを使用している受信機の受光素子の交換とプログラムの書き換えで使用可能と思います。

Dscf1093

受信機のプログラムは以前のマルチチャンネル化検証で作成した各チャンネル7ビットの3チャンネルから各チャンネル8ビットの2チャンネルに修正しました。また、以前は保留していたパリティチェックを追加し、さらに安全対策としてペアリング前はモータとラダーを駆動しない機能を追加しました。

<4月7日追記>

無信号状態が続いた場合にモータを停止する機能追加。およびペアリング後にスロットル最大→スロットル最小にしないと出力をONにしない機能を追加。ペアリング要求ビットが10回連続してセットされていないとペアリングしないように修正。

ビット 機能
1~9 スタートを表すための9ビット連続した”1”
10 0固定(スタート以外に”1”が9ビット連続した箇所ができないようにする)
11 1固定
12 2CHの場合は0、4CHの場合は1
13~15 チャンネル(3ビット、上位ビットから送る)
16 0固定(スタート以外に”1”が9ビット連続した箇所ができないようにする)
17~24 スロットル(8ビット、上位ビットから送る)
25 0固定(スタート以外に”1”が9ビット連続した箇所ができないようにする)
26~33 ラダー(8ビット、上位ビットから送る)
34 0固定(スタート以外に”1”が9ビット連続した箇所ができないようにする)
35 ペアリング要求1
36 ペアリング要求2リザーブ
37 パリティ用(ビット11~36のうち1であったものが偶数個であれば1)

<4月7日修正>

ビット35、36の機能割り当てを修正。およびチャンネル、スロットル、ラダーのデータ送出順を追記。パリティの詳細も追記。送信機側は1(ON)の場合に赤外線を出します。(受光素子の信号端子が0Vになります。)

4CHの場合はビット12を1にして、ビット17~34の「8ビットデータと1ビットの0」を2回繰り替えしている部分を「6ビットデータと1ビットの0」を4回繰り返すようにします。(送信機側には実装してあるのですが、受信機側が未作成)

明日以降はプログラムの細かい修正と(←4月7日済)プリント基板化の予定です。(基板はエッチングまで済んでいて部品をハンダ付けしていない状態なので1時間もあれば完成なのですが。)

<4月7日追記>受信機側プログラムです。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//
// IRRX455 (PIC10F222)  2CH PCM IR Remote Control Receiver
// for CC5X
//
// Ver 0.10 09.02.05  T.Kojima マルチチャンネル化検証用
// Ver 0.20 09.02.09  T.Kojima 赤外線受信動作とPWM制御動作を交互に実行するように修正
// Ver 0.30 09.04.05  T.Kojima 2ch/4chを分離、本ソースは2ch用
// Ver 0.31 09.04.06  T.Kojima ペアリング方法見直し(電源投入後に1回だけ有効とし,要求が10回連続した場合のみ有効とした)
//                             無信号時にスロットル制御量を徐々に絞る制御を追加
//                             スロットルを上限まであげた後に下限まで下げないとモータ、アクチュエータをONにしない処理を追加

        // SOT23  DIP
#define signal GPIO.3   // Pin6   Pin8
#define rud1 GPIO.0   // Pin1   Pin5
#define rud2 GPIO.1   // Pin3   Pin4
#define motor GPIO.2   // Pin4   Pin3

#define TMR0_48us 6
#define TMR0_24us 3

unsigned char stat;     // 信号受信ステータス

unsigned char Bits_cnt;    // ビットカウンタ

bit rud_pol_1;      // ラダーを振る方向1 どっちが右なのかは回路次第
bit rud_pol_2;      // ラダーを振る方向2
bit resv2;       // 予備
bit parity_bit;
bit error_f;
bit ch_fix;
bit max_chk;
bit min_chk;

unsigned char chsel;    // ペアリング要求

unsigned char next_seq;

unsigned char rud_wid;
unsigned char th_wid;

unsigned char TMR0ck;    // 受信した信号をチェックするタイミング
unsigned char chnum;
unsigned char ch;

unsigned char ch0;
unsigned char ch1;

unsigned char TMR0_1;
unsigned char TMR0_2;

unsigned char i;

unsigned char parity;

unsigned char stop_tmr;

void main(void)
{
// Hard config
OPTION = 0xc3;     // TMR0は16分周モードで使用する (TMR0が1回オーバーフローするごとに約2ms経過する)
TRISGPIO = 0x08;    // GPIO3は入力, 他は出力
ADCON0 = 0x00;     // 全ピンデジタル指定
OSCCAL = 0xc20;     // 要調整

// IO Pin Initial
rud1 = 0;
rud2 = 0;
motor = 0;

// WORK Initial
stat = 0;
chnum = 0;
ch_fix = 0;
parity = 0;
chsel = 0;
max_chk = 0;
min_chk = 0;

while (1){
  error_f = 0;
  // STARTビットの先頭を探す
  while(signal == 1){};
  TMR0ck = TMR0 + TMR0_24us;

  // STARTビットのチェック
  // 半サイクル後から1サイクルごとにSTARTビットのチェックを9回繰り返す
  Bits_cnt = 0;
  while ((error_f == 0) && (Bits_cnt < 9)){
   if (TMR0ck == TMR0){
    // 信号はONか?
    if (signal == 1){error_f = 1;};
    Bits_cnt++;
    TMR0ck = TMR0ck + TMR0_48us;
   };
  };

  // "0"のチェック
  next_seq = 0;
  while ((error_f == 0) && (next_seq == 0)){
   if (TMR0ck == TMR0){
    // 信号はONか?
    if (signal == 0){error_f = 1;};
    next_seq = 1;
    TMR0ck = TMR0ck + TMR0_48us;
    parity = 0;
   };
  };

  // "1"のチェック
  next_seq = 0;
  while ((error_f == 0) && (next_seq == 0)){
   if (TMR0ck == TMR0){
    // 信号はONか?
    if (signal == 1){error_f = 1;};
    next_seq = 1;
    TMR0ck = TMR0ck + TMR0_48us;
    parity = 0;
   };
  };
   
  // "0"のチェック
  next_seq = 0;
  while ((error_f == 0) && (next_seq == 0)){
   if (TMR0ck == TMR0){
    // 信号はONか?
    if (signal == 0){error_f = 1;};
    next_seq = 1;
    TMR0ck = TMR0ck + TMR0_48us;
    parity = 0;
   };
  };

  // chnum受信
  if (error_f == 0){
   Bits_cnt = 0;
   while (Bits_cnt < 3){
    if (TMR0ck == TMR0){
     // 信号はONか?
     Bits_cnt++;
     chnum = chnum * 2;
     if (signal == 0){
      chnum++;
      parity++;
     };
     TMR0ck = TMR0ck + TMR0_48us;
    };
   };

   // "0"のチェック
   next_seq = 0;
   while ((error_f == 0) && (next_seq == 0)){
    if (TMR0ck == TMR0){
     // 信号はONか?
     if (signal == 0){error_f = 1;};
     next_seq = 1;
     TMR0ck = TMR0ck + TMR0_48us;
    };
   };
  };

  // data1受信
  if (error_f == 0){
   Bits_cnt = 0;
   ch0 = 0;
   while (Bits_cnt < 8){
    if (TMR0ck == TMR0){
     // 信号はONか?
     Bits_cnt++;
     ch0 = ch0 * 2;
     if (signal == 0){
      ch0++;
      parity++;
     };
     TMR0ck = TMR0ck + TMR0_48us;
    };
   };

   // "0"のチェック
   next_seq = 0;
   while ((error_f == 0) && (next_seq == 0)){
    if (TMR0ck == TMR0){
     // 信号はONか?
     if (signal == 0){error_f = 1;};
     next_seq = 1;
     TMR0ck = TMR0ck + TMR0_48us;
    };
   };
  };

  // data2受信
  if (error_f == 0){
   Bits_cnt = 0;
   ch1 = 0;
   while (Bits_cnt < 8){
    if (TMR0ck == TMR0){
     // 信号はONか?
     Bits_cnt++;
     ch1 = ch1 * 2;
     if (signal == 0){
      ch1++;
      parity++;
     };
     TMR0ck = TMR0ck + TMR0_48us;
    };
   };

   // "0"のチェック
   next_seq = 0;
   while ((error_f == 0) && (next_seq == 0)){
    if (TMR0ck == TMR0){
     // 信号はONか?
     if (signal == 0){error_f = 1;};
     next_seq = 1;
     TMR0ck = TMR0ck + TMR0_48us;
    };
   };
  };

  // resv1受信
  next_seq = 0;
  if (error_f == 0){
   while (next_seq == 0){
    if (TMR0ck == TMR0){
     // 信号はONか?
     next_seq = 1;
     if (signal == 0){
      chsel++;
      parity++;
     }
     else {
      chsel = 0;
     };
     TMR0ck = TMR0ck + TMR0_48us;
    };
   };

   // resv2受信
   next_seq = 0;
   while (next_seq == 0){
    if (TMR0ck == TMR0){
     // 信号はONか?
     next_seq = 1;
     if (signal == 0){
      resv2 = 1;
      parity++;
     }
     else {
      resv2 = 0;
     };
     TMR0ck = TMR0ck + TMR0_48us;
    };
   };

   // parity受信
   next_seq = 0;
   while (next_seq == 0){
    if (TMR0ck == TMR0){
     // 信号はONか?
     next_seq = 1;
     if (signal == 0){
      parity_bit= 1;
     }
     else {
      parity_bit = 0;
     };
     TMR0ck = TMR0ck + TMR0_48us;
    };
   };
  };
   
  // パリティチェック
  if ((parity & 0x01) == 0) {if (parity_bit){;}else{error_f=1;};};
  if ((parity & 0x01) != 0) {if (parity_bit){error_f=1;}else{;};};

  // チャンネル設定要求?
  if ((error_f == 0) && (ch_fix == 0) && (chsel > 10)){
   ch = chnum;
   ch_fix = 1;
  };

  if ((error_f == 0) && (ch_fix) && (chnum == ch)){
   
   if (ch0 > 0xe0){max_chk = 1;};
   if ((ch0 < 0x10) && max_chk){min_chk = 1;};
   
   if ((max_chk == 1) && (min_chk == 1)){
    // 制御量計算
    th_wid = ch0;
    rud_pol_1 = 0;
    rud_pol_2 = 0;
    rud_wid = 0;
    if (ch1 > 0x80){
     rud_pol_1 = 1;    
     rud_wid = ch1 - 0x80;
    }
    else if (ch1 < 0x80){
     rud_pol_2 = 1;
     rud_wid = 0x80 - ch1;
    };
    rud_wid = rud_wid * 2;
   
    // RUD,TH ON/OFFタイミング設定
    TMR0ck = TMR0;
    TMR0_1 = TMR0ck + rud_wid;
    TMR0_2 = TMR0ck + th_wid;
    stop_tmr = 250;    // 500ms信号を受信しなければ徐々に制御量を絞るための時間設定

    // RUD,TH PWM制御
    // 信号受信成功後0~18msの間は信号を受信しても無視してPWM制御を行う
    for(i=0;i<9;i++){
     // RUD,TH ON
     while ((TMR0 != TMR0ck) && (TMR0 != (TMR0ck+1)));
     if (rud_wid > 5){
      if (rud_pol_1 == 1){
       rud1 = 1;
      }
      else if(rud_pol_2 == 1){
       rud2 = 1;
      };
     };
     if (th_wid > 5){
      motor = 1;
     }
     else {
      motor = 0;
     };
   
     // RUD,TH OFF
     while ((rud1 == 1) || (rud2 == 1) || (motor == 1)){
      if ((TMR0 == TMR0_1) || (TMR0 == (TMR0_1+1))){
       rud1 = 0;
       rud2 = 0;
      };
      if ((TMR0 == TMR0_2) || (TMR0 == (TMR0_2+1))){
       motor = 0;
      };
     };
    };

    // 信号受信成功後18ms以降は信号を受信するまでPWM制御する。信号受信したらPWM制御は終了する
    while(signal != 0){
     // RUD,TH ON
     while ((TMR0 != TMR0ck) && (TMR0 != TMR0ck+1)){if (signal==0){break;};};
     if (rud_wid > 5){
      if (rud_pol_1 == 1){
       rud1 = 1;
      }
      else if(rud_pol_2 == 1){
       rud2 = 1;
      };
     };
     if (th_wid > 5){
      motor = 1;
     }
     else {
      motor = 0;
     };
       
     // RUD,TH OFF
     while ((rud1 == 1) || (rud2 == 1) || (motor == 1)){
      if (signal==0){
       rud1 = 0;
       rud2 = 0;
       motor = 0;
       break;
      };
      if ((TMR0 == TMR0_1) || (TMR0 == (TMR0_1+1))){
       rud1 = 0;
       rud2 = 0;
      };
      if ((TMR0 == TMR0_2) || (TMR0 == (TMR0_2+1))){
       motor = 0;
      };
     };
    
     //無信号時は制御量を徐々に絞る処理
     if (stop_tmr > 0){
      stop_tmr--;
     }
     else {   
      if (th_wid > 0){th_wid--;};
      TMR0_2 = TMR0ck + th_wid;
      stop_tmr = 5;
     };
    };
   };    
  };
};
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

PIC10F222用のROMデータです。(IRRX_455-2ch.zip)

| | コメント (0) | トラックバック (0)

2009年4月 1日 (水)

455kHz用受光素子

先日入手した455kHz用の受光素子は表面実装タイプのものだったので、ブレッドボードに直接差し込むことが出来ません。そこで、実験用に簡単な変換基板を作成しました。

Dscf1091

左はいつものD380DSCです。右は変換基板に実装し、さらにブレッドボードに差し込むためのピンを付けた455kHz用の受光素子です。

ブレッドボードに実装した状態です。大きさを比べるため、一緒に購入した56kHz用の受光素子とD380DSCも並べてみました。

Dscf1090

dsPICを使った赤外線送信機のプログラムをちょこちょこっといじって、455kHzの赤外線信号を受信させてみました。赤外線の受信はできている様子で、写真右上の赤外線モニタがぴかぴかしていました。(赤外線送信機の修正内容は変調周波数の設定値を変えただけなんですが。)

明日以降(来月以降?、来年度以降?)は以前kobaraさんのブログで議論していたマルチチャンネル化検証用のプログラムを赤外線送信機に移植する予定です。

| | コメント (0) | トラックバック (0)

2009年3月31日 (火)

56kHz用赤外線受光素子

時々利用しているMouser Electronicsに56kHz用の赤外線受光素子があったので購入してみました。

(他に455kHz用も購入しましたが、これは別途報告します。)

まずは現在使用しているD380DSCと今回購入したTSOP34856の比較。左がD380DSCで右がTSOP34856です。正面から見ると一回り大きいだけですが、厚みは倍くらいあります。(データシートはここ→http://www.vishay.com/docs/81732/tsop348.pdf

Dscf1087

重さは5個で2.1gなので、1個あたりでは0.42g位でしょうか。(tokoさんの所の受信機よりも重い・・・・・・。)裏側に何やら塗料を塗りたくったような跡があるのですが、これってカラーコード?(緑=5、青=6で56kHz?)

Dscf1088

2.5Vから使える素子なので、38kHzの素子と単純に置き換えて使えないか試してみました。ブレッドボードに組んだ12F683の3ch受信機で電源を単2電池2本として動作させてみましたが、一応動作するようです。

Dscf1089

気になるのは、送信機側の信号強度とか発光のON/OFF比率などによっては38kHzの信号も受信できてしまう場合がありました。向きを変えたり、1m位離せば大丈夫な様ですが。

| | コメント (0) | トラックバック (0)

2009年3月14日 (土)

PALM-PLANEバッテリー交換

PALM-PLANEのバッテリーが劣化してきたのか、フルスロットルにしても水平飛行できなくなってきたのでバッテリーを交換してみました。

もともと入っていたFULLRIVERの30mAhからアキバで千ん百円でかった怪しげなヘリに入っていた容量1.5倍の75mAhのものに交換しました。このヘリは何回か飛ばしてみたのですが、あれやこれやと比べてみてどうもうまく飛ばないので、部品取りにしようと思っていたものです。そういうわけで、バッテリーは新品に近い状態だろうと思います。

Dscf1083

やたらと後ろに重心があったことから、バッテリーを前に移動しました。何度かテストを繰り返すうちに「こんなもんかなぁ~?」となった位置は機首からはみ出してしまいました。

(もう少し前にした方がいいような気もするのですが、ぶつけた時にバッテリーが脱落しそうなのでこの位置にしました。)

Dscf1085

ついでに水平尾翼も少し切り落としてみました。(後ろ側1cmくらいと、翼端3mmくらい)

Dscf1086

| | コメント (0) | トラックバック (0)

2009年3月 3日 (火)

受信機その5

10F222を使って、部品を両面実装した赤外線2CH受信機を製作しました。

従来はCPUを基板に実装した後でもプログラムの書き換えができるようにしたり、モータやアクチュエータの接続を基板に実装したコネクタ(丸ピンのソケット)で行うようにしていましたが、これらをやめることでかなり小型・軽量化することができました。

基板です。片面の感光基板で10枚まとめてエッチングし、例によって裏面を削っています。この状態で0.9gあります。

Dscf1061_2

1枚ずつに切り分け、さらに真ん中で折り曲げて表面と裏面を張り合わせました。

Dscf1064_2

赤外線受光素子を実装する前の段階で0.3gになりました。

Dscf1065

さらに赤外線受光素子と電源のコネクタを実装した状態です。電源のコネクタは電池をつないだり外したりするので、基板に付けてしまいました。表面のパターンと裏面のパターンは赤外線受光素子の端子と電源のコネクタを両面でハンダ付けすることでつないでいます。この状態で0.4gですが、赤外線受光素子のパッケージを削っていないので、もう少し軽くできるはずです。

Dscf1066

1年位前に製作した12F683の赤外線3CH受信機(基板のみ)と大きさを比較してみました。

Dscf1069

PCBEで作成した基板のパターンです。左半分が上の写真に写っている側です。左半分の表面にCPUとモータ駆動用のFETなどを実装し、右半分の裏面にはバッテリーの電圧検出回路と電源のパスコンなどを実装しました。

Irrx53

一年かかって軽量な赤外線受信機ができたので、今度は以前よりも小さめの機体を製作してみたいですね。

| | コメント (0) | トラックバック (0)

2009年2月23日 (月)

コイル巻き機を作ってみました。

永野さんのコイル巻き機を参考にコイル巻き機を作ってみました。

巻き数カウンタを付けて設定した巻き数で止まるようにしたので、巻きながら自分で回数を数える必要がなくなりました。これでコイルを巻いている途中で時間とか聞かれても大丈夫でしょう。

Photo

参考というか、構成はほとんどそのまんまです。線材を巻いた重たいボビンを引っ張ったら線がすぐに切れるだろうとか、張力を保つにはどうしたらいいのか、など色々悩んでいたのですが、永野さんのページに掲載されていた動画を見て全て理解しました。

細部は入手した部品の都合などで異なると思うので、写真で説明します。

・巻き取り部

タミヤの「4速クランクギヤーボックスセット」を使用しています。ギヤ比はとりあえず441:1にしてみました。これより早いと張力を保つ機構が追いついてこない可能性があり、また逆にこれより遅いと遅すぎて実用にならないでしょう。コイルを巻き取る軸はΦ6mmのストローを使っています。軸を保持する方法を丸々1カ月悩んでいたのですが、結局はミシンなどで使う糸巻のボビンを使うことにしました。(Indoor Airplane Worldで販売しているコイル用の線材が巻かれているものと多分同じ)内径が6mmなのでぴったりでした。ボビン自体は中央に穴を開けた薄いベニヤ板を貼り付けて板の穴とギヤボックスから出ている軸のマサツで固定しています。軸が丸棒ではなく、6角形なので、うまいことボビンが滑らないようになっています。コイルを巻いている時に軸のストローと線が滑ってしまうのではないかと心配していたのですが、線材の端をボビンに挟み込むことでストローが滑っても巻き取り損なうことはありません。

Photo_3

奥に見えているのはPICマイコン内蔵の「充電器兼電源」を改造した巻き取りコントローラです。巻き取りモータの速度設定、巻き数の設定、カウント、設定値での停止、送り出し側のモータ制御を行っています。

巻き取り側の機構を裏側から見た所です。巻き数を検出するためのマイクロスイッチとマイクロスイッチを押すためのクランクです。巻き取っている間は「ぐい~~~ん、がちゃん。ぐい~~~~ん、がちゃん。」と結構にぎやかです。ていうかうるさい。

Photo_4

・送り出し部

線材を巻いたでっかいボビンを回すため、送り出し側にもモータを設けてボビンを駆動しています。ボビンが乗っているのはホームセンターで見つけてきた戸車です。戸車の車の部分が何種類かあったのですが、真ん中がへこんだU字型のミゾになっているものを使っています。面倒くさかった(ギアボックスを買い足しに行くのが)のでモータの軸に自転車のタイヤの虫ゴムをはめただけでボビンを直接駆動しています。

Photo_5

送り出し側のモータの起動停止を制御し、線材に張力を掛ける機構です。上側2つのプーリーと下側のアームについたプーリーに線材を掛け、アームの重さで張力を掛けています。アームが持ち上がり、アームの下側の板が光センサ(黒い部品)の隙間を遮らなくなった時にモータを駆動しています。アームと遮蔽板の形状は行き当たりばったり、現物合わせで決めています。アームの先の錘は一生かかっても使い切れないくらい大量に在庫しているハンダを流用しました。

Photo

巻き終わったコイルです。内径6mmで1000回巻いています。コイルを巻く途中に筆でサンハヤトの高周波ワニス(写真の右奥)を塗りました。

6

| | コメント (0) | トラックバック (0)

2008年12月 3日 (水)

LiPO充電器(3代目)

充電用ICを使った普通の充電器を製作しました。

一つめはこんな感じでパソコンのUSB端子に接続して使うもの。

Dscf1002x25

充電制御ICにはMCP73831T-2ACIOTを使っていて、これは15~500mA用なのですが、電流設定用の抵抗に普通の抵抗(可変抵抗でない)を使ったので100mA固定です。このICはtokoさんのWeb-Shopなどで扱っているものと外形とピン接続は同じですが、電流設定抵抗の計算式が違っていました。100mA用なので「100」と書いてあるのですが、LEDを曲げたら「0」が隠れてしまいました。

Dscf1007x25

部品実装面から見るとこんな感じです。放熱のためということでわざと大きめの基板にして、電源ラインをベタの銅箔にしています。電池をつなぐ側は基板にコネクタ(丸ピンのICソケットを2ピンに切ったもの)をハンダ付けしてもよかったのですが、間違って逆接続しないように赤黒の線を基板にハンダ付けしてその先にコネクタを付けています。

※ 間違って電池を逆につないでICを1個壊しました。

もう一つは同じ基板を使ってますが、充電電流の設定を可変抵抗で行うようにして、単三電池のケースに入れたものです。単三×4本のケースの中の1本分を使って基板を収納しています。

Dscf1004x25

Dscf1003x25

こんな感じで横から充電中表示のLEDと電流調整用の可変抵抗が見えるようにしています。一つめの100mA専用のものと区別するため、LEDの色を緑に変えています。

続きを読む "LiPO充電器(3代目)"

| | コメント (0) | トラックバック (0)

2008年11月 9日 (日)

5号機かな(ちゃんと数えてない)

5号機を作成しました。

Dscf0957

近所のホームセンターで見つけてきた取っ手付きのプラケースに納まるサイズにしました。(お出かけを意識しています。とは言ったものの、中が透けて見える状態で電車移動するかどうかは今のところ不明。中身が見えないようにした方がよさそうです。)

Dscf0970

正面からみるとこんな感じで、デルタ翼の外側部分を45°くらいにはね上げています。

下から見るとこんな風にプロペラの保護と垂直尾翼を兼ねたヒレがついています。

Dscf0966

重心位置を調整しているうちに受信機と電池はほぼ先端になってしまいました。モータの位置をもう少し前にした方がよかったようです。

Dscf0961_2

モータとプロペラ、それから垂直尾翼部分です。

Dscf0960

モータは7mmオレンジ、プロペラはU80をダイレクト駆動としました。今回は取り付け角度を変えられるようにしています。垂直尾翼はなくても真っ直ぐには飛べるのですが、無いと曲がらないので、プラケースにぶつからない程度の高さの小振りなものを付けています。

| | コメント (0) | トラックバック (0)

2008年9月11日 (木)

充電器、兼電源

以前製作した、送信機に内蔵した充電器がいろいろと使いにくい点があったので、専用の充電器を新作しました。

  • 充電中は送信器として使えない。
  • 充電電流を設定するのに中の基板を引き出して可変抵抗に触る必要があった。

目標としては

  • 10~1000mA(1A)までパネル上で設定出来ること
  • ついでに実験用の電源にもなること(LiPOの代わりになること)
  • 電圧、電流が表示できること
  • 一定時間経過しても目標電圧にならない場合は充電を終了すること
  • 待機時は出力端子(充電端子)をリレーを使って切り離すこと

で、こんなん出来ました。

<<外観>>

Dscf0875_25_2

<<前面>>

Dscf0883_25

左から、電源スイッチ、充電モードと電源モードの切替えスイッチ、電圧設定(電源モード時のみ有効)、電流設定(電源モードと充電モードの待機時のみ有効、スタートボタン、とスタートボタン下の出力端子)

<<裏面>>

Dscf0882_25

左から電源端子(+、-)、ACアダプタ接続端子

<<充電モード>>

Dscf0880_25

数字は上が電流設定値と出力電流値、下が電圧設定値と出力電圧値。待機状態なので、出力電流、電圧ともに”0”です。

充電中はLCDの左下部に電圧設定値のかわりに充電時間を表示します。

<<電源モード>>

Dscf0881_25

回路図です。一部の手持ち部品などを除き、マルツさんで購入しました。

(遅くまで営業してるし、通販もあるので・・・・)

「CHARGER.pdf」をダウンロード

制御プログラムです。

「Charger_V100.zip」をダウンロード

| | コメント (0) | トラックバック (0)

3号機製作中......

エアロソアラのモータとプロペラ周辺を利用した3号機です。

Dscf0872_25_2 

受信機は2作目のラダーをFETドライブ化した物を使用しています。(と言うか、PICのポートから直接駆動出来なかったので受信機を作り直しました。)

現在、ラダーが左にしか切れないのと、エアロソアラから持ってきたモータが回らないことから、棚の上のオブジェと化しています。

<<9月21日追記>>

ラダーが左にしか切れなかったのは、FETで構成したHブリッジのどこか1カ所がハンダ付け不良だったためでした。(ハンダ付けをやり直したら動いた。)

モータはtokoさんのe-Shopで購入したMK06-4.5とPFPROP φ49mmにしました。(もとのエアロソアラ等のモータとプロペラと比べると団扇と扇風機くらいの風量差がありますね。)

下の写真は載せ変える前のものです。

Dscf0873_25

ラダー部です。コイルを巻きなおしたりしているうちにかなり重たいものになってしまいました。ヒンジ部は0.3mmの銅線を螺旋に巻いたものと同じ銅線をコの字に曲げたものを使用しています。テープ等も使ってみたのですが、コイルとマグネットの組み合わせが非力でうまく曲がらなかったリ、左右の切れ角がアンバランスになったりしたので、この構造にしています。

| | コメント (0) | トラックバック (0)

2008年8月12日 (火)

受信機第二弾

前に作った受信機だと駆動できるコイルの抵抗値が限られてしまう(電流が不足して動作しない)場合があるため、新たにFETでコイル用の駆動回路を追加したものを製作しました。コイルの駆動回路は2ch分パターンを引いてありますが、今回は1ch分だけ使用します。1mm厚の片面の感光基板から9枚まとめて基板を作り、1枚づつに切り離した状態です。1.2gあります。

Photo

このままだと重いので、表面?(銅泊のない面)を削ります。以前製作した基板は表面にコネクタなどを実装してから削ったので、コネクタの根元などが削れずに全体を均一の厚さにすることが出来ませんでした。そこで今回は部品を実装する前にヤスリでがしがし削ってしまいます。0.5gと半分以下になりました。

Photo_2

部品を実装します。一度ハンダ付けした後で余分なハンダを吸い取って、「気持ち」軽くなるようにします。コイルやモータの接続は2.54mmピッチの丸ピンソケットを使用します。重くなりますが、テスト中に取り外したり、基板を使い回すために目を瞑ります。コイル駆動回路を1ch分だけ実装した状態で1.4gになりました。基板サイズが巨大なので、こんなものでしょう。

Photo_3

CPUの各ピンへの機能割り付けは以前製作したものと同一にしたので、送信機側、受信機側ともに既存のプログラムがそのまま使用できます。

PCBEで作成した基板パターン図です。「IRRX31g.pcb」をダウンロード

| | コメント (0) | トラックバック (0)

2008年6月 1日 (日)

作ってみたもの

大量にスライスした発泡スチロールで作ってみたものです。たくさんスライスしてもなかなか使い道がありません。

その1 巨大なエアロソアラもどき

Dscf0652

幅40cmくらい、全長30cmくらい。モータは名前に惹かれて買った栄21、100円ショップで買った時計をばらして入手したギアで作ったギアダウンユニット、千石で買ったP10044-B1R改造プロペラ(幅、長さともにカットしています)、ストローに巻いたコイルとハンズで買ったネオジのマグネット(MK-6)、それと自作の2~3CH赤外線受信基板に20mAのLiPOで、実測13gくらいです。

モータが○○g、プロペラが、、、受信機が、、、と各ユニットの重量を合計し、翼に使う発泡スチロール板が○○g/cm2だから翼面荷重を、、、と下のようにしてエクセルで計算した結果、巨大な機体になってしまいました。(ていうか、計算結果が出た段階で軽量化の検討をするべきなのですが・・・・・。)

Photo

まだリビングでしか飛ばしていないので、細かい調整が出来ていません。

Dscf0656

ギアダウンユニットです。

軸受け部分は螺旋に巻いた0.5mmの針金とビーズで作りました。

その2 2mmにスライスした板をドライヤーで加熱してキャンバーを付けてみました。手で持っているあたりに切り込みを入れ、そこに楔形に切った発泡スチロールを挟んでいます。

Dscf0651

ヘリQの尾翼もスライスして作った2mmの発泡スチロール板で作っています。

| | コメント (0) | トラックバック (0)