13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NanoPi-NEOとMPDとLCDとI2S-DACとTDA7297で音楽再生サーバ(完全体)

Last updated at Posted at 2017-08-30

概要

NanoPi-NEOとMPDとOLEDで音楽再生サーバの続編。

ソフトウェア側・ハードウェア側ともに大幅進化させ、

  • LCD表示でカバーアート完全カラー化!!
  • I2S-DAC 搭載で 192Hz 24bit 再生OK!! HighRes シール対応!
  • 15w+15w の TDA7297 激安パワーアンプ搭載!! あとはスピーカ繋ぐだけ!

の完全体になった。今回下記写真のソフトおよびハードを作る。
(写真のスピーカScandyna MicropodSEは含まれません)

image.png

ソフトウェア側

概要

主な仕様

  • 曲名、アーティスト名・アルバム名の表示。長い場合は自動スクロールします。
  • 現在の再生位置の表示 (タイトルの下のアンダーバーです)
  • Freq,BitDepth,Ch の表示
  • アルバムジャケットイメージの表示(taglib使用)
  • 物理ボタンで、「前の曲」、「再生・一時停止」、「次の曲」が操作可能
  • 一時停止中は、現在日時を表示。(New!) ついでにCPU温度も表示
  • 日本語でOK
  • New! OLEDの他にLCDもサポート!
  • New! マルチディスプレイサポート(笑)
  • New! 完全C言語で1本化
  • New! LCDは縦置き・横置きレイアウト両対応
  • New! LCD,OLEDへの表示は更新部分のみ転送のため、(そこそこ)滑らかなスクロール

というわけで以下の集大成でもある。

image.png

インストール手順

NanoPi-NEOとMPDとOLEDで音楽再生サーバ

の「4. OLED表示のセットアップ」の替わりに以下を実施。
まずはソースコードを取得

console
cd /root
git clone https://github.com/blue777/NanoPi-NEO
cd NanoPi-NEO

LCD関係を必要に応じ修正。
nano usr_displays.h

usr_displays.h
#include <vector>
#include "common/display_st7735_spi.h"
#include "common/display_ili9341_spi.h"
#include "common/display_ili9328_spi.h"
#include "common/display_ili9225_spi.h"
#include "common/display_ssd1306_i2c.h"

void	SetupDisplays( std::vector<DisplayIF*>& iDisplays )
{
//	iDisplays.push_back( new Display_SSD1306_i2c(180,0) );
//	iDisplays.push_back( new Display_SSD1306_i2c(180,2) );	// for SH1306

//	iDisplays.push_back( new Display_ILI9341_spi_TM24(270) );
//	iDisplays.push_back( new Display_ILI9341_spi_TM22(270) );
//	iDisplays.push_back( new Display_ILI9341_spi_TM22(0) );
	iDisplays.push_back( new Display_ILI9328_spi_TM22(270) );
//	iDisplays.push_back( new Display_ILI9225_spi(270) );
//	iDisplays.push_back( new Display_ST7735_spi(90) );
}

NanoHat OLEDを使う場合は、
iDisplays.push_back( new Display_SSD1306_i2c(180,0) );
を活性化し他は無効化。

各コンストラクタの第1引数は、LCDの回転角度。0,90,180,270のいずれか。OLEDは、0,180のみ。
レイアウトはQVGAで確認しているが、それ以外でも、それっぽく表示されるはずである。

マルチディスプレイするときは、複数登録したうえで各LCDのCSを適切に設定する必要がある。

編集したら、パッケージのインストールとコンパイル。

console
apt install libcv-dev libopencv-dev opencv-doc
apt install fonts-takao-pgothic
apt install libtag1-dev

g++ -O3 -std=c++11 mpd_gui.cpp -o mpd_gui.cpp.o -pthread `pkg-config --cflags opencv` `pkg-config --libs opencv` `freetype-config --cflags` `freetype-config --libs` `taglib-config --cflags` `taglib-config --libs`

あとは、自動起動するように構成
nano /etc/rc.local

/etc/rc.local
・
・
・
/root/NanoPi-NEO/mpd_gui.cpp.o &

OS側の設定変更

npi-config を起動しOSの設定を変えます。
各種無効になっていたりするので、設定変更し有効化します。

・I2S DAC使う場合
Advanced Options --> I2S を選択し、有効にする

・SPI (LCD用) 使う場合
Advanced Options --> spi0 --> Enable --> spidev0.0 を選択

ハードウェア側

パーツリスト

写真の工作例の場合のパーツリスト。
NanoPi-NEO使っているがNEO 2でもOK.

無題.png
No パーツ名 値段 入手先 備考
1 NanoPi-NEO(2) $7.99~14.99 NanoPi-NEO or NanoPi-NEO2 いずれか1つ
2 NanoPi Neo Heat Sink $2.99 http://www.friendlyarm.com/index.php?route=product/product&path=82&product_id=134
3 ケース 108円 100円ショップ(Seria) 8cm四方くらいのもの
4 2.2inch LCD(ILI9328) 1750円 http://www.aitendo.com/product/10943 ILI9341系でもOK
4 I2S-DAC(PCM5102) 700円~1000円くらい eBayで入手。ES9023PCM5102のどちらか。NanoHat Pcm5102aでも良いがケースの大きさと要相談。 I2S-DAC省略してNanoPi-NEOのLineOut出力でもOK
5 パワーアンプ(TDA7297) 290円 https://www.amazon.co.jp/gp/product/B010RYGL3I
6 配線材 105円 https://www.amazon.co.jp/gp/product/B01MTAD3GA LCDやI2S-DACの接続に使う
7 DCジャック 120円 http://akizukidenshi.com/catalog/g/gC-06569/ 内側から取り付けるタイプじゃないと工作が難しくなる
8 スピーカ端子(WBT-0735) 16590円 yodobashiとか 余っていたので付けた。昔はもっと安かった気がする。明らかなアンバランス。
9 その他配線材
10 ネジ各種
11 MicroSD 1000円くらい? 16GB以上推奨
12 電源アダプタ 650円 http://akizukidenshi.com/catalog/g/gM-01801/ USB→DC Plugで自作も可

スピーカ端子は置いておくとして、約6000円程度でシステムが出来上がることになる。

配線概要

NanoPi-NEO(SPI関連) ⇒ LCD
NanoPi-NEO(I2C関連) ⇒ OLED (写真では付けていない)
NanoPi-NEO(I2S関連) ⇒ I2S DAC ⇒ TDA7297(パワーアンプ) ⇒ スピーカ端子
NanoPi-NEO(GPIO関連) ⇒ プッシュボタン (写真では付けていない)
電源(+5V) ⇒ NanoPi-NEO
電源(+5V) ⇒ I2S DAC
電源(+5V) ⇒ パワーアンプ

パワーアンプ(TDA7297)

概要

290円で買える15w + 15w の激安アナログアンプである。

定格では 6~18[V]の電圧が必要となっているが、4[V]程度でも音は出る。
今回USBと同じ5[V]で使用するため、発熱量も少なくなる。

とりあえず改造

ノーマルのままだと音そんなに良くないので、改造推奨である。
改造とは、「コンデンサ総とりかえ」である(笑

コンデンサの音が良い順にあげていくと、個人的評価はこんな感じに思える。
(是非聞き比べしてみてほしい)

種類 コメント
フィルムコンデンサ(超高級品) 双信SEコンなど。聞いたこと無いですが分類上1位です
積層セラミックコンデンサ(C0G特性) 比較視聴したこと無いですが分類上2位です
積層セラミックコンデンサ(X7R特性) 癖は少なめ。
フィルムコンデンサ(一般系) 手軽に買える価格帯のクラス。癖あるのが多い。音作りには最適
電解コンデンサ 癖あったり音はまちまち。
セラミックコンデンサ(F特性) 使ってはイケナイ

を踏まえて以下のコンデンサに換装した。

役割 パーツ名 個数 入手先
入力 LowCut Filter 積セラ 4.7uF 25v (X7S) 2 指定部品 http://akizukidenshi.com/catalog/g/gP-09481/
電源デ力ップリング 積セラ 0.1uF 630v (X7R) 1 指定部品 http://akizukidenshi.com/catalog/g/gP-10149/
電源デ力ップリング MUSE KZ 100uF~470uFくらい 1 基板に乗る範囲でhttp://akizukidenshi.com/catalog/g/gP-04609/ など
MUTE回路用 MUSE KZ 47uFくらい 1 容量足りない場合、ポップ音出る。http://akizukidenshi.com/catalog/g/gP-04614/ など

image.png

MUSE KZは音作りされた電解コンデンサなので多用し過ぎに注意。
MUSE FGやUTSJもまたしかり。

とりあえず、こんな感じで大化けし、誰も290円のアンプとは信じないレベルには達する。
(290円だと音が出るだけでありがたいレベル。で見てはいけない)

そして、基板のシルク印刷、SP出力の+-が反転しているので注意。
詳細は仕様書参照.
http://www.st.com/ja/audio-ics/tda7297.html

I2S DAC

概要

ES9023やPCM5102は、いずれもMCLKが無くても動くI2D-DACである。
それが重宝され、いろいろ使われている。
試聴上の解像度はES9023のほうが高め。

Spec:

PCM5102 ES9023
freq 384kHz 192kHz
bit 32bit 24bit

配線

本家:
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2

NanoPi-NEO2 Pin# NanoPi-NEO2 Name PCM5102 ES9023
1 VDD_5V VCC +5V
2 USB-DP1 - -
3 USB-DM1 - -
4 USB-DP2 - -
5 USB-DM2 - -
6 GPIOL11/IR-RX - -
7 SPDIF-OUT/GPIOA17 - -
8 PCM0_SYNC/I2S0_LRC LRCK LRCK
9 PCM0_CLK/I2S0_BCK BCK SCK
10 PCM0_DOUT/I2S0_SDOUT DATA DATA
11 PCM0_DIN/I2S0_SDIN - -
12 GND GND GND

※PCM5102,ES9023は、上記eBayで販売されている製品でのシルク印刷の端子名です。
※ES9023のMCLKは接続しなくてOK

LCD

概要

NanoPi-NEOと5種のLCDと2種のOLEDにて、一番見やすかったLCDを採用。

SPI-LCDのマルチディスプレイ環境は、CSを適切なGPIOに割り当ててあげれば、表示可能です。
ただし、ILI9328ではCSが特殊(タイミング依存が強い)なため、SPIのみにおけるマルチディスプレイは対応不可です。
一番簡単なマルティディスプレイはOLEDとLCDの組み合わせになります。

LCD配線はNanoPi-NEOと5種のLCDと2種のOLEDを参照。

ボタン

NanoHat OLEDの回路図を参考に、3ボタン配線すると、前の曲、再生/一時停止、次の曲が制御できるようになります。
NanoHat OLEDの場合は、そのままで3つのボタンが使えます。

Schematic NanoHat OLED.pdf

image.png

ケース加工・配線・組み立て

  • アクリルケースは、リュータの「小径丸のこ刃」で加工すると楽です。
  • 今回は、スピーカ端子、NanoPi-NEO、LCD、I2S-DAC、TDA7297の順で組み付けましたが、最後はスペースが無くかなり苦戦します。特にスピーカ端子回りがキツくなると思います。

工作例Part2

安定化電源と、NanoPi-NEO2、NanoHat-PCM5102a、LCDを組み合わせ、まとも(そう)なアルミケースに組み込んだ例。
もちろん、USB-DACの接続もOK.

image.png

安定化電源は、LM350を使用。LM350の出力電圧調整に半固定抵抗を使ってはイケナイ。
100Ω+300Ωの固定抵抗の組み合わせでちょうど5.0[V]が出てくる。
三端子レビューレータ7805での+5V生成より、LM350での生成のほうが、音ははるかに良いように感じる。
なお、平滑コンデンサは、8200uF 16V を3本。合計150円@秋月である。

そして、この工作例においては、NanoPi-NEOが裏面CPUであることが幸いし、アルミケースへ直接放熱接続している。そのため、CPU温度も25~40度でとてもよく安定する。
良く考えた結果が裏面なのかは置いておくとして、こういった組み込み時においてNanoPi-NEO(2)は、非常に使いやすい素材である。(安いし、初期状態でピンヘッダハンダ付けされていないし)

おわりに

応用例

音出る一体型のシステムになったので、いろいろできますね。

  • USB-Camera と OpenCV顔認識組み合わせて不審者検出し、パトカーのサイレン音を鳴らす。救急車を鳴らしてはいけない。
  • カッコウ時計。
  • crontabと組み合わせて、目覚まし時計。
  • ジェスチャーセンサ付けて、非接触側で次の曲/前の曲

コメント

今回(組み込み一体システム)の製作に至った経緯は、TDA7297が思いのほが音良かったからです。
今回のパッケージでは、スペースとお金の都合上、NanoPi,DAC,PowerAmpともに共通電源としていますが、制限なければ完全独立電源化し、いろいろ弄ってみたい素材ではありました。
DACはチャージポンプで負電圧を生成していますが、トランスで負電圧生成したものを入れたらどうなるか?(壊れるかも知れませんがw)や、PowerAmpにもう少し電圧高めに入れたりとか、改造ライフを楽しむことができるかと思います。

ソフトウェア・ハードウェア共に弄りがいのあるものだと思いますので、是非遊んでみてください。

image.png

13
14
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?