HOME
ワンチップArduino使用 インターネットラジオ
1.初めに

 ワンチップArduinoでmp3プレーヤーを作ってmakeで展示したことがありました。1,500円位でできたと思います。ユーザーインターフェースは何もなくてマイクロSDに入っているmp3データをひたすらサイクリックに再生するだけでしたがw

 あるとき、ShoutCastに興味を持ってプロトコルを調べてみましたら、意外と簡単で自分でも作れそうな気がしてきました。

 イーサネットからのデータはゆらぎがあるので、バッファを多く持つ必要があります。今回は外付けでSPIのSRAMを1個持ちました。それでもまだバッファが足りない時が時々あります。まぁ2・3時間に一回程度ですけれど・・・

 これを作る場合、バッファ不足の症状が出た時はさくっとリセットボタンを押すか電源再投入する勇気が必要ですw

 あまりにも有名な秋月のインターネットラジオキットが8,200円ですが、これはその半値ちょっとくらいでできてしまいます。

 それにワンチップArduinoを使ってArduino-IDEで開発していますから、ファームウェアの改造も比較的手が出しやすいんじゃないでしょうか。


2.回路図



 ワンチップArduinoの周りにSPIバスを経由して、VS1053bモジュール、イーサネットモジュール(WIZ820IO)、SRAM(32K)が乗っかっているだけですね。とてもシンプルな回路になっています。あとは情報を表示するためのI2Cの16X2液晶と設定をするためのセットスイッチ・ロータリーエンコーダーがあるくらい。

 電源は3.3Vを使用していますが、クロックが16MHzはデータシート上オーバークロックです。ですが、今までこれで不具合が起きたことがないので、今回もオーバークロックで行きます。上手く動かない人がいたらごめんなさい m(_ _)m 3.3Vに統一したことにより、レベルシフタが不要となり、とてもシンプルな回路になりました。

 スイッチ系は、ソフトウェアで弱プルアップしていますので、外付けのプルアップ抵抗は不要です。(リセットスイッチ除く)

 VS1053bはデータシート通りの回路です(後述)。このモジュールだけ使ってPICなどの別のマイクロコントローラーで制御してみたいなんてこともできます。


3.配線図(メインボード)



 これは基板の裏面から見た配線図です。表記のないランドのチップ部品は0.1u積層セラミックコンデンサです。外付けSPIのSRAMはパターンが2つありますが、シルク印刷のある方だけハンダ付けして下さい。2つ目は将来増設用に用意していますが、スケッチが現在対応していません。


4.部品表(メインボード)

部品名型番数量購入元備考
丸ピンICソケット(28P)[300mil]2227MC-28-031個秋月電子通商P-01339
ピンヘッダ(オス) 1×40 (40P)1個秋月電子通商C-00167
ピンヘッダ(オスL型) 1×40 (40P)1個秋月電子通商C-01627
ロングピンソケット 1x42(42P)FHU-1x42SG1個秋月電子通商C-05779
AVRマイコン ATMEGA328P−PUATMEGA328P-PU1個秋月電子通商I-03142
WIZnet組み込み用イーサネットモジュール WIZ820IOWIZ820IO1個スイッチサイエンスWIZNET-WIZ820IO
外付けSPI SRAM23K256-E/SN1個ThinkAboutPCBSOIC 150mil
チップトランジスタ2SC33252SC3325-Y1個秋月電子通商I-00628
セラミック発振子(セラロック)コンデンサ内蔵タイプ 16MHzCSTLS16M0X55-B01個秋月電子通商P-00525
三端子レギュレーター[3.3V1.5A]AZ1086H−3.3AZ1086H-3.31個秋月電子通商I-02502
ロータリーエンコーダ1個秋月電子通商P-00292
I2C接続キャラクタLCDモジュール[16x2行]白色バックライト付ACM1602NI-FLW-FBW-M011個秋月電子通商P-05693
多回転半固定ボリューム3006P(10kΩ)3006P-1-1031個秋月電子通商P-00119
電源スイッチ1回路2接点(ON−ONタイプ)1個
メニューセット用スイッチモーメンタリ・ノーマリーオープン1個
リセットスイッチモーメンタリ・ノーマリーオープン1個
チップ抵抗1KΩERJ6GEYJ103V1個千石電商2012
チップ抵抗100KΩERJ6GEYJ104V4個千石電商4A8E-G8N2 2012
チップ積層セラミック0.1uGRM188F11H104ZA3個秋月電子通商P-04940 1608
チップ積層セラミック10uGRM31CF11E106Z(106)2個秋月電子通商P-01185 3216
超小型スイッチングアダプター5V2AGF12-US0520(106)1個秋月電子通商M-01801
インターネットラジオメイン基板IRM0011枚ThinkAboutPCB



5.配線図(VS1053bギミック)



 これは基板の裏面から見た配線図です。表記のないランドのチップ部品は0.1u積層セラミックコンデンサです。


6.部品表(VS1053bギミック)

部品名型番数量購入元備考
ピンヘッダ(オス) 1×40 (40P)1個秋月電子通商C-00167
ロングピンソケット 1x42(42P)FHU-1x42SG1個秋月電子通商C-05779
MP3デコーダ VS1053bVS1053b1個秋月電子通商I-02407
表面実装型三端子レギュレーター[1.8V800mA]NJM2845DL1-181個秋月電子通商I-02246
3.5mmΦステレオミニジャックAJ-17801個秋月電子通商C-02384
水晶振動子 12.288MHzKDK HC-49/U 12.288MHz1個千石電商6ATP-C3DC
チップ抵抗1MΩERJ6GEYJ105V1個千石電商7ABE-G8NR 2012
チップ抵抗100KΩERJ6GEYJ104V3個千石電商4A8E-G8N2 2012
チップ抵抗10KΩERJ6GEYJ102V2個千石電商7A3E-F8NY 2012
チップ抵抗100ΩERJ6GEYJ102V2個千石電商2012
チップ抵抗22ΩERJ6GEYJ220V2個千石電商6AWE-FMMH 2012
チップ抵抗10ΩERJ6GEYJ100V1個千石電商2AVE-GMMN 2012
チップ積層セラミック100uGRM31CF10J107ZE012個秋月電子通商P-02151 3216
チップ積層セラミック10uGRM21BB30J106K2個秋月電子通商P-00664 2012
チップ積層セラミック1uGRM188F11C105ZA012個秋月電子通商P-02996 1608
チップ積層セラミック0.1uGRM188F11H104ZA11個秋月電子通商P-04940 1608
チップ積層セラミック0.01uGRM188B11H103KA012個秋月電子通商P-04660 1608
チップ積層セラミック0.047u2012サイズ1個2012
チップ積層セラミック33p1608サイズ2個1608
VS1053bギミック基板VS1053bG0011枚ThinkAboutPCB


 チップセラミックコンデンサで購入元がないものは千石の店頭にはありました。通販では取り扱っていないようです。チップ抵抗・チップコンデンサはまとめて昭和電子産業さんあたりから購入するといいかも知れません。

 水晶振動子は背の高いものしか千石で通販していないので、基板実装時には寝かして実装して下さい。店頭には背の低い水晶振動子がありました。マルツさんでは通販で背の低いものも取り扱っています。


7.組立概要

 @インターネットラジオメイン基板を組み立てる。
  後述の完成図外観を参考にされて下さい。表面実装の部品は値がシルク印刷されています。
  シルク印刷のない部品は0.1uF積層セラミックコンデンサです。
 AVS1053bギミック基板を組み立てる。
  後述の完成図外観を参考にされて下さい。表面実装の部品は値がシルク印刷されています。
  シルク印刷のない部品は0.1uF積層セラミックコンデンサです。
 Bそれぞれの基板と外付部品とを結線する。




  メインボードコネクタと電源コネクタ・ロータリーエンコーダー・セットスイッチ・リセットスイッチ・I2CLCDの同名称のピンをお互いに
  それぞれ結線して下さい。
  I2CLCDの1番ピンはLCDのリセットピンです。5番ピン(3.3V)に直接結線してプルアップして下さい。6番〜10番ピンはなにも接続しません。
 Cブートローダー&スケッチライタを使ってATmega328Pにブートローダーを書き込む。
 Dスケッチを書き込む。
  ・スケッチを書き込む前にインターネットラジオ用に最適化されたイーサネットライブラリに置き換える。
  ・ブートローダー&スケッチライタでスケッチを書き込む。
   Ver. 0.44:秋月LCD+Arduino1.0.1
 E電源を投入し、デフォルトのステーションに接続、音楽が流れてくることを確認する。
  接続されない場合はセットスイッチを押しながら電源投入(なにか表示されたらすぐに離す)。
 Fteratermとスケッチライタを使用してステーション情報を書き込む。
  それぞれの詳細は後述します。


8.完成図外観

 【インターネットラジオメイン基板】

 

 



 【VS1053bギミック(mp3デコーダ)基板】

 

 

 赤色で囲った部分はインターネットラジオ用とリアルタイムMIDIモード用で異なります
 ・インターネットラジオ用:赤色で囲った左上のハンダブリッジ用ランドをショート。左上MIDI100KRには100KR抵抗をハンダ付けしない。左下の100KRには「NRM」の方に100KR抵抗をハンダ付けし、「RM」にはハンダ付けしない。
 ・リアルタイムMIDIモード:赤色で囲った左上のハンダブリッジはショートせず、写真で見て左側のランドと右上の「MIDI 100KR」に100KR抵抗をハンダ付けし、その抵抗の左側とを結線する。左下の100KRには「RM」にハンダ付けし「NRM」にはハンダ付けしない。
  MIDI-INは奥に8個並んでいる一番右側のホールがRX入力になります。入力が3.3Vですのでフォトカプラでアイソレートするなど外付けの入力回路の付加が必要です。(検証していませんが、「動作した」という例はご報告は頂いております)



 初版配布基板はメイン基板とVS1053bギミック基板との間の電源の位置が合っていないので↓のように電源線を結線してください(シルク印刷に合わせてねじって配線)。次版ではコネクタで直結出来る予定です。必ずシルク印刷の3.3VとGNDを確認して結線して下さい。ちなみに3.3V電源はインターネットラジオメイン基板からVS1053bギミック基板に供給されます

 



 【組み立て例】

 



 ハンダ付けというとVS1053bの48ピンQFPパッケージのハンダ付けが難易度が高いですが、まず位置合わせを正確にして下さい。少しでもずれているとハンダ付けの精度が極端に低下します。位置合わせしてから(必要に応じてテープで仮止めし)対面を仮ハンダ付けして、この動画のようにモリモリとハンダをもって、軽くトンと机にぶつけてハンダを落とす方法もあります。いずれにしてもハンダ付けの前にパターン面、QFPの足に十分フラックスを塗って下さい。フラックスは無洗浄フラックスを使うよりもフラックスとフラックスリムーバー別々に使用したほうがいいようです。

 ハンダ付け後に拡大鏡で半田ブリッジしていないかチェックして、ブリッジしているようなら該当箇所に再びフラックスを塗って、ハンダゴテ先をよくハンダを拭きとってからブリッジ部分に当てると表面張力で余分なハンダがハンダゴテに吸い取られます。

 


9.ターゲットとの接続

 ブートローダー書き込み済みのワンチップArduinoを用意してメイン基板へ実装します。

 次はスケッチライタとの接続ですが、3.3V系のシステムですので、スケッチライタも3.3Vに設定します。J1を1−2番ピンショートして3.3Vに設定します。

 スケッチライタと本体を5本のストレートケーブルで接続します。

 あとはスケッチを書きこめば完成です(スケッチ書き込み前に後述のイーサネットライブラリの入れ替えを行なって下さい)。スケッチはArduino1.0で書いています。AE-UM232Rから取れる3.3Vは電流が少ないので、基板上では接続していません。外部のACアダプタ5Vからレギュレーターを通して3.3Vに落として基板上に電源供給しています。スケッチを書き込む時はターゲット回路の電源をオンにした状態で書き込んで下さい。




10.スケッチの動作について

・スケッチはArduino-IDE1.0.1で作成しています(2012/10/30現在。Ver.0.44)。

・インターネットラジオに関するデータは こちらのホームページ に全て入っています。この中の「Sketch sample」「InernetRadio」「InternetRadio.ino」がスケッチ本体です。

・今回はインターネットラジオ用にArduinoのイーサネットライブラリを最適化しています。上記ホームページの「EthernetLibraries」の中身を、「(Arduinoインストールフォルダ)」「libraries」「Ethernet」「utility」の中身をバックアップした上で同フォルダの中身を上記ホームページのデータで置き換えて下さい。バックアップしたファイルは他のイーサネットシールドを使った開発の時に必要ですので、いつでも戻せる状態にしておいて下さい。(同じフォルダに例えば「original」というサブフォルダを作り、退避しておくといいでしょう)。イーサネットのチップが純正のイーサネットシールドで使われているW5100ではなくW5200を使っていますので、このライブラリの変更を行わないと絶対に動きませんのでご注意下さい。

・まず、MACアドレスですが、スイッチサイエンスから購入するWIZ820ioにはMACアドレスが付いてきます。このMACアドレスを手動でスケッチに設定してあげる必要があります。「byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // WIZ820IO 01 」の部分がそれです。

・IPアドレスは「192.168.1.231」の固定IPアドレスを使用しています。これはDHCP機能を使用するとメモリサイズオーバーになってしまうためです。固定IPが重なる場合、またネットワークアドレスが異なる場合は適宜修正して下さい。

・インターネットラジオ放送中ではセットスイッチを押すとロータリーエンコーダーで局を選択できます。(後述の局情報の登録を事前に行なって下さい)

・また、セットスイッチを押さずにロータリーエンコーダーを回すと音量調整できます。

・放送局のトラブルなどで15秒程度ネットからのデータが途切れると自動リセットが掛かるようになっています。

・自動リセットが掛かっても相変わらず受信できない場合は、そのままでは他局を選局することができません。その場合はセットスイッチを押しながら電源を入れて下さい。液晶になにか表示されたらすぐにセットスイッチを離して下さい。あるデフォルトの局につながりますので、音楽が流れてきたら他局を選曲して下さい。組み立て直後に放送局が受信できない場合もこの方法で試してみて下さい。

・わたしの自宅の回線(200Mbps)では128kbpsのビットレートの局が安定して受信できます。遅い回線を使用されている方はビットレートの低い局の登録を試してみて下さい。


11.局情報の登録方法について

 通常、WIZ820IOは8ソケット使用し、受信バッファは合計16kバイトあります。1ソケットあたり2kバイトのバッファ割り当てられており、同時に8ソケット使用できます。その複数のソケットを使用して、インターネットラジオを起動しながらステーション情報などをブラウザで編集したいところです。

 ところが今回は構成をケチって1ソケットだけにし、1ソケットに16kバイトのバッファをすべて割り当てたため、外付けSRAM(32Kバイト)はひとつだけで済みました。その代わり、ブラウザをつかってステーション情報を編集することができません。

 そこでWebブラウザからではなくシリアル経由で局データ等の設定を行います。スケッチライタを接続して下さい。スケッチライタ経由で局情報を書き込みます。

 まず、インターネットラジオ局などのデータが設定されていない状態で起動すると、あるデフォルトのラジオ局の放送が流れてきます。(ラジオ局へのコネクトやバッファリングに多少時間が掛かります)

 放送が流れるようでしたら、teratermを起動して下さい。comポートはArduino-IDEで認識したポートを使用し、「設定」「シリアルポート」でボーレートを「57600」に設定し、送信遅延を「10ミリ秒/字」「100ミリ秒/行」に設定して接続します。teratermを起動するとリセットが掛かりますが、局が流れてくるまで待ちます。


 曲が流れている時にパソコンのリターンキーを押すとメニューが出ます。


・「2.Set the Radio Station info.」を選択するために「2」のキーを押します。(リターンキーは不要です)

 ステーション情報を登録するモードになるので、データ格納ホームページにある「インターネットラジオ局リスト」を開いてステーション情報をカットアンドペーストでteratermに書き込みます。(最後の空Returnまで含めてコピペ)

 そうするとチャンネル00〜チャンネル19までの20チャンネルが登録されます。

・局情報をカスタマイズしたい方はShoutCastを訪れて下さい。「Search」に「JPOP」などと入力すると日本語のラジオ局一覧も出てきます。
 ステーション名の頭にあるマークを右クリックして、デスクトップなどへ保存して下さい。保存したファイルをメモ帳などで開くと、局名・IPアドレス(+ポート番号)などが表示されますので、その情報で「インターネットラジオ局リスト」を書き換え、上記操作をやりなおして下さい。

HOME


クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 - 非営利 - 継承 2.1 日本 ライセンスの下に提供されています。