Arduino

2026/01/20

ArduinoでDSP受信機(その9)「ATSなんちゃら」風 タッチパネル付き受信機の製作(その後)

Img_3621

今回製作した受信機は完成度もこれまでより高く、真似っこ製作の域を出たオリジナリティーも出せた気がします。完成してから、ずっとラジオを聴いたりしてみて、気づいた点など踏まえながら若干改良を加えました。SI4732を使ったDSP受信機はArduinoライブラリーの完成度が高く、PCとArduino,SI4732を繋ぐだけで簡単に動作させることができるので、試してみた人も多いと思います。それだけに、感度が悪いとか音が良くないとかいう評価も多いように思えます。今回ノイズ対策を十分留意して製作したことで、思った以上の実用感を得ることができました。

製作者PU2CLRもGithubでしつこく記載しているようにスケッチでコンパイルした状態、つまりPCを繋いだ状態ではものすごくS/Nが悪いです。また、ブレッドボード状態ではノイズがかなり多いのを体験しています。さらに、USB電源(ACアダプター)のノイズの影響をかなり受けます。(特に中波、短波)バッテリーによる動作で、大幅にS/Nが良くなるのを体感しています。

SSBは他の受信モードに比べ、音圧が少し低いようですが、感度、自体はそれほど悪くないように思えます。周波数が安定しているせいか、明瞭度も高いです。ただ、周波数を変える場合1kHzづつ変えるたびに、「ザッ」「ザッ」というノイズが出るのがいただけません。BFOでチューニングする場合は、そういうノイズもなく、スムーズに調整でき、かつ変化幅も大きく取れるのでこれをうまく利用することはできなかったのかと思います。

意外とFM受信の音質が良いので、オーディオアンプに繋いでみたくなりました。SI4732はFM受信のため、左右別チャンネルのオーディオ出力を持っているのですが、当初は内蔵スピーカーしか考えていなかったので、オペアンプを使って、L+Rをわざわざ作ってLM386のパワーアンプに繋いでいます。L/R別々の出力を取り出してオーディオアンプのライン入力に繋いでみました。鳴らすことはできるのですが、出力が小さく、ボリュームをかなり上げなければなりません。そこで、オペアンプを使った20dBのプリアンプを左右のチャンネルに追加しました。それが上の画像なのですが、狭いところに加えたので、ややごちゃごちゃしてしまいました。

Img_3619

リアパネル

L+R出力はFT8の復調などにも使おうと考えています。しばらく使っていたら、LM386+内蔵スピーカでは音質に不満が出てきたので、ラジカセみたいな使い方がしたくなり、簡単な「専用オーディオアンプ」を製作しました。最近はちっちゃくても立派な音が出るICもあるので、悩みましたが、オーディオマニアが大嫌いなD級アンプは避けて、HT82V73Aという5Vで1.5WというAB級の電力増幅ICを使いました。SOP8ピンで小さいのですが、外付け部品も少なく便利です。電源はは5Vのモバイル電源を使っています。

Img_3622

ArduinoでDSP受信機製作は一段落しようと思いますが、TFT表示をさせてみると、時刻表示が欲しくなりました。時計IC(エプソンRX8025NB)  というI2Cインターフェースで動かせるのが秋月電子で販売されており、Arduinoのライブラリーもあったので、現在動作プログラムを製作中です。

Img_3623

日本人の人が作ったライブラリーがあり、これを利用しています。ICには曜日設定のカウンターレジスターがあるのですが、なぜかライブラリには曜日設定がなく、なんとかこのレジスターを動かそうとしてみたのですが、どうしてもうまくいきませんでした。やむを得ず、というか、ちょっとカッコ悪いのですが、年月日から曜日を算出するツェラーの公式というのがあり、これをCで組んで関数化して曜日を算出しています。

ところで、Githubの日本人登録者が450万人になったという記事が先日日経新聞に出ていました。日本人のおよそ30人に一人は登録していることになります。おそらくほとんどは企業の技術者や理工系の学生だとは思いますが、ITに携わる人がいかに多いかということですね。遅ればせばがら、私もアカウントをとって登録してみましたが、今一つ完全に理解できておらず、思うようにファイルをアップロードできていません。この件についてもおいおい投稿してみたいと思っています。

 

| | コメント (0)

2025/12/21

ArduinoでDSP受信機(その8)「ATSなんちゃら」風 タッチパネル付き受信機の製作(完成編)

Img_3577

2.8インチのタッチパネル付きTFTディスプレーを入手したのが9月。なんとかこれでDSP受信機を完成させたいと思い始めて3ヶ月。どうにかやっと完成です。元のPU2CLRのArduino のスケッチを解析して、タッチパネルで操作表示するというだけなのですが、受信機のパラメーターのデータ構造と表示への反映方法を理解するのに手こずりました。なんとか解読して完成にこぎつけました。画面もカラフルにわかりやすい表示にしてみました。

Img_3576

元の受信機が、小さな有機ELを使用して表示、ロータリーエンコーダーとスイッチ一つで全ての機能を操作、表示するという設計だったので、PU2CLRのスケッチに、TFTとタッチパネルのライブラリーをインクルードさせてどっちも動くようにスケッチを改造。よくわからないところは動かしながら解析しました。最後に有機ELは外したのですが、外すだけだとプログラム全体が動かなくなってしまうので、関連する部分を削除する必要があります。

新しい機能としては、バッテリーの電圧、残量表示、Sメーター、SNRの表示など。AGCはFMの場合、プログラミングガイドに「AGC を無効にして LNA に 0 (最小減衰) から 26 (最大減衰) の範囲の特定のゲインを強制することにより、AGC 設定を上書きします。」とあるのですが、動作を見る限りどうも理解できなかったので、FMモードではAGCに固定にしています。AM/SSBではAGC OFFにすると34段階のアッテネーターとして機能するようになっています。SSBの場合、AGCをオフした方が明瞭度が良くなるように思えます。プログラミングガイドにはSSBの場合のAGCの設定をアタック時、リリース時個別に時定数を設定できるように書いてあるようでしたが、よく理解できませんでした。細かいことですが、AGCの設定をATTにすると表示もATTにするようにしています。

SNRを読み取る機能がSI4732にあり、スペースがあるので表示させてみました。バンド幅を狭くしていくとSNR値が上がっていくのでIF(IFがあるのかよくわからない?)以降でSNRを計測しているようです。一方、信号強度(SI4732ではRSSIという)はATTを動かしても変化しないので、LNAの前の方で測定しているのかもしれません。

下段一番右の「FM」というキーはまだ機能していないのですが、設定したローカルFM局、ワイドFM局を切り替えて受信できるようにする予定です。今回のプログラム作成で、Arduinoのmillis()という関数を多用しました。これは操作系や表示系のプログラム作成においてとても便利です。Arduinoでは割り込み操作が一般的ではなく、できないこともないのですが、非常に複雑です。遠い昔、80系でアセンブラやってた人間にとっては割り込みが使えないのはなんとも不自由だとこれまで思っていたのですが、millis()という関数は割り込み以上に便利で簡単でした。画面作りはTFTディスプレーの設定が、昔趣味で覚えたBASICの描画プログラムとほとんど同じです。

Img_3582

ArduinoでDSP受信機、SI4732で3台作りました。もうこれで十分ですね。齢70を過ぎた爺さんがやるには、十分だったと思っています。

| | コメント (0)

2025/12/06

ArduinoでDSP受信機(その7)「ATSなんちゃら」風 タッチパネル付き受信機の製作

Img_3563

Img_3566

Facebookのディスカッションコミュニティーでグローバルに流行しているらしい、ワンチップタイプの全波受信機に挑戦しています。Si47XX for Radio Experimentersなどたくさんあるのですが、これでもかというくらい製作している人がいて、私もちょっとやってみたくなりました。私もこれまで2台くらい製作したシリコンラボのSi4732というDSP全波受信機チップをArduinoで制御します。この種のチップを使ったラジオは中国製で多数販売されていますが、おそらくこのチップが最もパフォーマンス高く、製品例数も多いのではないかと思っています。また、PU2CLRが公開しているArduinoの完成度が極めて高い上、商用も含めて利用公開しているので多くの製品や趣味で作っている人もこれを利用していると思います。

今回私が利用しているのは、PU2CLRのライブラリーから"SI47XX_06_ESP32/OLED_ALL_IN_ONE/OLED_ALL_IN_ONE.ino" です。今回タッチパネルを使用してフルカラーTFTを使う目的からESP32を利用したかったので選びました。元々の動作は一つのロータリーエンコーダーとプッシュボタン(エンコーダーに付随している)だけで操作し、画面もSSD1306というモノクロの有機ELパネル(128X32ドット)に表示させるというものです。全操作を一つのエンコーダーと一つのプッシュボタンで行えるようになっていました。この Aruduinoスケッチを利用して、今流行りのATS何ちゃら風に作り込もうという考え。

現在Arduinoの移植?が8割ほど進んで、一通りの受信が可能になっています。今後、操作の手順や不具合などを詰めて、最終的にはGUIをもうちょっとおしゃれにしてみたいと思っています。表示フォントももっとかっこいいのにしたいと思っています。なにぶん、オリジナルのスケッチは各種設定をエンコーダーと一つの押しボタンで全て操作しているので、操作関連を解読するのに非常に苦労しました。条件式が複雑なこと!なので、始めてからひと月くらい経ちますが、まだ完了していません。プログラム作りにちょっと飽きてきたので、今回の投稿はハードウエアの紹介です。

移植のためのデバックが必要なので、オリジナルの動作ができる状態を維持しつつ、有機ELを繋いだまま、TFTパネルとタッチパネルが動作するようにしてスケッチの変更をしています。有機ELとTFTを両方インクルードしたままスケッチを作っています。完成の暁には取り外します。

Img_3564

TFTと有機ELパネルの両方同時に動くようにしています。それとデバッグ用にスイッチ、リセットボタン(EN)。

Img_3573

電源はリポ18650を使用。充電用のUSB-Cと充電状態のLEDはパネルに出しました。バッテリーを買った時に入っていたケースをそのまま電池ケースに改造しました。

Img_3571

タッチパネル付きTFTとロータリーエンコーダを片面に、裏側にESP32のArduino ボードを配置し、筐体の内側からセットしています。

Img_3572

Arduino ボードの付いている側から配線するにはユニバーサル基板とArduino ボードの間に秋月電子の極薄両面基板を挟んでおくと、Arduinoボード側から配線をはんだ付けできるので組み立てが楽です。

Img_3570

タッチパネルのついたArduino ボードをセットしたところ。受信基板との間にガラエポ基板を利用したシールド板を設けました。

Img_3569

Si4732の基板は以前買ったAitendo基板を使いました。基板からアンテナコネクタまでは最短になるように配置。片面ベタ基板を敷いて、ノイズに配慮しています。大きい基板は低周波増幅部。LM386を使っています。リポの3.7Vでもちゃんと動きます。外部にはステレオ信号とモノラル信号を出しています。スピーカーはカバーに取り付ける予定。

Img_3567_20251206105901

販売されているATS25という製品。これの前世代のATS20とか20+とかがあります。

581160425_25211929368427165_137044592523

ちょっとプログラム作成に飽きてきたので、中身を先出しました。もう少し完成度が上がったらまた投稿します。

 

| | コメント (0)

2025/10/19

Arduino ESP32の闇と沼

Img_3528

この私のブログの中では「高視聴率」なのが『ESP32 スケッチからの「書き込みに失敗しました」』で、もう5年も前に投稿したものですが、Arduinoの世界に参入して、つまづいている人たちが今でもそこそこいるということでしょう。そういう私も、いまだにつまづく毎日が続いています。Arduinoを網羅的に説明するバイブル的なドキュメントがないせいでしょうか?一方で、日本だけでなく、世界中の技術的先駆者たちが、ものすごい量の情報をSNSに出力していて、何か疑問点、問題点に遭遇しても、それら先駆者たちの情報をつなぎあわせて正解を導き出せるのもArduinoなのかもしれません。

特に、ESP32はArduino と言いつつ、「レガシーArduino?」とは、色々扱いが違っていて、困惑に直面することがあります。ESP32は何といってもWifi、Bluetooth機能が付いていて、インターネットに接続できる、スマホから操作、表示できるという、他のArduino にはない機能があります。他にも、8ビットながらDAコンバーター出力端子など。一方で、レガシーArduinoと微妙にコードが異なる点があり、ややこしい相違があります。今回ハマったのがSDカードの読み書きで、教科書などにあるレガシーなコードではファイルの読み書きができません。インクルードするライブラリーも異なります。(FS.hとか) 冒頭の画像はESP32でどうしてもうまく動かなかったSDカードへの書き込みが、ProMiniですんなり動作しました、という例です。

初心者がこういうことを知らないと、私のように沼にハマって身動きが取れなくなります。スケッチにある「ライブラリー例」の中身もESP32ではレガシーArduino と表示されるライブラリーの例が異なる点からも違いがあるということがわかるのですが。最初は分かりませんでした。入門書はArduino UNOで書かれているものが多いというのもあります。また、プログラム書き込みのインターフェースがボードによって異なっていることも、入門したばかりの人には戸惑う原因かもしれません。

しかし、機能を考えると大変有用なので、とくに自作派系エレクトロニクス技術者の人にはぜひ利用してもらいたいです。

大変簡単な例で恐縮なのですが、3.3Vをボリュームで分圧した電圧値をAD変換機能で読み取って、AD値と電圧をスケッチのシリアルモニターで表示、その値と同じ電圧をDA変換機能で出力してLEDを点灯。また、DA値と同じデューティー比でPWMした出力をでLEDを点灯するというプログラムを作ってみました。これは非常に簡単です。

AD変換で読み取った電圧をシリアルモニター画面に表示しています。赤のLEDはその電圧をデジタル値(4095段階)したものを8ビットに変換(1/16)、その値をDA変換して出力したものです。緑のLEDはデジタル値を元にPWMでデューティー比を変えて、LEDを駆動しています。PWMの方がスムーズに変化し、DA出力の方はLEDのVfまでは点灯せず、それから急に明るくなるのがわかると思います。

そのコードが下図で、非常に簡単です。(わかりやすいように変数を使わないで、直接式を代入しています)

20251019-103411

また、ESP32はVcc 3.3Vで動作するというのも重要なポイントです。I2CやSPIの周辺ICは3.3Vで動作するものが多いです。これは組み込み系の場合、リチウムイオン電池3.7Vで動作させられるというのが大きいと思います。5V系Arduinoだとリチウムイオン電池で動かす場合ちょっと使いづらいだけでなく、3.3V系周辺ICと繋ぐのに、インターフェースを考慮しなければなりません。

Arduino は同じArduino チップでもボードメーカーがさまざまでUSBインターフェースのデバイスが違っていたりでうまく書き込みできなかったり、アップロードスピードをデフォルトより遅くしてやらないと書き込めなかったり、ブートローダーがうまく動かなかったりなど、初心者を戸惑わせることが頻発し、その答えを得るのに何日もかかったりします。しかし、先輩方のブログ記事などをつなぎ合わせてなんとか答えが得られるというのが私の経験です。試行錯誤を繰り返しながら進めています。

私のブログは視聴率がかなり低いので、迷える技術者がたどり着く可能性は低いのですが、この投稿もそんな闇や沼にハマったArduinoファンの何かの助けになればと思います。

一方で、楽しくてやめられない沼にハマった自分もここにいます。

| | コメント (0)

2025/10/04

Arduinoで2.8インチタッチスクリーン付きTFT表示器

Img_3518

 Facebookを2008年からやっていますが、個人投稿のやりとりは少し前にやめました。アカウントをクローズしてもいいのですが、公開ディスカッショングループに結構面白いのがあって、アカウントを残しています。特にSDR受信機チップSi7432関連の技術交換をしているグループで、世界中のSi4732ファンが情報を教えあったり、自分の作った受信機を自慢しあったりしているのがSi47XX for Radio Experimentersというグループ。

20251004-135624

元々PU2CLRのAruduinoライブラリーを利用しているユーザーが集まったのですが、特に面白いのが自分が作った受信機自慢。で、私もPU2CLRライブラリに載っているSI4732のフル機能を搭載したオリジナル受信機を作ってみたくなりました。それにはUIを自在にできる大型液晶が必要になります。それにはこのパネルを「自在に操れる!技術が必須だろう」ということでパネルを入手してプログラムを作成してみました。

例により、パネルはアリエクで入手。タッチパネル付きの2.4から2.8インチ6万5千色フルカラーTFT液晶が800円くらいで販売されています。今回入手したのは2.8インチのもので、画面320X240ドット、ドライブICはST7789というもので、それ以上の情報は全くありません。とにかく中国のこの手の部品はドキュメントというものがありません。おそらくオリジナル製品はそれなりの値段するのでしょうが、所詮中国で製造しているので、製造技術、ノウハウなど、一切流出しているので、部品代と製造コストのみなのでしょう。今日はアリエクで590円で販売されてました。

なお、ST7789はIPS駆動です。また今回購入したもの(メーカーなど一切不明)にはSDカードスロットも付いていました。

20251004-1339

ArduinoとのインターフェースはTFTパネル、タッチパネルともSPIです。タッチパネルの分解能は記載がありませんが、実測してみたところx、yが概ね3500X3300ぐらいでした。

TFTパネルもタッチパネルもArduinoのライブラリーがあります。私が使ったのはAdafruit-ST7735-LibraryPaulStoffregen/XPT2046_Touchscreen/でどちらも非常にわかりやすいです。もっともグラフィック描画についてはadafruit-gfx-graphics-libraryに詳細な記載があります。他の製品TFTだけでなく有機ELなども描画に関しては共通ですが、昔やったBasicのグラフィック描画とほとんど同じです。なので、馴染みがあり扱いやすいです。

まず、タッチパネルで位置を検出してその位置に描画するプログラムを作ってみました。TFTはデフォルトでは縦長表示です。TFTとタッチパネルは原点位置が180度異なっていました。これは設定で合わせられます。3500X3300のタッチパネル座標を320X240のTFT座標に変換してやる必要がありますが、これは一元一次方程式ですね。中学生(小学生)でもわかります。タッチペンでなぞった通りの線を描画するプリグラムを作ってみました。押した所1ドットでは小さすぎてよく見えないので、位置から算出したドットの斜め隣接する4箇所を含めて5点を描画しています。

Img_3520

Arduinoのsketchを参考までにここにおきます。動作は保証していません。

ダウンロード - e5908de7a7b0e69caae8a8ade5ae9a2.rtf

これが一応動作したので、今度は受信機のUIを想定してTFTパネルにボタンを表示し、押したボタンの色を変え、離したら元に戻すというプログラムを作ってみました。この投稿のトップの画像がキーボードスイッチが並んでいるところです。1から24までの24個のスイッチを並べています。押したキーが赤からグリーンに変わり、離すと元の赤に戻ります。

ボタンの位置やキートップの文字のカーソル位置はあらかじめ計算してLUTを作っておきました。計算だけでやる方法も考えたのですが、条件式が結構面倒で断念しました。またタッチパネルの検出位置からキーの番号を逆算するのもLUTの方が簡単でした。

Arduinoのsketchを参考までにここにおきます。動作は保証していません。

ダウンロード - e5908de7a7b0e69caae8a8ade5ae9a3.rtf

コメントアウトしてあるSerialコマンドはデバッグ用のものです。途中の変数や座標などを出力できるようになっています。

一応ここまで理解できたので、自作受信機のUIはできそうな気になってきました。

なお、今回AruduinoはESP32を使っています。

 

 

続きを読む "Arduinoで2.8インチタッチスクリーン付きTFT表示器"

| | コメント (0)

2025/08/29

ArduinoでDSP受信機(その6) RDA5807Mスケルトンラジオを赤外リモコンで制御する

Img_3397

DSP受信機「その5」で投稿したスケルトンラジオは音質もまずまずで、自室オーディオのFMチューナーとしてはまずまずでした。しかし、FMチューナーが光り輝いていた私の学生時代と比べると、現在のFM放送は音楽コンテンツが少なすぎて寂しい限りではあります。ところで、スケルトンラジオはFMチューナーという位置付けで、音量レベル一定として、音量調整もつけなかったのですが、やはり使ってみると音量調整とミュート機能は欲しくなりました。タクトスイッチをつけるのであれば、PU2CLRのRDA5807のライブラリーをそのまま利用して簡単にできるのですが、タクトスイッチを追加したりでケースの加工も必要になります。ちょうど、自宅の全録ビデオを修理しようと入手してあった「OSRB38C9AA」という赤外リモコンセンサーユニットが買ってあったので、Arduinoのライブラリーを利用して赤外リモコンコントロールにトライしてみました。この赤外リモコンというのも非常に奥が深くて、元は日本の電機メーカー(NEC)が開発商品化したものですが、蛍光灯光などのノイズで誤動作せず、また現在は様々なリモコンが部屋の中に存在する中で、、混信せず誤動作せずが要求されるため、信号処理だけでなく、データフォーマットも様々になっています。このOSRB38C9AAはIRの受光部だけではなく、変調されたIR信号からデータ成分を復調して出力するユニットで、電源を供給するだけで動作するユニットです。秋月電子で2個入り100円で販売されています。家電に使用されている部品はとにかく安い!

Arduinoのライブラリーは"IRremote"というのがArduinoIDEからダウンロードできます。多数のサンプルプログラムがあり特に”Simple Receiver”というのがよくできていて大変便利です。そのままインストールして、受信モジュールの出力を1箇所Arduinoの入力ポートに接続するだけでリモコンのデコードフォーマットの種類、リモコンボタンのデータがシリアルモニタですぐに読み取れます。その辺にあるテレビやエアコンのリモコンで動作確認できます。「使っていないリモコン」はないか、と探したのですが、本体が壊れてしまうとリモコンも捨ててしまうので、意外とないものです。そこで、秋月電子のリモコンを入手しました。各ボタンのデータを読み取ってボタンの脇に書いてみました。

Img_3392

センサーはスケルトンラジオのブレッドボード部分、トップの画像のArduino Pro Mega の右側に配置しました。今動かしている、RDA5807のスケッチにIRremoteのIRremote.hppをインクルードして、FMラジオチップのボリュームコントロールを制御してやれば良いということなのですが、コンパイルすると問題が起きました。

コンパイルするとエラーが発生。エラー内容をよく確認すると、RD5807.hとIRremote.hppの中のマクロに同じ名前("SPACE"という名称のマクロ)のものがあり、それがコンパイルエラーになっていました。対処方法はなかなかわからず、特にIRremoteの方はどういうデータ処理をしているかソースを見てもよく理解できなかったので、色々考えた結果、RD5807A側のソースファイルRD5807.hとRD5807.cppのそれぞれ2箇所ずつ、SPACEをとりあえず”SPA _CE"に変えてコンパイルを通すことができました。5807A側のSPACEはFM放送チャンネルの局間周波数を設定するモジュールのマクロで、私のラジオでは使用していないのですが、もしかして使うと影響があるかもしれません。IRremote側はセンサーからの出力をマーク、スペースを読み取ってデータに変換する部分のようで、簡単にはいじれなさそうです。

ついでなので、音量調節のほかにラジオのLNAの電流設定、BASS BOOSTもリモコンで設定を変えられるようにしてみましたが、違いはわかるものの、ほとんど影響がないので、最終的には組み込みませんでした。

ということで、完成となったのですが、ラジオに組み込んだ後、一つ問題がわかりました。音量調節+/-とMUTEをリモコンの3X3ボタン部分の真ん中の列を使って上からVOL+、MUTE、VOL-、としたのですが、ラジオを聴いているとだんだん音量が小さくなっていきます。シリアルモニターを繋いで見てみると、20秒から40秒くらい毎にVOLー(データの0x00)が勝手に出ている。おかしいな、と思い「開発環境」(下の画像)に繋いで確認。

Img_3394

なぜか、この環境では不具合が発生しません。色々考えたのですが、結局めんどくさくなってリモコンの左列を使用することにしました。実機に組み込んだ状態でシリアルモニターで確認すると、やはり同じような間隔でデータ”0x00”が出ているのですが、コマンドとしては無効なので、ただ垂れ流しているだけで影響はありません。製品レベルでは品質上、絶対許されない不具合ですが、私のラジオ1台しかでない問題なので、OKです。

なお、IRremoteはArduinoを使ってIRリモコンの送信機もできます。でもやはりリモコンは電池で動いてスイッチも入れずに使えるというのが便利ですね。

また、OSRB38C9AAはデータシートでノイズの多い環境では電源にデカップリング回路を入れるように推奨しており、それもやってみましたが、全く影響はありませんでした。トップの写真に入れてあります。

| | コメント (0)

2025/08/07

ArduinoでDSP受信機(その5) RDA5807Mでスケルトンラジオ

Img_3384

RDA5807MでのFM受信機製作に関しては「その4」にて投稿しましたが、いろいろいじくっているうちにブレッドボード一枚の上に全部載せられるものを作ってみたくなりました。周波数設定と表示をどうするかというのを考えているうちに、有機ELのディスプレイではなく、デジタルスイッチを使ってできるのではないかということに気づきました。デジタルスイッチとは昔よく制御系のコントローラーなどに使用されていた、正確にはサムホイールスイッチ(Thumb Wheel Swich)というのですが、なので人差し指ではなく「親指で操作する」というのが正しい?使い方です。3年前に、もう使うこともないだろうと、電子部品や工具類をほとんど処分したのですが、なぜか生き残っていた未使用の3桁のデジタルスイッチがありました。おそらく40年以上前に購入してずっと持っていたもので、多分その当時1000円前後で前後で買ったのではないかと思います。当時PLLモノの製作に凝っていたことがあって、買ったまま使わずに部品箱に入っていたもので、久々の再登場ということになりました。

Img_3377 Img_3378

3桁のデジタルスイッチを読んで、周波数を設定しようというモノです。そのまま表示器になり電源も不要です。ArduinoはProMiniの3.3V8MHz版を使用し、PU2CLRのRD5807の"RDA5807_02_MINIMAL_RECEIVER"というスケッチをベースに作成しました。デジラルスイッチは3桁ありますので、BCDデータの部分をダイオードマトリックスにして、コモンをストローブのようにして読み取るという方法です。テンキーの読み取りのようなものです。BCDデータ(入力)とコモン(出力)の計7本の信号で3桁のデータが読み取りできます。

PU2CLRのライブラリーをみると、RDA5807の設定方法が詳しく記載されており、おそらく全ての設定が可能です。読み取った周波数値をRDA5807の周波数設定関数にセットすることで受信周波数を設定することができます。

20250807-130746

最初、この受信周波数設定関数をLOOP関数の中で繰り返しセットするようにしたのですが、この関数を呼び出すと一旦設定が全て再設定されてしまうようで、受信が途切れてしまいうまく受信できませんでした。そこで、デジタルスイッチで周波数を設定したときだけこの関数を設定するようにしようと思ったのですが、例えば、デジタルスイッチの数値の変化を検出して、設定完了した後、関数を呼び出すという条件で設定すればいいのですが、その条件式を考えるのが結構面倒で、結局、設定した後にエントリーキーを押して、その時の周波数を受信周波数tして設定するという方法にしました。この場合、デジタルスイッチを変化させると受信機の設定が行われるまで受信周波数と表示周波数が合わなくなるということが生じるので、表示周波数が”true"か"fales"であるかを表示するLED表示器を設けました。

設定関数はいろいろな設定ができるようになっており、例えばLNA(高周波アンプ)の電流を4段階に帰ることができます。デフォルトは1.8mAなのですが、最大3mAに設定できます。実際やってみましたが、幾分感度が上がるのを確認できました。あと低音ブースト機能などもあります。ステレオ受信の状態を出力する関数があり、これを呼び出してステレオ受信インジケータにしました。

デジタルスイッチは000から999まで設定可能なので、受信周波数外は設定できないような例外処理をして76.0から99.9MHzまで受信できるようにしました。

これをブレッドボードで組みながらやっていたのですが、なんせ受信機が10mm強の正方形なので、一枚のブレッドボードに全て乗ってしまいます。

Img_3376

どんなふうにまとめようか、考えたのですが、中身が見えるラジオ、バッテリー動作で、スピーカーもなしのBluetooth接続というのを作ることにしました。ケースはダイソーでサインボールなどを飾るディスプレー用のケースを使うことにしました。

Img_3373

バッテリーは古いデジカメ用バッテリーを分解したリチウムイオン電池です。受信部はブレッドボードに載せることも可能なのですが、S/Nを考えて、ミニボードの別基板にしました。

ダイソーの百円のケースはポリスチレン製で加工はしやすいのですが、アクリルに比べて密度が低く、割れやすいので注意深く加工する必要があります。出来上がったのが、これ。

Img_3380

デジタルスイッチの左にある青のLEDが表示周波数が受信周波数に一致しているかどうかの状態を示す表示器で、上面にあるタクトスイッチを押すと、表示している数値が受信周波数に設定されます。

Img_3381

Img_3382

思っていた通りのものが出来上がると嬉しいです。これを自分のオーディオシステムに繋いでFM放送を聴いています。ラジオを聴き、ラジオの中を見ながら楽しんでいます。

40年ものの骨董デジスイッチを復活させましたが、これを触りながら、その昔CQ誌にAIRバンド受信機の製作記事を書いたのを思い出しました。その話はまた改めて投稿しようと思います。

 

| | コメント (0)

2025/07/28

ArduinoでDSP受信機(その4)RDA5807M

Img_3361

SI4732ではAM中波、短波、FMワイドが受信可能(長波も受信可能だが、受信対象がない)な高性能なDSP受信機をArduinoをコントローラーとして利用することで超小型のオールバンド受信機を実現することができました。だんだん面白くなってきたので、次はFMバンド専用DSP受信チップ、RDA5807Mに挑戦してみました。この受信チップの大きさは縦横数ミリで、外付け部品は32kHzの水晶のみで、ステレオオーディオ出力が得られます。AM放送は間もなくFMに移行する(NHKは残るらしいですが)ので、AMは放送としての役割を終えようとしています。車の中でもAM放送はほとんど聞いたことありません。そんなわけで、FM専用ラジオも役に立ちそうです。

ところで、このRDA5807というチップはRDA microelectronicsというアメリカのファブレス企業が設計したようです。入手可能なデータシートは2014年のものなので、10年以上前に設計されたものになります。もっともこの会社はその頃中国の紫光集団という国営企業に買収されていますので今は中国の企業ということになるようです。

チップ自体は4mm角くらいの小さなものですが、秋月電子やアリババ通販で販売されているもので入手可能なのは10mm角くらいの基板にチップと水晶、パスコンが付いたもので配線をつなげる端子部分のピッチが2mmくらいなので、そのままではブレッドボードにつなげません。ユニバーサル基板を小さく切ってアダプター化しました。

Img_0549

チップの動作テストにはESP32を使ってみましたが、最終的な組み込みを考えて、ArduinoはProMiniの8MHz3.3V版を使用しました。Arduino IDEのライブラリーをRDA5807で検索するとSI4732で利用させていただいた、PU2CLRのものと、mathertel氏のRadioというライブラリーが利用可能です。とりあえず、PU2CLRのArduino IDEのシリアル通信機能で動作させられる一番簡単なサンプルを試してみましたが、ノイズだけ。しかも周波数もうまく設定できない。そこでmathertel氏のRadioのRDA5807_00_CIRCUIT_TEST.inoというのも試してみましたが、これもノイズだけ。PU2CLRのシリアル通信機能で周波数をセットすると、すぐに周波数が北米ヨーロッパのFMバンド周波数に変わってしまうので、バンド情報が日本のバンドに対応していないらしいということがわかりました。そこで、ソースファイルを調べてみるとバンド設定があることがわかります。

20250727-144251

デフォルトが北米ヨーロッパになっているので87から108MHzの間しか設定できません。日本のFM放送を受信するためにはBAND1か2に設定する必要があります。上のスクリーンショット画像IDEの130行目の一行を追加すると、日本のFM局の周波数が設定できるようになります。mathertel氏のRadioの方も同様です。

20250728-113805

上記スケッチの44行目の内容をオリジナルのスケッチから変更しないと日本のFMバンドの周波数が設定できません。なぜこのようになっているかというとチップ自体の受信周波数範囲が広いので、必要な周波数範囲だけを設定できるようにしたものと思われます。

もう10年以上前の半導体なので、知らずにやっていたのは私だけかもしれません。音質はポータブルラジオレベルかもしれませんが。そんなに悪くはありません。感度もまずまずです。同調回路も局発もミキサーもない不思議な受信機です。

これにBluetooth送信機をつけて、オーディオアンプ側にBluetooth受信機をつけて、私のオーディオシステムのチューナーにしようと思ってます。

| | コメント (0)

2025/07/10

ArduinoでDSP受信機(その3)

Img_3340

SI4732で受信機を作ってみたら、意外と簡単にできたのと、思った以上に受信感度が良かったので、最初(その1とその2)の受信機製作とテストに使った残りの部品で、もう一台作ることにしました。今回使用したのは中華製V/UHFハンディートランシーバーUV-K5にアドオンして短波放送が聴けるようにする改造キット、さまざまなバージョンが存在するのですが、その中で受信出力を外部スピーカーにBluetooth送信する機能がついたキットを購入していたので、これを使ってみることにします。

 

Img_3270_20250710132901
その1で紹介した、この基板。

Img_0525
ブレッドボードで動作させるために基板にのせて動作テストしました。

今回ケースは秋月電子で販売しているタカチ製プラスチックケースSW-85Bというもので、その昔、ゲルマラジオや一夕トランジスタラジオなどを組み立てるのに使っていたプラスチック製名刺ケースにほぼ近いサイズです。オーディオ出力はBluetoothのみで内臓アンプもスピーカーもないのでシンプルです。AruduinoはPro mini の8MHz3.3V版を使用。表示機はその1その2で使ったのと同じ、有機ELの1.3インチサイズにロータリーエンコーダーとタクトスイッチ2個がセットになった中華製基板を使用。バッテリーは使わなくなったデジカメのバッテリー7.4V1150mAhというのを解体して、3.7Vのセル2個を取り出し、その一つを使用しました。

Img_3342Img_3343

端子のところにニッケルメッキした真鍮板がスポット溶接されていて、そこにリード線をはんだ付けできます。充電はTP4056という昔からある基板。現在はUSB-Cコネクタになっていますが、一個数十円でアリババで販売されています。秋月とか日本のパーツショップでは扱いがないようですが、リチウムイオン電池を扱うのはある程度は知識がないとやけどや火災のリスクがあるから販売を避けている、と私は思っています。

20250710-103548

ソフトウエアは前回同様、PU2CLRのライブラリーから”SI47XX_ALL_IN_ONE_NEW_INTERFACE_V20"を利用。操作をシンプルにするために受信はFM、中波、短波帯は放送バンドのみとし、FM,中波は既存の放送局の周波数をバンド情報に書き込み、バンド切り替えをすると局が切り替わるようにスケッチを修正しました。
それでタクトスイッチはバンド切り替えとボリューム調整のみとし、表示基板に元からついているタクトスイッチを外して、操作パネルに届くような背の高いタクトスイッチに交換しました。

Img_3332

ランドの位置が元のスイッチと全く違うので、配線後ホットメルトで固定。今回は小さいケースに入れ込むので、ホットメルトを多用しています。

Img_3334
表示基板の裏にPro mini基板を両面テープ留め。

Img_3335

受信基板には3.3Vの3端子電源回路も載せました。

Img_3337 Img_3336

これらを全部ケースへ。

Img_3339_20250710143401

Bluetoothは受信機の電源を入れると接続先待ちになります。(基板内部のLEDが点滅)Bluetoothスピーカーとかイヤホンの電源を入れると自動的に接続されます。この基板はステレオ受信できてBluetoothもステレオ送信されるのでFM放送もステレオで受信できます。なんとなく前回組み立てた私の受信機よりS/Nが良い気がするのですが、SI4732回りがミニマムにまとめてあるからからでしょうか?FMはそこそこいい音で鳴ります。一つ気がついたのはFMバンドをFMバンドに切り替える時、比較的大きなノイズが出て気になることです。短時間、ミュートをかけた方がいいと思います。

ワンチップで受信機を全て構成してしまう不思議なIC SI4732をArduinoで楽しませてもらいました。次はRDA5807というFM専用DSP受信機を作ってみようかと思っているのですが、それとは別にエアーバンド受信機を久々に作ってみたくなりました。SI5351というI2Cでコントロールできる周波数ジェネレータを使ってSI4732のAM受信機を組み合わせてみたいと思ってます。アマチュア無線に復帰しようかとも思ったこともあったのですが、やることがいろいろあって当分無理そうです。

UV-R5の改造キットについてはYoutubeで色々な解説が出ています。参考までに一つ紹介します。

 

 

| | コメント (0)

2025/07/01

ArduinoでDSP受信機(その2)

Img_3324

1ヶ月くらい前にArduinoを使って、DSP受信チップSI4732で受信機を動かせる目処が立ったので、実際にセットを組んでみました。コントローラーは評価段階ではESP32を使用しましたが、小型化することを目的にArduino Nanoの8MHz 3.3V版にしたかったのですが、これがなぜか現在手に入りにくくなっていてアリババでも売っていないようです。そこで、ProMini328 3.3V 8MHz版にしました。Nanoより小さいのですが、シリアルが付いてないので、スケッチからの書き込み時にはUSBアダプターが必要です。つないでしまえばどうということなく動きます。Arduino IDEではボードを”Arduino Pro orPro Mini"を選択して書き込みます。

Img_3296 100

書き込んでいるところ。CP2102のUSBアダプターを接続。アリババ通販でPro Miniが233円、CP2102が174円でした。以前はクレジットカードを使うのにセキュリティー上の理由からPay-Palをかませていたのですが、Paypayが使えるようになって、ちょっと便利になりましたね。驚いたことに注文してから4日で届きました。しかし、アリババからの商品はまずほとんど梱包に緩衝材が使用されておらず、ほぼ封筒のまま届くのですが、まだ一度も壊れていたことがありません。荷物同士がクッションになっているのかも?

ArduinoのSI47XXのライブラリーはPU2CLRの設計した物の中から”SI47XX_ALL_IN_ONE_NEW_INTERFACE_V20"を使用させてもらうことにしました。有機ELの表示器とロータリーエンコーダー、操作スイッチは6個使用しました。(エンコーダーのPUSHスイッチも使用)ノイズの観点からコントローラー部分はまとめたかったので、写真のような立体構造にしました。

Img_0516

Img_0512

Img_0511

アリババで有機ELとロータリーエンコーダ(プッシュSW付き)が一体になった基板が600円くらいで販売されているのでこれを利用しました。ProMini328は接続した状態で書き換えができるようになっています。

Img_0520

受信部はSI4732を秋月電子のSOP-DIP変換基板に乗せて使用。基板裏側には銅箔テープでシールド効果を持たせました。あとはリチウムイオン電池から3.3Vを作る3端子とLM328のオーディオアンプ。バッテリーは昔使っていたSONYのスマホのバッテリーを使用しています。FMは直接アンテナ端子へ接続。AMはダイレクトにアンテナ端子へと広帯域プリアンプBGA2800経由でアンテナへ接続する2系統をスライドスイッチで切り替えられるようにしておきました。

Img_0521

リチウム電池チャージ用のミニ基板は何年か前にたくさん買った物の残り。ホットガンで固定。プリアンプを経由しないAMアンテナ端子は外部に3.3V供給できるようにしておきました。

Img_0522_20250701095901

スピーカーは当初秋月電子の5cm0.5Wというのをつけるつもりだったのですが、スピーカーのマグネットが邪魔して入らなくなってしまい、考えた結果、これまたアリババで昔の手のひらに乗るハンディートランジスタラジオに使っていたような超薄型ダイナミックスピーカーがあり、これを使用しました。マグネットも含め5mmくらいですが、ちゃんと音はそれなりに出ます。まさしくポケットラジオの音。

PU2CLRの設計したArduinoアプリは簡単にカスタマイズできるように作られていて、Sketchのコメントラインに詳細に説明が記載されています。バンド設定の自由度が非常に高く、削除、追加が簡単にできます。長波は何も聞こえないので削除しました。短波も初期設定の周波数を自由に変えられるので、日本短波放送などを設定。周波数の区切り点は見ずらいので小数点に変更しました。バンド設定を変更した場合は、内部ROMのデータを初期化しないとぐちゃぐちゃになっています。初期化方法はコメントラインにも記載されていますが、エンコーダーのPUSHボタンを押したまま電源を入れ、”ROM Reset"表示が出るまで押し続けます。

全て組み込んでみるとブレッドボードの時とはずいぶん印象が違います。まず意外と感度が良い。独特の1秒おきぐらいのノイズはちゃんとアンテナを繋いでおけば聞こえません。中波放送もよく聞こえました。FMは感度音質とも良好です。ただ、さすがにSSBは一応復調できるというレベルで、感度、使い勝手ともあまりよくありません。中波は、AV機器に付属でついてくるループアンテナでもそこそこ聞こえました。苦労して内蔵したプリアンプの効果はそれほどなく、やはりバンドパスフィルターを併用しないとS/Nが良くならないように思えます。

Img_3290_20250701102401

このレベルからスタートした受信機作りは部品集めも含め結構面白かったです。もうこういうことはやらないつもりで工具や部品はだいぶ処分していて、「またやりたくなったら買えばいい」と思っていたのですが、結局買う羽目になりました。ラジオ作りは結構面白く、中学生ぐらいの時に子供の科学で夢中になったゲルマラジオや1石トランジスタラジオ作りの興奮を思い出しました。また少し違うものを作ってみようと思っています。

しかし、同調回路が一つもないラジオがオールバンド、FMも受信できるというのが、眺めれば眺めるほど不思議でなりません。

 

 

| | コメント (0)