Raspberry Pi Zero W のPWM サウンド出力とノイズの改善 続きの続き(完結か?)

話があっちこっちいくけど、日常的に気になってやってることを順番で書いてるとこうなるのよね。今日は、PAM8403の話。

色々やって、秋月のスピーカー購入ついでに、持ってなかったパーツ類を買い揃えてRaspberry Pi Zero WのPWMサウンド出力に再挑戦しました。

と、ここまできて、こんなページを見つけていました。
曰く、
The Raspberry Pi is able to create audio using a pair of GPIO pins. The problem is that the audio is badly distorted. The low notes are too low and cause the speaker to rumble and sound blown, and the high notes have lots of unwanted noise. To assist with removing these noises, this audio filter circuit was added to the original Raspberry Pi.

低音が低すぎて、高音はノイズが・・・ということですね。
で、これの対策で、元々のPWM出力記事を書いてくれたところの回路設計で、ハイパスフィルターやローパスフィルターが実装されている。
なるほど、なるほど勉強になる。

前のボッ ボッボッボッボッは、Raspberry Pi からの出力は低音が低すぎたので音割れしてたと考えた方が良いのかな。
ではフィルターが必要だね、と、

行ってきました、秋月電子とaitendo

通販で買った方が安いじゃん!って結果はさておき、お店に行くのもイベントで、久しぶりの秋葉原を満喫しながら闊歩してきましたよ。

aitendoで抵抗とコンデンサ他、少々。
秋月電子で、スピーカーとaitendoになかった値の抵抗。

さらに、あきばお~で、お土産に350円のMP3プレイヤーを2個買って帰った、

さてさて、部品も揃ったのでRaspberry Pi Zero用の出力回路を作成して音を出してみた。
すると・・・


低音での音割れ発生タイミングが最大ボリューム側に移動・・・したと思う。

ちょっと音を大きくしてもボッ ボッボッボッってのはしなくなった。
さらに、先のページにあったようにPAM8403の出力に抵抗を入れると、Raspberry Pi
 Zero W本体のノイズを表現しなくなったので超ベスト。

と、勢いに乗ったところで、PAM8403のアンプを使った工作を開始。

本体ケースと、それに合わせてカットした1枚10円程度の中華基盤。








 カットした基盤に部品を固定していく。
 ケースへの穴あけを試行錯誤しながら配線。
何度もハンダ付けをし直した記憶がある。







で、これが完成形。
結局、記憶とGoogleだよりで完成まで6時間かかった。






終わり:
Raspberry Pi 関連のノイズは、 自分の耳ではほぼ解消できたと思ってもよいかもと思える状態になっているね


自作スピーカー事始め、そして焼失

前回書こうとしていた、ダイソーの300円のUSB電源スピーカーを使った自作スピーカー作りをする話。子供がやりたいといったので一緒に作りました。

2個目のUSBスピーカーを使います。スピーカーボックスは、スピーカーが入っていた箱をそのまま使うことにしました。箱捨てないでおいてよかったw
箱のサイズは、82x130x66mmなので、0.7L
60x70x50mmで0.2Lぐらいなので 約3倍の大きさになります。
低音はボックスの大きさと聞いたので、紙ボックスでも期待できるかもしれません。


ボックスのデコレーション用に木目のシート を使って、まずは箱作成。
こんな感じに出来あがありました。
これにスピーカー用の穴をあけます。
直径52mmです。
USBスピーカーを分解しました。
開けてちょっと驚いたのが、スピーカーの枠の色が違うこと。
左右の音大きさが微妙に違ったけど、もしかするとこのせい?
とりあえず、お試しなのでこのまま使っていきます。
元々スピーカーについていたアンプとケーブルでは長さが足りない感じなので、ケーブを外して、別のケーブルを付けます。ここも余っているものを使って+側を赤色でなくて黄色を使っています。
とりあえず、スピーカーを載せるとこんな感じ。
左右の色の違いが気になる。
ところで、箱のカットを子供にお願いしていたら、箱の内側の耳を切り落としたので、右側のボックスの蓋が落ち込みました。まぁ修理すればよいだけなのでw



と、ここで、子供がアニメを見るためにリビングへ移動してしまいました。
いったん、制作を中断します。

で、一人で部屋にいて、むき出しになったスピーカーや基盤を見て、あれこれ試したくなってきました。
例のPAM8403アンプ の出力をこちらに入れたらどうなるかな?
あっちの方が出力大きい感じだから音が変わるかな・・・

と、出力をアンプの出力端子にあててみたところ・・・・煙が・・・・

焼けました。300円スピーカーのアンプのチップが燃えて穴が開いてしまいました。orz
接続を戻して使ってみましたが、右側からは音が出ません。Ω\ζ°)チーン


 下は、穴が開いた写真。(^^;;
まぁ、色々と素人なので、これも仕方がないかと・・・
 こっちのアンプの電源が入った状態だったからかな、

続きは、次回



 

オーディオの魔力により簡易自作スピーカー作成へ

アンプとスピーカーのことをやりだしてから、元の本題であるハロ作成が滞っている。というか、手につかない。
なんかあれば、YouTubeで、ステレオのビデオを見て聴いている。
いい音ってやつは、たぶん素人でもわかるんだろうな。

前回までの試行を振り返ると、
アンプを組み込もうとか思っていて試していたスピーカーは、妻が独身の時に使っていたKENWOOD AS-5という今やカタログも記録もほとんどないスピーカー。ずっとヘッドホンだったので使っていなかった。これがどうやらもフルレンジだけど低音が出ない。元の内蔵アンプではほぼ壊滅、前回までのPAM8403でちょっと低音が出始める感じ。そこで、音量を上げると低音側でボッボッボッボッボッボッボッボッ。と音が鳴りだす。中高音だけのときは音量を上げてもこんな音はしない。
つまり、低音で音割れしているのかな。


とりあえず、元の電源アダプタが異常に大きくてコンセントボックスを圧迫するし、12V1Aとか、意外と電力食い?PAM8403だと5v0.5A未満?(USB電流計で測定できない数値)なので置き換えても問題が無いかな、と他のことしながらYouTubeの理想の音とか感涙の音とかをヘッドホンとスピーカーで聞き分けること2週間。

で、流れ的に色々Youtubeとかでスピーカーを見ていると、ダイソーの300円USBスピーカー、秋月電子で2個500円のスピーカーとか目につく。おそらく、秋月のスピーカーとFOSTEXのスピーカーボックスは近いうちに買うと思う。
そして、その前に試しにとダイソーの300円のUSBスピーカーを買ってみた。

うん、USB「電源」スピーカーです。

とりあえず、音的にはレビューの通り、「使える」ので子供のPCに繋いであげた。そして、お遊び用にもう一式を買って、箱を変えてみようとチャレンジをした。

おっとっと、文章長くなってきたので、 今日はここまで。

 次はこれのお話でも。




PAM8403アンプをもう少し調べてみた

PAM8403アンプで音が~って話がありましたが、ちょっと違う話。

この基盤のスピーカー出力のシルクパターンは、PAM8403のデータシートの記載と+-が逆になっていることは確か。

ただし、出力側がステレオジャックになると、このままだとモノラルになるとのこと。
こちらの「 ラジオ、ときどきラーメン2」さんのブログが参考になります。

このような場合は、ブログの通り、プリントのシルクパターン通りにするとステレオになるとのことで、
実際実験したら、少しは音が混ざりますが、左右で聞き分けるぐらいの音量にはなった。

なので、出力側のLRの+ーが分かれているなら 、シルクパターンと逆。
ステレオプラグのような形で繋ぐ場合は、シルクパターン通り、ということになる。

ということで、左右に分離した環境で、ラズパイで再チャレンジ。

結果は、
全然ダメでした。
間にアンプをれなければ、大丈夫なんだけどなぁ。



これだと、音量を上げればスピーカーでも行ける。音は割れるけど。

しかし、何か大事なことを忘れているのかもしれない・・・って、素人にはもうこれ以上は無理っぽい・・・
どんどん深み入っていきそうで嫌だなぁww




開発用パーツの続きの続き

PAM8403のアンプを使うためには、ハンダ付けしなくちゃいけない。
他にもハンダ付けしたいものや色々あったけど、やけど注意、火事注意を念頭にすろと、ハンダごてを出して使うこと自体がイベントになって、個人的には、沢山をまとめて実施しましょうとなっている。

という感じで、溜まっていたやりたいことを一気に片づけ走ったのだけど、今回使ったハンダごてがこれ。上海問屋で買ったUSBハンダごて、1000円しなかったかな?



とっても良いです。熱量は少し足りないかもしれないけど、自分の扱う分には十分。
何しろUSBから給電だし、本体スイッチのON/OFFで、温まるのも15~20秒程度と早くてOFFも簡単ににできる。こて先は掃除しないように書いてあるので特殊加工してあるのかな?つけっぱなしでも焼けた感じがしない。

あ、どこかのサイトのレビューにあるような、ボタンを押している間だけ発熱するタイプではなくて、ボタンでOn/Offだから、物が違う。最初は気づかなくて押しっぱなしで発熱せずに悩んだw

惜しいところは、本体が軽くて電源ケーブルのうねりに負けて取り回しづらい時ある。特にテーブルの上に置くときに、ケーブルの形状記憶に負けて向きが変わったりするのが怖かった。

そして、ハンダづけを一気に片づけるための相棒を今回作った。
それがこれ。初登場、息子の机での撮影。



板2枚とクリップ2個、釘4個で作った、固定台。
こんなのでもある違うので、治工具の大事さが良くわかる。
※他の方の作例を真似させてもらいました。ありがとうございます。
沖縄電気鐵道-浦添線- さん
Penguin Craftさん   :こちらのコメントが自作する決め手でした


ハンダ付け祭りのとっかかりは、LEDランプの改造。
100均のLEDランプをニコイチする。
光量の弱い長い方と光量の強い短い方。短い方は接触不良で突いたりつかなかったりして壊れかけたもの。
これらを合わせて、長いのを一つ作る。
※これも他の方の作例を真似させてもらいました。ありがとうございます。
 
白いのに穴をあけるのが大変だけどねじ込んで完成(たぶんすぐに壊れそう・・・)






充分でしょ。
難点は、フレキシブルパイプが弱っていて、立てても負けてぐんにゃりするところかなw



で、勢いに乗って、アンプのはんだ付けや、いらない基板からの部品取りをやっていった。
 
最後に、このブログを書くのに、最初に書いたUSBハンダごてのことを書こうと、写真撮って、コテ先の情報も載せようと思った。
結果がこれ


そうです、中のニクロム線?を引っ張ってしまって元に戻せません。
そして、もうこのこて先は使えない事が確定です。

最後の最後にへまをしてしまった・・・・orz
ググったけど、このこて先は販売してないみたいなので、Amzonで似たものを注文、500円!
上海問屋より安いや。配送は2週間先だけどね~



Raspberry Pi Zero W のPWM サウンド出力とノイズの改善 続き

前々回届いた小っちゃなステレオアンプをラズパイに繋いてみよう作戦を開始。

いままでスピーカー1個だったから気にせずラズパイからも片系だったけど、いらなくなったPC用のサウンドカードから取り外したイヤホンジャックを使って、今回はLRどちらも繋いでみた。



LRの出力確認のためにヘッドホンで聞くと・・・・・・・音が大きい!!
あれれ!?って、今まで使っていたスピーカーに繋ぐと、まぁそれなりには聞こえる。

これが、ヘッドホンとスピーカーの違いなのか?確かにそれぞれ用に出力は違ったような記憶はあるけど、素人にはわからないw

でもヘッドホンで聞く分は、これでも良いかなぁ。ちょっとホワイトノイズが気になるけどね。
例の出力用の回路を組めばよいのかな?

アンプレスならそれが一番良いからね。
と、新たな発見は置いておいて、

で、小っちゃいPAM8403アンプに配線してみた。出力の+-が逆というので、逆に配線。

ラズパイとの接続は、こんな感じ。






電源入れると、ポップノイズ?がひたすらでかい!ボッボッボッボッボッボッとずっと大きい音で鳴っていて、音楽流しても止まらないというか、音がぶちぶち切れて音楽聞けないorz

色々配線変えたりしたけど特に効果なし。
どうもアンプのL入力側のノイズがひどく、あと、出力側のマイナスを外すとノイズは減るが音は極端に落ちる。
アンプの不具合化と、もう一つも組み立ててみたけど同じだった。

安いアンプだから不良品に当たったかもしれない。
そう思いながら、試しにスマホを入力に使ってみた。

すると。


ん!?

変なノイズが出ない!
音を大きくしてもきれいに出てくる。ノイズなし。ホワイトノイズもあまりしない感じ。
入力無いと、ブゥーって小さい音するけど、これはよくあるノイズの音の覚えがある。


ちゃんと動いてたんですね、アンプさんごめんなさい。


試行錯誤5時間ぐらいして、ラズパイからの入力時のみ、おかしいということになった。

状態としては、入力がラズパイの時は、・色々なノイズで
・アンプの発熱・ラズパイから5V電力供給をさせると、0.1A→0.9Aぐらいに急激に向上
・GND関係のケーブルをいじると変動が大きい
という感じ。まぁ使えない状態。

100均のアンプだと、何の問題もなく使えるんだけど、これは何が違うのだろう。
素人にはこれ以上はわからんです。

それこそ、出力用の回路をきちんと組んでおいた方がいいのだろうか、
そうすると、100均アンプやヘッドホンで聞いているときの音が良いことはどう片付くのだろう。

ハロに組み込むことを考えていたので、アンプのサイズは小さい方が良いけど、こうなると100均アンプを使うのがベストの判断だなぁ

このアンプは、普通にステレオ用にするしかないかな。







開発用パーツの続き

今回は、さらに届いたものを加えた質より量作戦の内容w

最初は前回画像をアップし忘れたブレッドボード。
10個で200円・・・ブレッドボードって、elegooのセットに入っていた大きいやつが初めてだったんだけど、大きすぎて小さいの欲しいなぁと探していたら、これがあって、似たようなもので最安値のものを買った。200円で送料無料だからね・・・


品質は良くわからないけど、ブレッドボードって背面がシールということに気づいた。
縦横に連結用の凸凹があるので、それで連結すると画像のような国旗もどきもできる。

すでに使ってる画像はアップしている通り、普通に使えてるのでこれは良し。
惜しむべきは、17穴なので、ラズパイを直接挿せないところ。挿せていたら最強だった。

次は、一番最近届いた基盤。
これも10枚で195円。10枚で150円ぐらいのがあったけど、評価が良くない感じがしたので、少しだけ高いのにしてみたww
結果は、今回画像を大きいものでアップしているので見てみてください。
パターンずれとか、物が違うとか、変なところに穴があるとか・・・間違い探しができます。

まぁ、この手の基盤の独特の匂いがしたり、 少し反っていたりするけど、気にしなければ使えそう。
150円位のやつは、下の画像の左上の2枚の写真がAmzonに載ってたかな。


さて、基盤も来たので、電子工作に必要な最低限のものは、コンデンサ類かな。抵抗はelegooのセットに大量に入っていたからね。
それほど高くないので複数容量のセット品を購入するのはできるけど、使わないものが大量に残るの嫌だなぁ。手近なところにあるボードを見ると、必要な容量の物って、大体決まってそうな感じもする。
また調べなきゃなorz



開発用パーツ類

ラズパイでの工作を始めているけど、7末から今までにいろいろとパーツを購入してきた。
昨日、新しいのが届いたので、備忘録的に残しておこうと思う。

最初はこれ、Arduinoのキット。
何を始めるにしても、部品を集めるのが億劫になるタイプなので、安くてまとまっているものがあると助かる。いろいろなものを吟味して、elegooのキットに決めた。
ブレッドボードとかワイヤとかもついているので、初心者には助かる。

普通にLチカもできる(ボード上にLチカを確認できるLEDがついてるのは後から知ったw)
Windowsから直接操作できるので、GPIO使った動作はラズパイよりも、Arduinoの方がわかりやすかった。ラズパイは直接繋げたけど、結局Wifi経由に落ち着いた。

上記とか、ラズパイ買った直後に注文したのがこれら。

人感センサ、音声検出センサが2個、Arduino Nano
Ardiono Nano は、500円以下という値段に釣られて購入。まだ動作確認もしていない。
あと、写真撮り忘れたけど、ラズパイのカメラ互換機も1000円で購入。
時々画像に出ている小さなブレドボードも格安で購入。
音声検出センサは、音声認識に必要だろうと、訳もわからず買ったもの。多分使わないと思う。

で、昨日届いたのが、これら。3W出力のパワーアンプ2個。と、おまけのLEDライト

100均のアンプとの比較。こんなに小さい。
組み込みサイズを小さくするのにも便利そう。 これは、10個入りのを注文しようとしていたのだけど値上がりしたので2個のにした。
でもまた安くなってるよ。買い時難しい。
しかし、昨日届いたけど、72時間テレビ見てたので、全然試せてない。
どれだけの音で鳴るんだろうね。

で、個人的には今回の本命のUSBの電圧・電流を図れるやつ。
200円以下でもちゃんと測れます。正しいかどうかはわからないけど、おおよそ合ってそう。

これでラズパイの電力など測定して、内蔵化の時のバッテリを計算できるかもw



juliusの文法辞書作成

前回で音声認識と出力まで行うことができた。
速度の問題は、ラズパイの性能問題が大きいので後回し。

今回は、音声認識の向上ということで、辞書作成に励みます。

参考にさせてもらったサイトは以下です。

Juliusの使い方(version 4.4.2 対応版)~ ラズベリーパイ研究室

Raspberry Pi3×Julius(読みファイルと文法ファイル)

どちらも、mkdfa をコピーしているところがあるので、ここを省かない方が良い。(未検証)

あと、yomi2voca.pl で読み用の辞書ファイルを作成することを記載しているところは、
utf8からeucjpへの変換をかけているけど、ここから下の文法ファイルを作成する際は、文字コードの変換はしなくても動作したことを、一応書いておく。
文法登録は、辞書ファイルと文法ファイルの二つを作成する。
単語登録のファイルを作成して、yomi2voca.pl で、読み方の変換を行ってから作成したらちょっと楽
ファイル名は同一であることが必要

$ cd haro
$ cat haro.voca
% TITLE
ハロ    h a r o
% WO
を      w o
% PLEASE
音楽    o N g a k u
検索    k e N s a k u
おはよう        o h a y o u
こんにちは      k o N n i ch i w a
おやすみ        o y a s u m i
元気    g e N k i
時間    j i k a N
時刻    j i k o k u
終わり  o w a r i
ストップ        s u t o q p u
消して  k e sh i t e
アイカツ        a i k a ts u
% NS_B
[s]     silB
% NS_E
[s]     silE


文法ファイルの作成
$ cat haro.grammar
S       : NS_B TITLE_ PLEASE NS_E
S       : NS_B TITLE_ NS_E
TITLE_  : TITLE
TITLE_  : TITLE WO

参考サイトは「S」の行が先頭の一つだけ。
この場合、「ハロ」と声をかけても、必ず後ろに「元気」とか「検索」とかキーワードが入ってしまう。試しに上記のようにしてみたら、「ハロ」は単体として認識できた。

各ファイルの作成を実施
$ ~/julius/julius-4.4.2/gramtools/mkdfa/mkdfa.pl haro

起動は、単純に辞書ファイルを作成した時と違うので注意。
$ julius -C ~/julius/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram haro -module

「ハロ」と言ってみた場合

<RECOGOUT>
  <SHYPO RANK="1" SCORE="-1939.878174" GRAM="0">
    <WHYPO WORD="[s]" CLASSID="3" PHONE="silB" CM="1.000"/>
    <WHYPO WORD="ハロ" CLASSID="0" PHONE="h a r o" CM="0.894"/>
    <WHYPO WORD="[s]" CLASSID="4" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

「ハロ 検索」
<RECOGOUT>
  <SHYPO RANK="1" SCORE="-2968.890869" GRAM="0">
    <WHYPO WORD="[s]" CLASSID="3" PHONE="silB" CM="1.000"/>
    <WHYPO WORD="ハロ" CLASSID="0" PHONE="h a r o" CM="0.964"/>
    <WHYPO WORD="検索" CLASSID="2" PHONE="k e N s a k u" CM="0.477"/>
    <WHYPO WORD="[s]" CLASSID="4" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

「ハロ 音楽」
<RECOGOUT>
  <SHYPO RANK="1" SCORE="-2288.977051" GRAM="0">
    <WHYPO WORD="[s]" CLASSID="3" PHONE="silB" CM="1.000"/>
    <WHYPO WORD="ハロ" CLASSID="0" PHONE="h a r o" CM="0.860"/>
    <WHYPO WORD="音楽" CLASSID="2" PHONE="o N g a k u" CM="0.958"/>
    <WHYPO WORD="[s]" CLASSID="4" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

「ハロ ストップ」
<RECOGOUT>
  <SHYPO RANK="1" SCORE="-2542.952393" GRAM="0">
    <WHYPO WORD="[s]" CLASSID="3" PHONE="silB" CM="1.000"/>
    <WHYPO WORD="ハロ" CLASSID="0" PHONE="h a r o" CM="0.944"/>
    <WHYPO WORD="ストップ" CLASSID="2" PHONE="s u t o q p u" CM="0.978"/>
    <WHYPO WORD="[s]" CLASSID="4" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

CLASSIDは、haro.vocaに記載した構文文字列の順番のよう。
これらをうまく使うと、2語以上の言葉もうまく制御できるだと思う。
それは次回で。

このあと、超気になるページを発見してしまった。非常に勉強になる。ここで使ってる声は良い!
Raspberry pi3をベースにしたAIスピーカをガッツリ作ってみた ~自作して分かった課題と対策~