2022年2月13日日曜日

KT0915 arduino制御DSPラジオ 5

KT0915を使ったarduino制御ラジオ

を薄型アルミケースにいれて毎日いろいろなローカル番組を受信しています。

制作記録

  1. KT0915 arduino制御DSPラジオ 1
  2. KT0915 arduino制御DSPラジオ 2
  3. KT0915 arduino制御DSPラジオ 3
  4. KT0915 arduino制御DSPラジオ 4
  5. KT0915 arduino制御DSPラジオ 5

中波放送受信がこんなに楽しいと思いませんでした。
そうやって使っていると、いくつか改善したいところが出てきます。

  1. 18㎝のフェライトバーが結構邪魔w
  2. バッテリーとAC電源の区別がつかない
  3. RSSIを任意の時に表示させたい
など・・・・細かい操作性やなにやら

そんな時、arduino制御であることが生きてきます。
プログラムはテキスト編集で簡単に変更できますし・・・・

1.まず、18㎝のフェライトバーアンテナは、

外部アンテナを使うことを標準にするとちょっとじゃまくさいですね。。大きすぎです。

なので、φ8で80mmのフェライトを使ってバーアンテナ部分を作り直しました。


この棒状フェライトバーと


リッツ線を使ってバーアンテナを作ってみました。

固定具はこれ


土台となるのは秋月B基板を切ったものに

穴あけしフェライトバー固定するバーアンテナホルダをねじ込みます。


そこに、バーアンテナを差し込んで固定するわけですね。


88回巻で440μHとなりました。T1:88回,T2:なし・・・巻くスペースがなかった(;´∀`)

アンテナコイルとの結合は、0.9mm銅線を12回巻

※3/8日追記:KT0915のデータシートによると適合容量が350μH±20%ということでした。なので10回ほど巻をほどいてインダクタンスを減らし350μHに近づけました。

フリクションボールペンに巻いたものを外して、バーアンテナ上に移しました。最初に作ったものは保護のために養生テープを上に巻いていました。でもわざと裸のままにしてむき出しの銅線がみえていた方がカッコ良い。

設置はコンパクトになりました。


すっきりしました。これで、アンテナ線をつなぐ時に邪魔にならずにすみます。

ただし、バーアンテナ単体で受信する場合はやはり長いほうが感度良いです。普段使いは外部アンテナを使ってしまうので8㎝のフェライトバーでも感度の不足を感じませんね。

2.バッテリーと商用電源の区別と3.RSSIを任意の時に表示させる

ために、制御プログラムを少々改修しました。

2.については、アナログA1ピンに電源としている電圧を半分にして入力(6.8kΩ:6.8kΩで分圧)しておいて、電源投入時と何も操作していない時5分毎にチェックするようにしました。

AC電源だと9V付近の出力だけれども、若干余裕を持たせて、
電圧が8V以下で”B”表記:バッテリで駆動している。
電圧が6.6V以下で”L”表記:バッテリLowで交換必要と表示させている。

void checkVolt(){

  uint16_t volt;

  volt=analogRead(VC_PIN);

  //Serial.println( volt );

  lcd.setCursor(15,0);

  lcd.print(" ");

  if (volt<820){ //under 2/8.0V

    delay(250);

    volt=analogRead(VC_PIN);

    if (volt<820){ //再チェック

      lcd.setCursor(15,0);

      lcd.print("B");

    }

  }

  if (volt<676){ //under 2/6.6V

    lcd.setCursor(15,0);

    lcd.print("L");

  }

}

瞬間的な電圧低下があるようで、AC駆動中にもたまに”B”表記されることがあったので、2回電圧のチェックを行って2回とも8.0Vを下回る場合に”B”バッテリ駆動中の表記をするようにした。

3.については、エンコーダのプッシュスイッチをダブルプッシュした場合にRSSIを読みに行くように変更した。

//twopush:RSSI,onepush:Freq step mode,longpush:Band change

  if (digitalRead(4) == LOW) {

    uint8_t val=0;

    for (uint8_t i=0; i<25; i++){

      delay(10);

      if (digitalRead(4)==HIGH){

        val=1;

        for (uint8_t j=0; j<25; j++){

          delay(10);

          if (digitalRead(4)==LOW){

            val=2;

            break;

          }

        }

        break;

      }

    }

    if (val==2){ //two push dysp RSSI

      dyspSI();

      delay(350);

    }

    if (val==1){ //short push Freq step togle

      stpf=1^stpf;

      if (stpf==1) {

        lcd.setCursor(10,0);

        lcd.print("skip");

        if (CURmode==0){r.setStep(90);}   //AM 90kHz step

        if (CURmode==1){r.setStep(1000);} //FM 1Mhz step

      }

      if (stpf==0){ //normal step 9k,100k

        lcd.setCursor(10,0);

        lcd.print("    ");

        if (CURmode==0){r.setStep(9);}

        if (CURmode==1){r.setStep(100);}

      }

        delay(350);

    }

    if (val==0){

      CURmode=1^CURmode; //Band mode change

      stpf=0; // Freq step is normal

      lcd.setCursor(10,0);

      lcd.print("    ");

      if (CURmode==0){r.setAM(531,1602,MWfreq,9);CURfreq=MWfreq;}

      if (CURmode==1){r.setFM(76000,98000,FMfreq,100);CURfreq=FMfreq;}

      chgf=1;

      saveROM();

      delay(350);

    }

  }


前半の部分ダブルプッシュの場合val=2となりRSSIを読む関数を呼び出す

ちなみにシングルプッシュは周波数ステップの変更、ロングプッシュで中波FMの切り替えになっている。 


0 件のコメント: