Gearさんが投稿したArduino・DSP・ラジオに関するカスタム事例|車のカスタム情報はCARTUNE
Gearさんが投稿したArduino・DSP・ラジオに関するカスタム事例

Gearさんが投稿したArduino・DSP・ラジオに関するカスタム事例

2021年03月14日 00時43分

Gearのプロフィール画像
の投稿画像1枚目

ステレオ FM ラジオ

電子工作の基本はラジオと言うことで、
FMラジオ作りに挑戦してみました。

アップで見てみると、我が事ながら本当に下手なハンダ付けだと思います。

でも、ちゃんと鳴るまでには苦労もございました。^_^;

の投稿画像2枚目

マイコンと組み合わせて動作します。
イヤホンをラジオモジュールに繋ぐとFM放送を聴くことができますが、投稿のために外部スピーカーアンプに接続して鳴らしてみます。

線がごちゃごちゃしてますが、FMラジオの基板からは、7本のケーブルが出ているだけです。うち2本は電源のプラスとGND、もう2本がスピーカーのLとRのプラス、あと2本はマイコンとの通信線、そして、最後の1本がアンテナです。スピーカーのマイナスは電源のGNDと共通です。

わずか1センチ角、その中核をなすICに至っては3ミリほどの小さなモジュールですが、ほぼラジオとしては完成しているので、工作と言えるかどうか分かりません。しかし、小さすぎてハンダ付けが難しく、何度もやり直して、やっと鳴らすことが出来ました。

最初、針金状のジャンパー線で配線したのですが、いじっていたら端子が無くなってしまい、仕方なく基盤のパターンを削って細いリード線を数分の一ミリしかない銅箔パターンにハンダ付けしました。

チープなラジオモジュール+スピーカーアンプですが、雑音も少なく結構良い音で鳴っています。

チューニング変更後の周波数を表示させてみました。

試験用にアンプと可変抵抗器も追加してステレオの片側だけ外部スピーカーに繋いで鳴らしています。

ディスプレイの下段に「ミュート入り」の表示が出るようにしてみました。勿論ですが、ミュート解除で表示が消えます。

ミュート入りの状態で選局するとミュート表示が消えてしまうのが難点ですが、これを改善する手間を考えると、運用上の注意として、「選局はミュート解除の状態で」行うこととします。

ボリュームの値もDSPで変更するようにして表示させるか迷ったのですが、これも難しそうなので諦めました。欲を言えばもう少し大きなディスプレイにしてVUメーターが欲しいところです。

の投稿画像6枚目

モジュール配置状況

左から、ステレオFMラジオ、可変抵抗器、ステレオアンプ、小型ディスプレイ、4連タクトスイッチ+10kΩ抵抗器と上部別枠でArduino uno互換機です。

ブレッドボード右下にチューニング上下、ミュートオンとオフのボタンをつけました。ミュートはボタン1つで操作したいところですが、とりあえずオンとオフの2つで操作できるようにしておきました。

Arduino IDEで作成したスケッチ(プログラム)は次のとおりです。配線図の代替として冒頭のコメントにデータを記述しておきました。このスケッチで使用したライブラリはインターネットで公開されています。必要に応じてダウンロードして組み込んでください。

前述のとおりイヤホンなら直接RDA5807のL-out,R-outとGNDに繋げて聴くことができますが、スピーカーに繋げる場合はアンプが必要です。

の投稿画像7枚目

/* RDA5807M_SSD1306_Radio
*Arduino
3.3V for RDA5807M,SSD1306
GND
A4 SDA
A5 SCK and SCL
D7 100 seek down
D6 101 seek up
D5 200 mute
D4 201 unmute
*RDA5807M
SDA 1 ) _LLLLL (10 ANT
SCK 2 ) l l ( 9 N/C
N/C 3 ) l________l ( 8 L-out
N/C 4 ) _LLLLL___ ( 7 R-out
Vcc 5 ) =l__________l ( 6 GND
*bunton( 10kΩ-GND)
100/101 - seek down/seek up
200/201 - mute/unmute
*OLED (SSD1306 128*32)
SDA=A4
SCL=A5
Vcc=3.3V
GND=GND
*/
#include <RDA5807M.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
RDA5807M radio;
word status, frequency;
const int DIN_PIN7 = 7;
const int DIN_PIN6 = 6;
const int DIN_PIN5 = 5;
const int DIN_PIN4 = 4;

void setup()
{
radio.begin(RDA5807M_BAND_WORLD);
display.clearDisplay();
display.display();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32
pinMode( DIN_PIN7, INPUT_PULLUP );
pinMode( DIN_PIN6, INPUT_PULLUP );
pinMode( DIN_PIN5, INPUT_PULLUP );
pinMode( DIN_PIN4, INPUT_PULLUP );
display.setTextSize(2); // 2:2 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
radio.volumeDown();
radio.volumeDown();
radio.volumeDown();
radio.volumeDown();
radio.volumeDown();
radio.volumeDown();
radio.volumeDown();
}

void loop()
{
int val = 0;
int nunber7 = 100 ;
int nunber6 = 101 ;
int nunber5 = 200 ;
int nunber4 = 201 ;
int value7;
int value6;
int value5;
int value4;
value7 = digitalRead( DIN_PIN7 );
value6 = digitalRead( DIN_PIN6 );
value5 = digitalRead( DIN_PIN5 );
value4 = digitalRead( DIN_PIN4 );
if( value7 == LOW)
{ val = nunber7; delay( 800 ); }
if( value6 == LOW)
{ val = nunber6; delay( 800 ); }
if( value5 == LOW)
{ val = nunber5; delay( 800 ); }
if( value4 == LOW)
{ val = nunber4; delay( 800 ); }

switch(val)
{
case 100:
radio.seekDown(); delay(300); f();
display.display(); // actually display all of the above
break;
case 101:
radio.seekUp(); delay(300); f();
display.display(); // actually display all of the above
break;
case 200:
radio.mute(); delay(300); f();
display.setCursor(0, 17); // Start at botum-left corner
display.print(F("Mute is ON"));
display.display(); // actually display all of the above
break;
case 201:
radio.unMute(); delay(300); f();
display.display(); // actually display all of the above
break;
}
}

void f(){
frequency = radio.getFrequency();
display.clearDisplay();
display.setCursor(0, 0); // Start at top-left corner
display.print(frequency / 100);
display.print(".");
display.print(frequency % 100);
display.print(F(" MHz"));
int val = 0;
}

の投稿画像8枚目

ヘッドホンに繋げたり外部スピーカー・アンプに繋ぎかえて使うのに便利なようにミニジャックを取り付けました。

追記:

インクルードするライブラリは、ネットで検索すると.zip ファイルが簡単に見つかります。このスケッチを実行するために欠かせないので、事前にダウンロードしておいてください。

Void setup( ) の最後に同じコマンドが7行入っています。これは、イヤホンを直接つなげられるための音量調節用に入れたもので、このコマンドの行数を変えることで、出力音圧を変えることができます。また、このコマンドを「radio.volumeUp()」に変えると更に音圧を高められます。効率の良いスピーカーならこの調整を行えばアンプ無しで鳴らすことが可能です。

それと、イヤホンで音が大きいと感じたらリセットボタンを押してみてください。小さな音になるはずです。

の投稿画像9枚目

追記2

電源ONでノイズから始まるのではなく、どこかの局にチューニングされた状態でシステムが立ち上がってくれないかなと考えて
void setup( )に「radio.seekUp( )を複数続けて記述してみました。私の家の中だと7行で”東京FM”が受信できました。受信する地域によって様々だと思いますが、試してみる価値はあると思います。

ただ、イヤホン使用時に音量を下げようとしてリセットボタンを押すと選局のコマンドも同時に効いてしまうので注意が必要です。

そのほかのカスタム事例

スイフトスポーツ ZC33S

スイフトスポーツ ZC33S

こんばんは🤗『工場夜景🏭🌃新規開拓』の巻😎✨では宜しくお願い致します🙇🏻✨ようやくこのレンズの夜撮絞りのポテンシャルを引き出せるようになってきました😎✨コ...

  • thumb_up 1
  • comment 0
2024/06/21 18:04
スイフトスポーツ ZC33S

スイフトスポーツ ZC33S

きたきたー!楽しみですねー!

  • thumb_up 1
  • comment 0
2024/06/21 18:04
コペン LA400K

コペン LA400K

こんにちは😊今日は急遽、仕事が休みになり初カスタムしましたKLCフロントガーニッシュとj-modeアイラインフロントグリルのバーがボディ色だったのでカーボ...

  • thumb_up 2
  • comment 0
2024/06/21 18:03
ノート E12改

ノート E12改

ユーザー車検で5万円以内で終わったしエアコンも真空引きして入れ替えた👍😊

  • thumb_up 3
  • comment 0
2024/06/21 18:02
Cクラス セダン W205

Cクラス セダン W205

ナビ起動時のロゴ表示を出荷状態に戻しました!

  • thumb_up 5
  • comment 0
2024/06/21 17:59
ミニキャブバン

ミニキャブバン

雨上がりの試聴中ですそろそろ職質来るんじゃないかと内心期待している笑接近してくれば分かる笑

  • thumb_up 4
  • comment 0
2024/06/21 17:58
カマロ

カマロ

イオンの立体駐車場で秒📸活⭐️やっぱりカマロかっけー😆♪買ってよかったとしみじみ思うwwでもすぐ運転するとめんどい車だなと思う、、、😂の繰り返しwwリアス...

  • thumb_up 10
  • comment 0
2024/06/21 17:57
アルファード GGH25W

アルファード GGH25W

雨が止んだら…🙄洗車するしかない…っしょ🤣暗くなる前に…😅やっちゃうw

  • thumb_up 8
  • comment 0
2024/06/21 17:57
アクア NHP10

アクア NHP10

スポイラー交換しました上は純正e12ノートのリアっぽい笑10分もかからず交換できます大型スポイラーなので存在感でました⭐︎ちなみに奇跡的に同色かつ傷少なめ...

  • thumb_up 6
  • comment 0
2024/06/21 17:57

おすすめ記事