HOME
インターネットラジオシールド for Arduino UNO(R3)・Leonardo
1.初めに

 

 このホームページでワンチップArduinoを使ったインターネットラジオを紹介していますが、正規版のArduino(UNO(R3)・Leonardo)用のインターネットラジオシールドを作ってみました。

 今のところ Arduino Leonardo では検証しています。Uno(R3)では検証していませんが、多分動くはずです。近々検証予定ですしました(2012/8/17)。残念ながらそれ以前のArduinoではピン配列が異なるため使用できません。

 まぁ Arudino Leonardo も2,000円ちょっとくらいになって来ましたので、お買い頃ではないでしょうか。

2.回路図



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

 電源は5Vですが、VS1053bモジュールや、SPIのRAMは3.3Vですので、レベルシフタに74HC4050APを使用しています。イーサネットモジュールも電源は3.3Vですが、入力は5Vトレラントなので直結しています。本当はレベルシフタを通したかったのですが、74HC4050の6回路を全て使いきってしまったので、直結しています。I2CのLCDも3.3Vですが、こちらはI2C専用の秋月のレベルシフタPCA9306を使っています。

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

 VS1053bモジュールはデータシート通りの回路です。


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



 これは基板の表面から見た配線図です。表記のないランドのチップ部品は0.1u積層セラミックコンデンサです。ICは表記していませんが、16ピンが74HC4050AP、8ピンがPCA9306です。


4.部品表

部品名型番数量購入元備考
ICソケット 8P2227/8/31個秋月電子通商P-00017
ICソケット 16P2227-16-031個秋月電子通商P-00007
ピンヘッダ(オス) 1×401個秋月電子通商C-00167
分割ロングピンソケット 1x42FHU-1x42SG1個秋月電子通商C-05779
分割ロングピンソケット 2x42FHU-2x42SG1個秋月電子通商C-05780
WIZnet組み込み用イーサネットモジュール WIZ820IOWIZ820IO1個スイッチサイエンスWIZNET-WIZ820IO
外付けSPI SRAM23K256-E/SN1個ThinkAboutPCBSOIC 150mil
5V⇒3.3VレベルシフタTC74HC4050AP1個マルツパーツ館2322-00
I2Cバス用双方向電圧レベル変換モジュールPCA93061個秋月電子M-05452
MP3デコーダ VS1053bVS1053b1個秋月電子通商I-02407
表面実装型三端子レギュレーター[3.3V1.5A]AZ1086H-3.31個秋月電子通商I-02502
表面実装型三端子レギュレーター[1.8V800mA]NJM2845DL1-181個秋月電子通商I-02246
3.5mmΦステレオミニジャックAJ-17801個秋月電子通商C-02384
水晶振動子 12.288MHzHC-49/S3-12.288MHz1個マルツパーツ館
チップトランジスタ2SC33252SC3325-Y1個秋月電子通商I-00628
ロータリーエンコーダ1個秋月電子通商P-00292
I2C接続キャラクタLCDモジュール[16x2行]白色バックライト付ACM1602NI-FLW-FBW-M011個秋月電子通商P-05693
多回転半固定ボリューム3006P(10kΩ)3006P-1-1031個秋月電子通商P-00119
タクトスイッチ2個秋月電子通商P-03648
チップ抵抗10ΩRK73B2ATTD100J1個マルツパーツ館2012
チップ抵抗22ΩRK73B2ATTD220J2個マルツパーツ館2012
チップ抵抗100ΩRK73B2ATTD101J2個マルツパーツ館2012
チップ抵抗1KΩRK73B2ATTD102J1個マルツパーツ館2012
チップ抵抗10KΩRK73B2ATTD103J2個マルツパーツ館2012
チップ抵抗100KΩRK73B2ATTD104J4個マルツパーツ館2012
チップ抵抗1MΩRK73B1JTTD105J1個マルツパーツ館1608
チップ積層セラミック33pGRM1882C1H330JA01D2個マルツパーツ館1608
チップ積層セラミック0.01uGRM188B11H103KA01D2個マルツパーツ館1608
チップ積層セラミック0.047uGRM188B11E473KA01D1個マルツパーツ館1608
チップ積層セラミック0.1uGRM188B11E104KA01D13個マルツパーツ館1608
チップ積層セラミック1uGRM188B11A105KA61D1個マルツパーツ館1608
チップ積層セラミック10uGRM21BB30J106K2個秋月電子通商P-00664 2012 6.3V用
チップ積層セラミック10uGRM31CF11E106Z2個秋月電子通商P-01185 3216 25V用
チップ積層セラミック100uGRM31CF10J107ZE012個秋月電子通商P-02151 3216
インターネットラジオシールド基板IRS0011枚ThinkAboutPCB




 チップ積層セラミックの0.047uは0.1uでも代替可能です。ランドの大きさは2012サイズですが1608の0.1uでもハンダ付け可能です。

 チップ積層セラミックの10uは6.3Vが1.8Vレギュレーター用、25Vが3.3Vレギュレーター用です。

 イーサネットモジュールWIZ820IOはストロベリーリナックスでも取り扱っていますが、ストロベリーリナックスの場合はMACアドレスがついてないので、捨てても良いLANカードなどからMACアドレスだけ拝借する必要があります。


5.組立概要

 ①インターネットラジオシールド基板を組み立てる。
  後述の完成図外観を参考にされて下さい。表面実装の部品は値がシルク印刷されています。
  シルク印刷のない部品は0.1uF積層セラミックコンデンサです。
 ②スケッチをArduioに書き込む。
  ・スケッチを書き込む前にインターネットラジオ用に最適化されたイーサネットライブラリに置き換える。
 ③電源を投入し、デフォルトのステーションに接続、音楽が流れてくることを確認する。
  接続されない場合はセットスイッチ(下記画像の左下の白のタクトスイッチ)を押しながら電源投入(「Set MP3 Chip...」と表示されたらすぐに離す)。
 ⑦teratermを使用してステーション情報を書き込む。
  それぞれの詳細は後述します。


6.完成図外観

 【表側】
 

 【裏側】
 



 VS1053bの1番ピンには白い印がついています

 ハンダ付けというとVS1053bの48ピンQFPパッケージのハンダ付けが難易度が高いですが、まず位置合わせを正確にして下さい。少しでもずれているとハンダ付けの精度が極端に低下します。位置合わせしてから(必要に応じてテープで仮止めし)対面を仮ハンダ付けして、その後4辺をモリモリとハンダを盛ります。最後にフラックス入りハンダ吸い取り線(私は太陽電子の「goot wick CP-25Y」を使っています)で余分なハンダを取り除きます。

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

 表側写真に記載されている「G A B」がロータリーエンコーダーへの配線コネクタです。下記の写真の同じ記号同士をハンダ付けして結びます。

 




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

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

・インターネットラジオに関するデータは こちらのホームページ に全て入っています。この中の「Sketch sample」「IRShield.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アドレスですがDHCPを利用するとプログラムサイズオーバーとなってしまったため、固定IPアドレスとしています。スケッチの「byte ip[] = { 192, 168, 1, 231 };」のところで指定していますので、環境に応じてIPアドレスを変更して下さい。

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

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

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

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

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


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

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

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

 そこでWebブラウザからではなくシリアル経由で局データ等の設定を行います。ArduinoとパソコンをUSBケーブルで接続してください。USB経由のシリアル接続で局情報を書き込みます。

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

 放送が流れるようでしたら、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 日本 ライセンスの下に提供されています。