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;
}
}
}