JUGEMテーマ:電子工作

RDA5807のラジオ作成

 

いやー結構大変でした。
RDA5807のラジオモジュールを秋月で買ったんですが、
壊れると嫌だなーと思い3つ買いましたが、
モジュールのピンのピッチが2mmピッチだということに到着してから気づいたものの、
2.54の基盤にのっけて配線するって秋月の説明にあり。


真似してみたんですが、いやー難しい。
そんなこんなで一つ破壊。
データシートの図となんか違い。いろいろやって、プラスとマイナス逆につないでもう一つ破壊?(多分)


データシートが怪しいと気づいて一度はうまく動いたんですが、
電源入れたり切ったりしているうちに全部壊してしまいました。


たぶん、突入電流とか、静電気とか、そんなんで壊してしまったと思われます。

で、ですね。


色々調べて、aidendoさん。ラジオモジュールDIP化基板(5枚入) [P20D10A]

 

 

これで、楽々2.54mmに変換できますね。
というわけで、これ。

 

 

5枚入りのセットだったのを間違えて3個注文したら、15枚来ちゃった。
ま、良いんですけど。2mmの10ピンから2.54mmに変換するのに当分困りません。


aitendoさんではRDA5807Pが売っており、こちらも3枚買っておきましたので、
作っていったのですが、
電源入れたり切ったりしているうちに2枚破壊。
またしても、突入電流とか、静電気とか、そんなんで壊してしまったと思われます。
今度は失敗しないよう、5807の電源にコンデンサー470μFと100pFを投入したところ、
壊れないようになったようです。

これで、1台完成。

 


で、もう一台作りたいと思い。
秋月でさらにRDA5807を3つ購入。秋月さんで売っているのはRDA5807Hなんですが。同じように動きました。
首尾よく作り上げ、もう一台完成。

 


って感じで。今回はすごく苦労しました。

 

■回路図

 

■プログラム

 

libは

 http://www.mathertel.de/Arduino/RadioLibrary.aspx

 https://github.com/asukiaaa/ST7032_asukiaaa

を利用しています。

 

https://drive.google.com/file/d/1YMYLGZbwcszczs7nsrwRoNIX2QAAEZpg/view?usp=sharing

 

#include "EEPROM.h" 
#include "ST7032_asukiaaa.h"
#include "radio.h"
#include "RDA5807M.h"

ST7032_asukiaaa lcd;

int old2=1;
int old4=0;
float fHz = 79.7;   //FM泉
//float fHz = 77.1; ///FM仙台
//float fHz = 93.5; ///TBC
//float fHz = 82.5; ///NHK宮城
//float fHz = 76.2; ///仙台シティーFM
//float fHz = 78.1; ///BAY WAVE石巻 NG
//float fHz = 76.4; ///ラジオ石巻 NG
//float fHz = 77.9; ///エフエムいわぬま NG
float oldHz = 0;
long lastTm;
int modeMONO=false;

#define FIX_BAND     RADIO_BAND_FMWORLD
#define FIX_VOLUME   1

RDA5807M radio;

void save_EEPROM(int v)
{
  EEPROM.write(0, v/256);
  EEPROM.write(1, v%256);
}

int load_EEPROM()
{
  int h = EEPROM.read(0);
  int l = EEPROM.read(1);

  int r = h * 256 + l;
  Serial.println(r);
  return r;
}

void prtHz()
{
  char buf[21];
  memset(buf, '¥0', sizeof(buf));
  dtostrf((float)fHz,6,2,buf);
  strcat(buf, "MHz");

  lcd.setCursor(2, 1);
  lcd.print(buf);

}
void setup(){
  Serial.begin(115200);

  //save_EEPROM(771);
  int hz = load_EEPROM();
  fHz = (float)hz / (float)100.0;
  oldHz = fHz;
 
  delay(200);
  radio.init();
  //radio.debugEnable();
  radio.setBandFrequency(FIX_BAND, fHz*100);
  radio.setVolume(FIX_VOLUME);
  radio.setMono(false);
  radio.setMute(false);

  //lcd 初期化
  lcd.begin(16, 2);
  lcd.setContrast(10);
  //
  lcd.print("FM Radio! ");
  prtHz();
  lcd.setCursor(11, 1);
  lcd.print("ST  ");

  //
  pinMode(2, INPUT);
  pinMode(3, INPUT);

  Serial.println("start BuildNo 0.04");

  lastTm = millis();

}

void loop() {
//  lcd.setCursor(0, 1);
//  lcd.print(millis()/1000);

  //
  int val4Flag=0;
  int val2 = digitalRead(2);
  int val3 = digitalRead(3);
  int val4 = digitalRead(4);
  if(old2!=val2){
    if(val2==1){
      if(val3==0){
        if(val4==1){
          fHz = fHz + 0.01; 
          val4Flag=1;
        }
        else{
          fHz = fHz + 0.1;
        }
      }
      else{
          if(val4==1){
            fHz = fHz - 0.01;
            val4Flag=1;
          }
          else{
            fHz = fHz - 0.1;
          }
      }
      //Serial.println(fHz);
      Serial.println(fHz);
      prtHz();
      lastTm=millis();
      }
    old2=val2;
  }
  //streo-mono 切り替え
  if(old4!=val4){
    if(val4==1 && val4Flag==0){
      if(modeMONO==false){
        modeMONO=true;
        Serial.println("modeMONO=true"); 
        lcd.setCursor(11, 1);
        lcd.print("MONO");
      }
      else{
        modeMONO=false;
        Serial.println("modeMONO=false"); 
        lcd.setCursor(11, 1);
        lcd.print("ST  ");
      }
      radio.setMono(modeMONO);
    }
    if(val4==0){
      val4Flag = 0;
    }
    old4=val4;
  }
  long now = millis();
  if((now-lastTm)>1000){
    if(oldHz!=fHz){
//      Serial.println("NotEqual"); 
//      Serial.println(fHz); 
//      Serial.println(oldHz); 
//      Serial.println(now); 
//      Serial.println(lastTm); 
      Serial.print("set:");
      Serial.print(fHz);
      Serial.println("MHz");
      radio.setMute(true);
      //radio.init();
      radio.setBandFrequency(FIX_BAND, fHz*100);
      //radio.setVolume(FIX_VOLUME);
      //radio.setMono(false);
      radio.setMute(false);

      save_EEPROM(fHz*100);

//      char s[12];
//      radio.formatFrequency(s, sizeof(s));
//      Serial.print("Station:"); 
//      Serial.println(s);
//      
//      Serial.print("Radio:"); 
//      radio.debugRadioInfo();
//      
//      Serial.print("Audio:"); 
//      radio.debugAudioInfo();
      
      oldHz = fHz;
    }
  }
}