Top > WiRES > MobileNode1

WiRES可搬式ノード1

持ち運び便利な可搬式ノードをつくってみました!!

00.jpg

概要

携帯電話の急速な普及に伴って、アンドロイド携帯電話などから、または多数のVOIPソフトウェアを経由するなどして、WiRESで交信する事が出来るようになった。経由ということは、WiRESノード本体が見えない状態で運用することとなる。遠隔操作を行ってノード本体を操作することにもなる。色々と複雑化するのと同時に、何かあったらやっぱり遠隔操作に頼わざるを得ない。
遠隔操作する余裕があるならばこれでも良いのだが、車両などで移動中もWiRESを楽しみたい。アンドロイドアプリを使ってみたが、見えない遠隔先のノードを想像して操作することで複雑になってくるし、音声遅延もままならない。
ここは原点に戻ってみれば、何かに気付くのではないかという思惑なのである。

可搬式ノードのメリット

  • いつも使っているトランシーバーが普通に使える。
  • WiRESノード自体を持ち歩くスタイル。
  • 遠隔操作は必要なし。もし調子悪くなったら簡単に再起動できる。
  • DTMF信号によるノード切り替えもいつもの様に普通に使える。

まずは方針として

  • 欲を挙げればきりがない。お金をかける気になればいくらでも小型のものを作れる。が、ここは有るものを駆使してまずは形にしてみよう!

使えそうなものをリストアップ

  • ノード無線機
    出来れば小型のハンディトランシーバが使いたい。でもスケルチ端子が無い。DATA端子がついているモービル機であれば接続は簡単だが、ある程度大きな電源も必要となる。調べてみたら、DATA端子がついているハンディトランシーバが市販されている。でも値段は結構高い^^;;;;;;
  • HRI-100
    DTMFデコーダと音量制御を行って無線機とPCを仲介するものだ。WiRESでは必須。HRI-100を使わない手段もあるが、大きさから考えて、HRI-100を使った方が良いと判断した。
  • パソコン
    無線仲間からトレードしたノートパソコンがあるのだ。EeePC というもので、小型のパソコンである。WindowsXPでちょっと重たい。たまに固まる事もある。SSDのせいかなぁ・・・と思っていた謎のパソコンである。リスクはあるが、このサイズは魅力である。さてどうするか!

PICマイコンでVOX回路を作る

2012-08-18 09.27.15-k.jpg

  • VOXで動作するようになれば、スケルチ信号を取り出せる特殊なトランシーバを使わなくても良くなる。
  • 久しぶりにPICマイコンをつかった。
  • 一番小さなマイコン PIC12F675を使った。秋月電子で 80円で買えるワンチップマイコンなのだ。
  • リバウンド防止回路も入れた。
  • モービル機のスピーカ端子やハンディトランシーバのヘッドフォン端子に接続し無事うごいたー! 2012-08-18 09.27.26-k.jpg
  • 開発環境一式ダウンロードはこちら。=>fileVOX.zip
  • PICライターをお持ちの方は、zipを解凍して、VOX.hex を使ってね。
  • ソースコードはこんな感じ。
    Everything is expanded.Everything is shortened.
      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
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    -
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    -
    |
    !
    |
    |
    -
    |
    !
    |
    |
    |
    |
    -
    |
    |
    |
    |
    -
    |
    |
    |
    |
    |
    !
    |
    -
    |
    |
    -
    |
    !
    -
    |
    !
    !
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    -
    |
    !
    |
    |
    |
    |
    |
    -
    |
    |
    !
    |
    |
    |
    |
    |
    |
    |
    -
    |
    |
    |
    !
    -
    |
    |
    |
    !
    |
    |
    |
    |
    !
    |
    |
    |
    |
    |
    |
    |
    !
     
     
    
    #include <pic.h>
    #include <stdio.h>
    #include "adc.h"
    #include "putch.h"
     
     
    /// GP0  :  AnalogAudio Input
    /// GP1  :  Sleshold    Input (at Startup once Only)
    /// GP3  :  PTT         Input   (LowActive)
    /// GP4  :  Serial      Output
    /// GP5  :  VOX         Output
     
    __IDLOC(0001);
    __CONFIG(FOSC_INTRCIO & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & CP_OFF & CPD_OFF);
     
    #ifndef _XTAL_FREQ
     // Unless already defined assume 4MHz system frequency
     // This definition is required to calibrate __delay_us() and __delay_ms()
     #define _XTAL_FREQ 4000000
    #endif
     
    //#define		REG0_MAX		(40)	/// 40 : 4秒
    //#define		REG0_MAX		(30)	/// 30 : 3秒?
    #define        REG0_MAX        (20)    /// 20 : 2秒?
    static unsigned char  reg0[REG0_MAX];
    static unsigned char  reg0_pos=0;
    main()
    {
        //unsigned char adc0, max, min, i, max2min,  max2min_limit;
        unsigned char max, min, i, max2min,  max2min_limit, bakGPIO3;
        unsigned short adc0;
        
        /// CALデータを読ませる。内部クロック 4MHzで動作する。
        OSCCAL = __osccal_val();
        
        /// GPIO3 は PTT入力用として利用する。
        
        /// GPIO4 はログ出力用として利用する。
        GPIO4 = 1;        /// GPIO4 pin 出力データを 1 にする。
        TRISIO4 = 0;        /// GPIO4 pin 出力ピンとする。
        
        /// 音声検出出力として利用する。
        GPIO5 = 0;        /// GPIO5 pin 出力データを 0 にする。
        TRISIO5 = 0;    /// GPIO5 pin 出力ピンとする。
        
        //printf("\rStart\n");
        putch('S');
        
        /// AD コンバータ初期化
        init_adc();
        
        /// reg0 初期化
        for (i=0; i<REG0_MAX; i++) {
            reg0[i] = 0;
        }
        
        /// スレッショルド読み出し
        for (i=0; i<4; i++) {
            __delay_ms(150);
        }
        max2min_limit = read_adc(1) / 128;        /// max2min_limit 0::5
        
        //printf("\r%d\n", max2min_limit);
        
        while(1) {
            
            __delay_ms(100);
            
            /// PTT信号Active状態
            if (GPIO3 == 0) {
                
                /// 音声 未検出しました。
                GPIO5 = 0;
                bakGPIO3 = GPIO3;
                continue;
            }
            
            if (bakGPIO3 == 0) {
                /// 前回は PTT が Active でした。今回は InActive (GPIO3=1) です。
                /// リバウンドしないように Delay を持たせます。
                for (i=0; i<20; i++) {
                    __delay_ms(100);
                }
                for (i=0; i<REG0_MAX; i++) {
                    reg0[i] = reg0[0];
                }
            }
            bakGPIO3 = GPIO3;
            
            
            /// ADコンバータからスレッショルド値読み出し。
            adc0  = read_adc(0);     /// [GP0/AN0]  0..1023 (中央 512)
            adc0 -= 384;             /// (512 - 128)   512 -> 128にシフト。
            
            /// reg0 へ保存   512 -> 128  (adc0 / 4)
            reg0[reg0_pos++] = adc0 & 0x00ff;
            
            if (reg0_pos > REG0_MAX) {
                reg0_pos = 0;
            }
            //printf("\r reg0_pos[%4d] \r\n", reg0_pos);
            
            /// 最大、最小取得
            max = 0;   min = 255;
            //max = 0;   min = 1023;
            for (i=0; i<REG0_MAX; i++) {
                if (  max < reg0[i] )  max = reg0[i];
                if (  min > reg0[i] )  min = reg0[i];
            }
            /// 最大、最小の差分を算出
            max2min = max - min;
            //printf("\r Max=[%3d], Min=[%3d] \r\n", max, min);
            //printf("\r Now=[%4d], Max=[%4d], Min=[%4d] \r\n",adc0, max, min);
            //printf("\rNow=[%4d], maxmin=[%4d]\r\n", adc0, max2min);
            //printf("\rmaxmin=[%4d]\r\n", max2min);
            
            if (max2min > max2min_limit) {
                /// 音声 検出しました。
                GPIO5 = 1;
            //	printf(" GPIO5=1 \n");
            }
            else {
                /// 音声 未検出しました。
                GPIO5 = 0;
            //	printf(" GPIO5=0 \n");
            }
            
            
    //		printf("\rI detected [%2d]",adc0);	// echo it back
            
        }
        
        //printf("\rPress a key and I will echo it back:\n");
        //while(1){
        //	input = getch();	// read a response from the user
        //	printf("\rI detected [%c]",input);	// echo it back
        //}
        
    }
     
    

HRI-100の中にVOX回路を埋め込んだ

  • SuperSmartWiRESとかモバイル用のノードとして使っているあなた! HRI-100あるでしょう? 使っちゃいましょう。
    2012-08-17 17.43.18-k.jpg
  • HRI-100をあけた。
    2012-08-18 09.53.56-k.jpg
  • 背面のSQLパタンをカット! HRI-100側のSQL入力、PTT出力、1200bps検波出力を取り出す。(合計3本) 2012-08-18 13.59.04-k.jpg
  • 表面のGNDと5V電源を取り出す。(合計2本)
    2012-08-18 13.59.19-k.jpg
  • 小さな基板に PIC VOX回路を入れ込み、5本のリード線をつなぐ。
    2012-08-18 15.44.39-k.jpg

HRI-100とハンディ無線機を接続する。

  • ハンディトランシーバに付属していたおにぎりマイクをばらして使うことにした。マイクの中身はこんな風になってる。
    2012-08-18 16.18.17-k.jpg
  • また使いたくなる事も絶対無いとは言い切れないので、配線をちょっとだけ残した。こうすることで、どこにつながっていたのか直ぐにわかる。
    2012-08-18 16.21.12-k.jpg
  • マイクはちゃんとしまっておこう!
    2012-08-18 16.24.52-k.jpg
  • ある小さい無線機である。φ2.5の4Pジャックを使っている。端子概要は以下の通り。
    2012-08-18 16.30.18-k.jpg
  • HRI-100に付属している MiniDin8-MiniDin6 ケーブルを加工してしまってもよいが、もったいなかったので、コネクタをつけることにした。
    こうしておくことで HRI-100と今までのモービル機をつなぎ変えたいときに、そのままつなげられる。半田付けが終わったら、ホットボンドで覆ってしまいました!
    2012-08-18 16.48.02-k.jpg

無線機の電源

  • このちっちゃいハンディトランシーバは USBで充電できるタイプのもので、PCのUSB端子から供給した状態で運用可能だ。
  • ただ、PCによってはUSB端子の電圧が下がっているものがあって、Bad! の時もあるので、要注意。

HRI-100の電源

  • 実は 6Vぐらいで動くようだ。USB電源から供給してみた。安いAC->USB変換モジュールはUSB端子電圧が5.5Vぐらいあった。ちょっとたりない。
  • とりあえず、12V出力のACアダプタを適当にくっつけた。

パソコンで一苦労!

  • WindowsXP SP2 が入っているパソコンである。
  • PCがとまってしまう。マウスも動かなくなっていた。
  • USB端子の電圧が低い。4.7Vぐらいだった。電源供給なしのUSBハブを経由したら、なんと 4.0Vになった。負荷は一切つないでいない。
  • 秋月で購入したUSBシリアル変換ケーブルを使った。もしかしたら電源電圧が低くて不安定になっているのかも?
  • 電源供給できるUSBハブを接続した。USBハブの電圧は 5.2Vだった。
  • PCが固まらないようになった。(動作不安定でCOMポートが引っこ抜かれていたんだね。きっと。)
  • svchost32 が無限ループに入ることがあって、こうなるとPCが極端に重たくなっていた。
  • WindowsUpdateを行おうとしたが、マイクロソフト社のホームページにつながらない。他のサイトはつながる。
  • 悪意があるソフトウェア削除ツールを他のPCでダウンロードしてUSBメモリでこのパソコンに持ってきて実行してみたら、ワームが見つかった。自動的にこのワームが削除されて、マイクロソフトにつながるようになった。
    2012-08-20 07.01.49-k.jpg
  • WindowsXP SP3 を入れたら無限ルームになる現象が無くなって安定稼動するようになった。
  • 次の日、またマイクロソフト社のホームページが見れなくなり、悪意があるソフトウェア削除ツールを使って同じように削除したら動くようになった。

上手に埋め込みましょう

  • もうちょっと小さめの箱に入ったかもしれないなぁ。
    でも、有ると無いとでは大きく違うのである!
    2012-08-18 19.53.18-k.jpg

どぞー!

  • 記事拝見しました。VY-FBです!ところでこの場合のInternet回線は何をお使いですか?WiRESはポートや速度に制限があるとうまくつながりませんね。当局は「UQ-WiMAX」とアイオーデータのモバイルルータ(ポート解放が必要)でWiRESに問題なくつながることを確認しております。ご参考までに。 -- [[JN2FNA #6033]] 2013-08-21 (水) 07:00:24

Reload     Front page List of pages Search Recent changes Backup   Help   RSS of recent changes
Last-modified: Tue, 27 Dec 2016 19:33:47 JST (2669d)