車載PC Player - 9 - スピーカー

Car, PC & Software, PC Player for Car Audio No Comments »

どうせ車載PCオーディを作るならと、スピーカーもリフレッシュする事に。
大体、エリーゼの純正スピーカーは位置が悪いうえにショボ過ぎて、すぐに不満いっぱいになるに決まってますから。


これがメインSP。膝の先の奥まった位置に10cmフルレンジがあり、ほとんど聞こえません。

いろいろ検討した結果、現在のメインSPが入ってる位置にサブウーファーを、ダッシュボード脇のAピラー付け根にフルレンジを、シートバックのリアSPはユニット交換で行こうと思います。
Read the rest of this entry »

車載PC Player - 8 - Bluetooth...

Car, PC & Software, PC Player for Car Audio No Comments »

Bluetoothが言う事を聞きません。

一応動作はしているようだし、ペアリングもできますし、Voyage側からAndroidにpingを打つと応答が帰ってきます。
これはWindowsXPに付けたBluetoothドングルに発信したとき
root@voyage:~# l2ping 00:1B:DC:04:23:XX
Ping: 00:1B:DC:04:23:XX from 74:2F:68:E1:2F:XX (data size 44) ...
44 bytes from 00:1B:DC:04:23:XX id 0 time 9.77ms
44 bytes from 00:1B:DC:04:23:XX id 1 time 27.76ms
44 bytes from 00:1B:DC:04:23:XX id 2 time 19.77ms
3 sent, 3 received, 0% loss


こっちはAndroidに発信したとき
root@voyage:~# l2ping 8C:71:F8:28:B3:XX
Ping: 8C:71:F8:28:B3:XX from 74:2F:68:E1:2F:XX (data size 44) ...
0 bytes from 8C:71:F8:28:B3:XX id 0 time 73.78ms
0 bytes from 8C:71:F8:28:B3:XX id 1 time 34.74ms
0 bytes from 8C:71:F8:28:B3:XX id 2 time 32.78ms
3 sent, 3 received, 0% loss

Android側は受信バイト数が0なのでなんかおかしいようです。


Android側で見ると「Connected」と書いてあります。

でも、Android側から

try {
BluetoothSocket sock = device.createRfcommSocketToServiceRecord(RFCOMM_UUID);
sock.connect();
OutputStream os = sock.getOutputStream();
byte [] bytes = "Hello".getBytes("UTF-8");
os.write(bytes);
os.flush();
os.close();
sock.close();
}
catch(Exception e) {
Toast.makeText(this, "send error", Toast.LENGTH_LONG).show();
}

のsock.connect()で例外「java.io.IOException: Service discovery failed」が起こって通信できません。
文面からすると、Voyage側のrfcommサービスが見つからないということみたいです。
BluetoothはTCP/IPのソケットよりも洗練されている仕様ですが、それだけに動作も複雑で今ひとつよくわかりません。
ネットを探しても、LinuxにBluetoothマウスなどの周辺機器を接続する例などは先人のレポートがいろいろありますが、Androidをつなぐというのはほとんど見つかりませんでした。少しだけGUIツールを使って接続する例が見つかりますが、VoyageにはGUIがないのであまり参考になりません。
それにAndroid2.2のBluetoothは、使える機能が少なく中途半端間が否めません。

LinuxのBluetoothスタックはBluezというパッケージを使用しますが、これも設定方法がバージョンでいろいろで何が正しいのやら。Bluezのソースを見るとD-BUSにかなり依存しているようで、なぞは深まるばかりです orz

車載PC Player - 7 - ソフト構成

Car, PC & Software, PC Player for Car Audio No Comments »

ソフトの構成を考えてみました。



基本的な再生ソフトはMPDをそのまま使ってみます。MPDで問題となるのはリモコンの接続と周辺機器のコントロ-ルです。
リモコンに関してはWi-Fi接続であれば素のMPDだけでも良い(Linux接続のWi-FiアダプタでもアドホックモードでAndroidと通信可能です)のですが、そうするとAndroidの3G回線によるデータ通信が無効になってしまいます。
それでは不便なので、やっぱりBluetoothで接続したいところです。
それとFMチューナーや周辺機器のコントロールも必要なので、やはり専用のサーバが必要になります。
そこで、PC内にBluetoothでAndroidと接続するサーバを用意して、MPDへのコマンド中継と周辺機器の制御を行う事にしました。

楽曲ファイルの転送
本体のSDスロットにメモリカードを挿して、Android側から取り込み指示を行います。Contolerサーバは、指示を受け取るとSDカードからSSDへファイルをコピーした後、MDPにupdateコマンドを送付してデータベースを更新します。更新が終わったらContolerはAndroidにリフレッシュ指示を送ります。
当初はBluetooth経由で転送しようと思いましたが、転送速度がかなり遅く実用的ではなかったです。

選曲とプレイリスト
選曲はちょっとややこしそうです。MPDは自身が管理するプレイリストを再生するので、「このアルバムを再生」とか「この曲を再生」などは受け付けません。必ずプレイリストを用意して「このプレイリストを再生」と指示を出す必要があります。
一般的なアルバム単位での再生は、Controlerがアルバム内の曲をプレイリストに収めて再生指示を出す事にします。
自宅でプレリストを作って車で再生できるように、Android内にも楽曲のインデックスを保存して、プレイリストを作成できるようにするつもりです。楽曲ファイルは常にAndroidの操作を通して転送するので、常にPC側と同期できるはずです。

再生コントロール
曲のスキップや一時停止など再生コントロールは、AndroidからControlerが受け取りMPDに転送します。本体のツマミでの操作もPICが検出してControlerに送り、MPDに転送します。

音量・音質コントロール
音量やバランスのコントロールは、AndroidからControlerが受け取りPICに指示を送り電子ボリュームを制御します。本体のツマミで調整したときは、PICが操作を検出してControlerに送り状態の同期を行います。

FM放送
ControlerがPICに指示を出し、セレクタを切替えて選局も行います。このときMPDにpauseコマンドを送付して一時停止状態にします。おそらくFMチューナーの出力レベルとDACの出力レベルは異なるので、あらかじめ設定した音量差分のボリューム調整も行います。

インターネットラジオ
調べてみるとMPDはインターネットのストリーム放送も再生できるようです。AndroidをテザリングモードにしてPCからWi-Fiで接続すれば、3G回線経由でストリーム放送も聴けるかもしれません。
もうちょっと調査が必要です。

本体の表示
VFDに状態を表示しますが、これもControlerが行います。Voyageはフォントを持っていないしWindowsのようなGDIもないので、グラフィック処理ソフトを作るのが面倒かもしれません。手頃な大きさのビットマップフォントも用意しないと。VFDは一般的なPCのグラフィックと異なって、走査線というかデータの向きが縦ですからなおさら面倒です。

車載PC Player - 6 - VoyageのBluetooth

Car, PC & Software, PC Player for Car Audio No Comments »

USBドングルのBluetoothが認識されたので、テストをしてみたのですがAndroidとVoyageでペアリングできるものの通信ができませんでした。

よくよく調べてみると、VoyageにはBluetoothの通信に必要なRFCOMMがロードされていない事が判明。RFCOMMをロードするためにはカーネルの再構成が必要になります。カーネルの再構成にはコンパイルを伴うので開発ツールも必要になります。ZBOXNANOにはいらないパッケージをインストールしたくはなかったのですが仕方ありません。

まず再構成に必要なパッケージをインストールします。

root@voyage:~# apt-get install kernel-package ncurses-dev fakeroot

カーネルソースパッケージのインストール

root@voyage:~# apt-get install linux-source-3.0.0-voyage

ソースの用意

root@voyage:~# cd /usr/src
root@voyage:/usr/src# tar -jxvf linux-source-3.0.0-voyage.tar.bz2
root@voyage:/usr/src# ln -s linux-source-3.0.0-voyage linux

コンフィグレーション

root@voyage:~# cd linux
root@voyage:/usr/src/linux# cp /boot/config-3.0.0 .config
root@voyage:/usr/src/linux# make menuconfig


少し待つとCUIのメニューが表示されます。



Networking support → Bluetooth subsystem support と開いて



こんな風に変更します。使う予定のないサービスもありますが、またカーネルを作り直すはめになるのも面倒なのでとりあえず全部入りです。
さらに、Bluetooth device driversから



以前ダウンロードしておいた内蔵Bluetoothのファームウェアも取り込むように指定します。

コンパイル

root@voyage:/usr/src/linux# fakeroot make-kpkg --initrd --revision=ya1.0 kernel-image modules-image

--revision=ya1.0は好きな名前で指定します。

コンパイルが始まりますが、ZBOXNANOではかなり時間がかかります。多分2時間ぐらいかかったと思いますが、ほかのことをやってて忘れたころに見たら終わってました。

インストール

root@voyage:/usr/src/linux# cd ..
root@voyage:/usr/src# dpkg -i linux-image-3.0.0_ya1.0_i386.deb


これで再起動すると新しいカーネルが読み込まれます。


root@voyage:~# dmesg
:
[ 5.070125] Bluetooth: Core ver 2.16
[ 5.070258] Bluetooth: HCI device and connection manager initialized
[ 5.070312] Bluetooth: HCI socket layer initialized
[ 5.070362] Bluetooth: L2CAP socket layer initialized
[ 5.070832] Bluetooth: SCO socket layer initialized
[ 5.074232] Bluetooth: Generic Bluetooth USB driver ver 0.6
[ 11.695315] Bluetooth: RFCOMM TTY layer initialized
[ 11.695372] Bluetooth: RFCOMM socket layer initialized
[ 11.695416] Bluetooth: RFCOMM ver 1.11
[ 11.703248] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 11.703309] Bluetooth: BNEP filters: protocol multicast

root@voyage:~# lsusb
Bus 007 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 006 Device 002: ID 2109:0811
Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
lBus 005 Device 004: ID 0cf3:3005 Atheros Communications, Inc. AR3011 Bluetooth
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 099a:0638 Zippy Technology Corp. Sanwa Supply Inc. Small Keyboard
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

root@voyage:~# hcitool dev
Devices:
hci0 74:2F:68:E1:2F:F4 <-- 内蔵Bluetooth

root@voyage:~# hciconfig -a
hci0: Type: BR/EDR Bus: USB
BD Address: 74:2F:68:E1:2F:F4 ACL MTU: 1022:8 SCO MTU: 121:3
UP RUNNING PSCAN
RX bytes:1886 acl:0 sco:0 events:68 errors:0
TX bytes:1727 acl:0 sco:0 commands:63 errors:0
Features: 0xff 0xfe 0x0d 0xfe 0x98 0x7f 0x79 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'voyage-0'
Class: 0x4a0100
Service Classes: Networking, Capturing, Telephony <-- サービスがロードされてる
Device Class: Computer, Uncategorized
HCI Version: 3.0 (0x5) Revision: 0x9999
LMP Version: 3.0 (0x5) Subversion: 0x9999
Manufacturer: Atheros Communications, Inc. (69)


ふぅ。

注) 記憶を頼りに書いてるので間違ってるかもしれません!



車載PC Player - 5 - 全体構成

Car, PC & Software, PC Player for Car Audio No Comments »

全体の構成を考えてみました。
まだ具体性は全然ない贅沢な妄想バージョンです。



CPUボードを核に、6チャンネルの電子ボリューム付きマルチアンプ構成です。
内2チャンネルはローパスフィルター付きでサブウーファーに使用します。
キーボード(K/B)はメンテ用で普段は付けません。楽曲データはSDカード(SD)経由で。Andoroidとの接続はBluetooth(BT)のRFCOMM接続で専用のプログラムと通信します。

本体の表示は明るいところでも見やすいノリタケ産業のSCK256X64E-3100-Aあたりを使います。

アンプは6チャンネルともYAMAHAのデジタルアンプICを使用した、サンネット電子のDAY015Aを予定。以前にDesktop Nautilusで使った物です。15W/4Ω出力ですが十分でしょう。

ローパスは同じサンネット電子のSWF100という物で、ボリュームで周波数を調整できます。カットオフ周波数の上限が150Hzなので、300Hzぐらいまで使いたいので変更するかもしれません。

FMチューナーは、aitendoのFM-TEA5767-Mを予定。PhilipsのTEA5767HNを使ったFMレシーバモジュールです。チューニングはPICで制御しますが、チューニングダイアル(RE2)とPCからの指示で行えるようにします。

DACはUSB接続のバスパワーで動作するコンパクトな物から、VICSのPCM2704使用USBオーディオキットを使ってみようと思います。

USB DACとFMの切替はSELで書いたセレクターで行い、FMで受信した音声信号はPCを経由しないで直接アンプに流す事にしました。これもPICで切替指示をしますので、セレクトダイヤル(RE2)とPCからの指示で行えるようにします。

6個の電子ボリュームは全部別々に音量設定ができるようにして、前後左右のバランス調整、メインスピーカーとサブウーファーのバランス調整を兼ねるようにします。調整はPCからPIC経由で行います。

操作はAndroid上のGUIで、楽曲ファイルの転送や管理、選曲やプレイリストの管理、FMとMP3の切替、FMの選局、音量や各スピーカーのバランス調整、各種設定などフル機能が操作できるようにし、本体のツマミで選曲や音量などの通常の利用で必要な機能の操作ができるようにするつもりです。
エリーゼはオープン状態とクローズ状態で大きく音響特性が変るので、PC内のプログラムからオープンモードとクローズモードを切り替えられるようにして、サブウーファーのバランスとイコライザーで音質を調整します。イコライザーはPCのソフトイコライザーか、電子ボリュームチップにイコライザーを内蔵する物もあるらしいので、それを使うかもしれません。

この構成の成否はPICの部分と電子ボリュームですが、PICは使った事が無いという大きな問題が立ちはだかっています。
それと電源。クルマの12Vから各部品に必要な電圧を安定して供給しないといけません。特にCPUボードはACPIの絡みもあるので難しいです。

電気知識に乏しい私に実現できるか微妙なところです。
とりあえずこちらで勉強してみます。

車載PC Player - 4 - クロスコンパイル環境

Car, PC & Software, PC Player for Car Audio No Comments »

ZBOXNANO VD01はコンパイラを動かすにはちょっと向かないPCです。CPUは遅いしSSDは酷使したくないし。
そこで、別のPCでコンパイラを動かす必要があるのですが、手元にあるのはメインで使っているWindowsXPと、Windows7だけです。パワフルなLinux環境のPCがあれば簡単な話ですが、ここはWindowsでvoyage用の実行ファイルを作る事にします。

WindowsでLinuxの実行ファイルを作るには、クロスコンパイル環境が必要になります。

GCCをクロスコンパイル用に設定してWindows上でコンパイルして利用する

考えただけでも面倒な作業になるので却下。

voyageにrshサーバを立ち上げて、Eclipseからrshでコンパイルを行わせる

そもそもVD01が遅いからクロスコンパイル環境を作ろうとしているので却下。

windows上の仮想PCでLinuxを動かし、eclipseからrshでコンパイルを行わせる

これしかありませんね。クロスコンパイル環境と言えるのか微妙ですが、実行ファイルがWindowsPC上で作れればOKです。

まず、仮想PCはフリーで使えてLinuxに対応しているvmware playerを使用します。本家サイトからダウンロードしてインストールします。

仮想PCに入れるのはvoyageに近い物ということでDebianを選択。こちらも本家からisoイメージをダウンロードしてvmwareにインストールします。
環境はコンソールモードのファイルサーバを選択して、ssh、C++の開発に必要なパッケージ、sambaクライアント、など使いそうな物を追加しました。

vmwareにはホストPCのファイルにアクセスするための仕組みがあるのですが、上手く動作しなかったのでsambaクライアントを使ってDebianからWindows上の共有ファイルをアクセスするようにしました。これで、Windows上のプログラムをDebian上でコンパイルする事が出来ます。

あとは、Eclipseの環境設定とかrsh環境設定です。でもEclipseのCDTは使いにくいから、プログラムはVisualStudioで書くのでmakefileだけでも良いかも。どうせ連携できないし。

こちらを参考にとりあえず書いたmakefile。懐かしいな

CC=g++
LD=g++

PROJECT_DIR=(Windows上の共有ファイルをマウントしたディレクトリ)
WORK_DIR=(作業場所)

SRC_DIR=$(PROJECT_DIR)src
SRCS=$(shell cd $(SRC_DIR); ls *.cpp)
BUILD_DIR=$(WORK_DIR)debug
TARGET = (出力ファイル).so
OBJS = $(SRCS:.cpp=.o)

INCLUDE=-I$(PROJECT_DIR)include
CFLAGS=-c -D_GCC -DLINUX -DEXPORTS -DUNICODE -static -MMD -MP
LDFLAGS = -shared

all : $(BUILD_DIR) $(patsubst %,$(BUILD_DIR)/%,$(TARGET))

$(BUILD_DIR):
mkdir $(BUILD_DIR)

$(BUILD_DIR)/%.o : $(SRC_DIR)/%.cpp
$(CC) $(CFLAGS) -o $@ $<

$(BUILD_DIR)/$(TARGET) : $(patsubst %,$(BUILD_DIR)/%,$(OBJS))
$(CC) $(LDFLAGS) -o $@ $^

clean:
rm -fr $(BUILD_DIR)

.PHONY: all clean



   Designed By:  Sadh Web Directory     Sponsered By:   BrainBloggers  & Linkature

Entries RSS Comments RSS
ホットワード Do It Yourself スピーカー 作る リフレッシュ
割引クーポンまとめ情報 - クー割