キノコの自省録

日々適当クリエイト

IoT智絵里アラームを作ろうと思う(6) - デコレーション編

前回の続き。

ただの木箱では寂しいので、装飾を施します。

工程1 ニス

完全なる生木だったので、ウレタンニスを塗りました。実は結構前に塗りました。2度塗りしています。

f:id:kinokorori:20180304234418j:plain:w300

工程2 草

脚の土台に草を敷いてみます。100均(DAISO)で買ってきた人工芝です。

f:id:kinokorori:20180505172609j:plain:w300

接着には3Mの超強力両面テープを使用。本当に強力です。全くはがれません。敷いた様子がこちら。

f:id:kinokorori:20180505173937p:plain

右奥に出っ張っているのがスヌーズボタンです。箱手前の鳥型のオブジェは、100均(Seria)で買った画鋲です。Seriaはこんな感じのインテリアプッシュピンを結構種類取り揃えているみたいです。これは形の違う画鋲が4個ついて100円。うさぎのピンもあったんですが、歪んでいたので鳥にしました。

工程3 箱のロック

蓋が簡単に開いてしまって危ないので、何かしらの手段でロックします。マグネットロックを最初に考えたんですが、電子基板に影響与えそうなので見送り、ロック付き蓋止めは箱が小さすぎて収まらず。ということで、中央にリベットつけて、蓋の両端をから紐でロックする方針にしました。

リベット代わりに使用したのが先ほどの画鋲です。紐にタコ糸を考えたのですが、あまりにも変なので、チェーンに変更。こんな感じです。

f:id:kinokorori:20180505174954j:plain:w400

f:id:kinokorori:20180505175301j:plain

チェーンは100均(CanDo)、留め具(真鍮ヒートン)は東急ハンズで1袋120円くらいで購入しました。チェーンは買った状態では長すぎたため、適当にカットして使用しています。

工程4 スヌーズボタンのボタントップ変更

ボタンが思いっきり上に出ているのは変なので、100均(DAISO)で買ってきた小型のうさぎのぬいぐるみを接着。ボタントップに3Mの超強力両面テープを使用。

f:id:kinokorori:20180505175917j:plain:w300

ぬいぐるみ単体の写真撮り忘れましたが、この後登場します。

工程5 花を接着

草だけでは寂しいので、花を敷きます。花も適当に100均で買った造花です。どこで買ったか覚えてませんが、100均なら種類が違えど、大体どこでも売ってます。

f:id:kinokorori:20180505180253j:plain

先ほどの花を適当にカットして、ドリルで土台に穴を開けて、グルーガンで花を接着という作業を繰り返します。

f:id:kinokorori:20180505180306j:plain

あ、ちなみに先ほどのスヌーズボタンのうさぎはこれです。

最終版

今のところの最終形態はこちら。

f:id:kinokorori:20180505180838j:plain:w500

うーん、少し花が寂しいですね。前面が空いているのは、ちょっと今後拡張を考えてのことなんですが。まあ少なくともIoT機器には見えないでしょう。個人的には、「私機械です」みたいな外観ってあんまり好きじゃないので……

全体像はこちら。

f:id:kinokorori:20180505181636j:plain:w500

残るはソフト

実はソフトも大体完成していて、この段階でもうある程度アラームとして動いています。自分はソフト屋な分、特に迷いもなくサクサク作ってしまうので、あ、終わったみたいな感じです。そのうち記事にします。

IoT智絵里アラームを作ろうと思う(5) - 電子回路実装編2

前回の続き。

スピーカー・アンプ回路やり直し

スピーカー、アンプ回路ですが……

  • どこか接触が緩いのか、音声が途切れ途切れになることがある
  • 立ち上げると、プツプツノイズが断続的に発生する
  • トランジスタのベース電流を一度カットしないと再生できない
  • やり直ししすぎて実装が意味不明
  • スピーカーのワイヤーが長すぎて邪魔
  • 音声ノイズ対策用コンデンサの組み合わせがイマイチ

ということで、やり直しました。。。

やり直した基板はこちら。やり直しに加えて複雑な回路というわけでもないので、割とすぐ実装できました。これで上記問題はほぼ解決。

f:id:kinokorori:20180505124234j:plain:w600

ただ、突入電流が弱いのか、一度MuteをOn(トランジスタのベース電流をカット)しないと、一発目が再生できないという問題は残りました。オシロで色々チェックすると、ベース電流が足りてないような感じがします。時折、電圧がガクンと落ち込みます。むむ。今回利用したトランジスタは、単に手元にあったという程度で、あんまり深く考えずに使ってます。まさかこんなことになるとは。

とはいえ、再生時以外はMute状態だし、特に問題はないので今回はこのまま。

ノイズカット用コンデンサは、22p, 0.1u, 33uの組み合わせです。これでほとんどノイズが聞こえなくなりました。

スイッチ類やり直し

いろいろグネグネやっているうちに骨折しました……。

スイッチ(スヌーズ+アラームOn/Off)側の片足に220Ωの抵抗を直接はんだ付けして、熱収縮チューブで覆っていたのですが、思いのほかこれが邪魔で、ケーブル同士が狭いスペースで喧嘩しあっていました。そもそもワイヤーも長すぎて邪魔ということもあったので、一度完全にやり直し。

スイッチ受け用のポスト基板を作って、スイッチに圧着したXHコネクタと接続するようにしました。これで骨折事故は防げる見込み。微妙に邪魔だった抵抗も、この基板上に実装。

電源やり直し

ラズパイ用電源のやり直し。前はベース付きポストにワイヤーをはんだ付けして中継していたのですが、これだと弱すぎてすぐ骨折してしまいましたので、方針変更。USBのワイヤーが細すぎるという問題もあります。

そこで、USBケーブルを、圧着コネクタで繋ぐか、DCプラグをくっつけるか迷ったのですが、USB AにDCプラグは変かなと思い、ワイヤーを圧着することにしました。100均で買ってきたUSB Aは線が細すぎる(上になんとシールドがない!)ので、USB A組み立てキットに、そこそこ太さのあるワイヤーをはんだ付けして、コネクタを圧着しました。


uxcell USB2.0プラグ USB 2.0 タイプAオス 45 x 17 x 9mm  4 ピン DIP 15個入り

ラズパイ側から伸ばしたコネクタもコンタクト圧着なので、ベース付きポストを2つくっつけたジェンダー変換基板を間に挟んで差し込むようにしました。 これで骨折事故はだいぶ防げると思います。

最終形態

以上の修正を加えて、箱に収めた写真がこちら。

f:id:kinokorori:20180505124548j:plain

箱右上部にくっついているのがスイッチ用ベース付きポストを取り付け、左奥が電源のジェンダー変換基板。

こうしてみると、結構隙間がありますね。取り付け用の機構を作って、機構ごとスポっと収めるようにしておけばよかったかも。

IoT智絵里アラームを作ろうと思う(4) - 電子回路実装編

前回の続き。

前回、箱に納まるよう部品を色々調達したので、今回は粛々と実装。

とりあえず、最終的な回路はこちら。 この通り、回路自体はかなりシンプルなので、はんだ付けと圧着を間違えないようにやるだけなんですが、思った通りに動かないとはままあることで……。

f:id:kinokorori:20180414145559p:plain:w600

スイッチピンはPullUpで、GNDに落としてOnとしてます。3.3Vで50mA以下という制約から、割と一般的な220Ωを採用しました。ちなみにラズパイのPullUpの内部抵抗が1.3KΩくらいらしいです。

D級アンプのPAM8403は、チップそのものではなく、モジュール品です。10個220円で買いましたが、HiLetgoが日本法人作った影響か、すぐ届くようになった代わりに値段が上がりました。

HiLetgo PAM8403 2 * 3W クラスD ミニ デジタル パワー アンプボード AMP 2.5-5V入力 (10個セット)

アンプがぷつぷつ言う問題

今回一番困ったのが、アンプがプツプツ音を出して、再生してくれないことが多い、という問題でした。波形をPWMから送っても、プツプツ言っている間は全く再生せず、圧着ハウジングの辺りを下に引っ張ると直って再生したりと、なんだかよくわからない現象。

どうもパワー切れを起こして、不安定になっている様子。上の回路では、47μFのケミコンが実装されてますが、最初は10μFで、1つしか差してませんでした。ということで、47μFのケミコンを追加。

さらっと書きましたが、前回のエントリの通り、小さい基板に実装しなければならないので、修正は容易ではありませんでした。しかも結構原因がわからず、コンデンサを付け替えたり、配線やり直したりと。

ただ、ケミコン追加してもまだ少し不安定で、一度ミュートをOn(ベース電流を流さない)にしないと再生が安定しません。うーん、ブレッドボード上では何の問題もなかったので油断してました。もう少し大きめのコンデンサを実装したいところですが、縦にも横にも隙間がないため断念。もう少し早く気づけば手の打ちようはあったのですが。ただ、とりあえず起動時にMute Onに変更するからまあ良しとします。

電源用USBケーブルの芯細すぎ問題

RaspberryPiはご存知の通りMicroBで給電できますが、Microといっても意外とコネクタはそこそこ大きさがある上、硬くて場所を取ります。MicroBコネクタが通るよう箱に大穴を開けるようなことをあまりしたくなかったことと、MicroBは引っ張ると抜けやすいので、MicroBをカットして圧着コネクタ(XH)を装着することにしました。

ということで、百均でTypeA - MicroBケーブルを買ってきて、MicroB側を切断、圧着端子のポスト側にはんだ付けをしたのですが、芯がめちゃくちゃ細いです。ちょっと引っ張っただけでポストから取れてしまいます。

対策は現在検討中。策はあるので、どれにしようかというところ。

その他

ラズパイはソケットを上から被せる格好になってます。そうすると、ソケットの逆側(要するに天井)からワイヤーを引っ張る必要があります。結構面倒くさいです。

確認したはずなのに、トランジスタの足を間違えるのはお約束……。

完成品

こんな感じになりました。

f:id:kinokorori:20180414222321p:plain:w500

右側のコネクタはスヌーズとアラームスイッチに、左側のコネクタは+5Vに繋がります。スピーカーモジュールも、ラズパイ側と着脱可能なように、XHコネクタで接続しています。

別に何の変哲もない圧着の様子をパシャリ。エンジニアのPA-09です。

f:id:kinokorori:20180321145432j:plain:w550

ということで、一通りハード系は完成といったところ。。。疲れました。もう少し取り付け作業を行って、残るはソフトとデコレーション。

IoT智絵里アラームを作ろうと思う(3) - 電子部品調達編

前回の続き。

前回紹介した通り、中に実装する回路は大まかにこんな感じ。

f:id:kinokorori:20180324162958p:plain:w250

回路自体はかなりシンプルなものの、これを百均の木箱に取り付ける部品選定に難儀。

f:id:kinokorori:20180304152939j:plain:w300

箱が小さい

この箱、外見はそこそこサイズあるように見えるんですけど、中は結構狭いです。

f:id:kinokorori:20180328220513j:plain:w400

実測すると、W87mm x D61mm x H22mmでした。Cタイプのユニバーサル基板より、一回り大きい程度のサイズです。 紙で表現するとこんな感じ。

f:id:kinokorori:20180328221111j:plain:w400

幅はそこそこありますが、奥行きと高さが厳しいです。この中に、

  • RaspberryPi Zero W
  • RaspberryPi Zero W用ピンソケット取り付け基板
  • RaspberryPi用電源+5Vケーブル
  • プッシュスイッチ (スヌーズ用)
  • アンプ回路 (ミュート含む)
  • スピーカー
  • トグル系スイッチ (アラーム自体のOn/Off)
  • 抵抗、コンデンサいくつか
  • ワイヤー、圧着コネクタ

を頑張って配置します。各モジュールを全部直はんだ付けしてしまえば省スペースになりますが、それするとにっちもさっちもいかなくなるので、圧着コネクタも必須です。

部品

プッシュスイッチとトグル系スイッチ、スピーカーは、少なくとも箱に入るサイズじゃなきゃ困るので、結構いろいろ買いました。電流はほとんど流さない(3.3V 30mA)ので、本当にサイズ次第です。

On/Offスイッチ

On/Offスイッチなので、スライド、ロッカー、トグルあたりが対象ですが、On/Offが目で見て分かりやすい方がいいので、ロッカースイッチを中心に探しました。この画像はボツ品です。理由はサイズが箱に対して大きすぎる、というだけです。一応ギリ嵌らなくはないものの、あまり大穴を開けると強度が心配。たぶん、ちょっと力が入るとボキッといきます。

f:id:kinokorori:20180328230930j:plain:w300

最終的に選んだのは、15mm x 10mmのスイッチ。結構小さめです。たぶんこれと同じだと思います。

プッシュスイッチ

プッシュスイッチは天板につけるので、サイズは結構余裕がある……と思いきや、底が浅いということを改めて気づかされる事態に。画像はよく見かけるゲームスイッチです。今回は全部採用見送り。右と左は高さが大きすぎるため、蓋が閉まらなくなります。中央も、ピンを曲げればギリ入る程度。ただ、流石に径が大きすぎて、超大穴が必要になってしまいます。

f:id:kinokorori:20180328232755j:plain:w400

スヌーズ用ということもあり、ある程度のサイズがあり、かつ押しやすさ加減が丁度いい品じゃないと、あまり芳しくありません。いろいろ押して回った結果、最終的にマル信無線電機 MS-370M(緑)にしました。割と押した感じが良く、高さもなんとか納まります。縦横が少し小さめですが、そこは上に何か置いて、見かけを大きくする予定。

f:id:kinokorori:20180328233621j:plain:w120

スピーカー

スピーカーも、小さい方が当然取り付けが楽なのは確かなんですが、音が小さかったり割れたりすると、今度はアラームとして意味がなくなってしまいます。色々視聴してみた結果、φ2.5cmでギリ音が許容レベル、かつこれ以上大きいと取り付けが厳しいというところで落ち着きました。

f:id:kinokorori:20180329000701j:plain:w220

ただ、これ磁石が後ろに出ているため、取り付けが厳しい中で絶縁が心配ではあります。表面実装スピーカーでもよかったかもしれないなどと思っています。私は音響波形の解析は結構経験多いんですけど、スピーカーに関する知識はかなり乏しいです。他に良いのがあったら、もしかしたら変更するかも。

RaspberryPi Zero W用ピンソケット取り付け基板

ラズパイのピンにはんだ直付けする実装は流石にナシなので、ユニバーサル基板に2x20ピンソケットを取り付けて拡張します。ユニバーサル基板はフリスクサイズのこれ。

ユニバーサル基板 56.5×32mm: パーツ一般 秋月電子通商 電子部品 ネット通販

そしてまたしても高さの問題が浮上。ラズパイ+ピンソケ付きユニバーサル基板を合わせると、天井まで5mmしか隙間がありません。なので、ユニバーサル基板に実装できるのは、せいぜいワイヤーか1/4W抵抗程度、ケミコンは寝せないと蓋が閉まらなくなります。EH/XHコネクタですらサイズオーバーになります。厳しい。

アンプ回路

基本はD級アンプPAM8403を実装したモジュールを使用します。10個220円で買いました。今は倍以上しますね。それでも10個550円。これにPWMと5VをRaspberryPiから入力して使います。

HiLetgo PAM8403 2 * 3W クラスD ミニ デジタル パワー アンプボード AMP 2.5-5V入力 (10個セット) [並行輸入品]

これは薄べったいし、あまりサイズも大きくないので、ラズパイの隣に配置できそうな感じ。こちらは高さは問題ないでしょう。たぶん……。

配置確認

天板に穴を開け、スヌーズスイッチの嵌り具合も確認。

f:id:kinokorori:20180329001326j:plain:w300

ゾリゾリ

部品を箱に仮配置して、まあ行けそうかな、というところ。次回はたぶん電子回路作成編。

IoT智絵里アラームを作ろうと思う(2) - ソフト・ハード概念設計編

前回の続きです。智絵里フィギュアの土台に電子回路入れて、目覚ましを作ろうプロジェクト。

目覚まし概要

目覚まし時計なので、時計表示やアラーム設定ができるディスプレイ、操作ボタンなどなど必要かな、と考えたのですが、 欲しいのはアラームであって、時計ではないのです。別に現在時刻を見る必要はないし、何らかの手段でアラーム時刻が設定できれば良い。そして、設定した時刻にアラームが鳴れば十分です。へんてこなボタンがゴテゴテついたら嫌なので、できればバッサリいきたい。

ということで考えたのが、スマホから設定できればいいや、というインタフェースです。どうやってアラームを設定するか?というところですが、いくつかの実現手段があります。BLE通信する、カメラで2次元バーコードを撮らせる、Webサーバを立てる、赤外線通信(これはiPhone側にないですが)、音声認識など。今回は一番楽で拡張性も容易なWebサーバでやります。RaspberryPi ZeroWを中に入れる予定なので、外部のどこか適当な場所にサーバを立てるのではなく、目覚まし自体をWebサーバにしてしまいます。RaspberryPiは家のWiFiに繋いでしまえば、同じネットワークドメインなら自由にアクセスできます。

要するに今流行りのIoT機器ということですね。IoT智絵里アラーム。

物理的なブロック構成は、以下のような感じになります。Webサーバはなんでもいいんですが、割と使い慣れたNode.jsでやります。

f:id:kinokorori:20180324162831p:plain:w600

目覚ましのペリフェラル

ディスプレイと、アラーム設定用ボタンは要らないですが、かといって全くインタフェースが要らないかというと、それも困ります。スヌーズボタンと、アラームOn/Offボタンくらいはないと、アラームとして機能しません。もちろん、スピーカーとアンプ回路も必須です。

以上を踏まえた最低限必要な機器構成は、以下のようになります。一見シンプルですが、ボタン2つにスピーカーと、大物が3つあるため、箱のどこに取り付けるか考える必要が出てきます。なお、図のピン配は適当です。

f:id:kinokorori:20180324162958p:plain:w400

ということで、これを前回の箱の内部に取り付けていきます。

f:id:kinokorori:20170906212353j:plain:w300

フィギュアに電子回路を取り付けて目覚ましにする

フィギュアやプラモ(特にガンプラ)ってエレクトロニクスと抱き合わせると、もっと面白く、表現豊かになるんじゃないかなと、前々から漠然と考えてました。といっても、実際に駆動させるとなると、それは材料からやり直しになる上、造形師の協力が必要なので、流石にそこまでのことはちょっと厳しいですが。ちなみに、この分野に真剣に取り組まれている、スピーシーズという会社があります。私はこの手の機構設計は全くさっぱり知識がないものの、興味はあります。ちょっとやってみたい。単純に面白そうだし、夢がある感じ。

HOME of Speecys Kichijoji Design Studio

今回は、もっと難易度を落として、フィギュアの土台をデコるついでに、土台の中に電子基板を入れて、ちょっとした機能を追加してみようと思います。それでも、結構面白い試みになるんじゃないかと思ってます。

台座って自作している方が多いみたいで、探すと多数見つかります。アクリル台座が多い印象。

何を作るか

とりあえず土台を何かの箱に差し替えて、中に基板を入れます。どういった機能を実装するかですが、今回は目覚まし機能を入れようと思います。目覚ましなら、キャラクターボイスが生かせますし。

対象と台座

この智絵里フィギュアを改造します。

あれ、今売ってるのって、アクリル台座なんですかね?手持ちとちょっと違います。しかもなんか値段が上がってますね。。。それはさておき、智絵里の見た目で、智絵里ボイスの目覚ましを作るということです。こりゃすげえ。

手持ちの台座は至ってシンプル。ABS樹脂ですかね?取り外しも簡単。中央の穴に足の先を挿入して立たせる感じです。

f:id:kinokorori:20180324140502j:plain:w300

代わりの台座は100均で買った、この木箱を使います。キャラ的に木材の方が合うかと思ったので。この中に回路を取り付ける予定。

f:id:kinokorori:20180304152939j:plain:w300

台座の穴あけ

採寸した足の穴を開けて、ヤスリかけて終わり。簡単です。穴は彫刻刀で開けました。ドリルや糸鋸使うなど、いくらかやり方がありますのでお好みで。

f:id:kinokorori:20170906211051j:plain:w300

ばっちり立ちます。鉛筆や削りの汚れがありますが、上にカバーかけてデコる予定なので無問題です。

f:id:kinokorori:20170906212353j:plain:w300

次回はソフトウェア・ハードウェアの設計のお話になると思います。

RaspberryPiでGPIO(I2S)を使ってマイクから録音する

RaspberryPiで録音方法について調べると、大抵USBマイクの紹介記事が見つかります。USBマイクは楽ですが、USB-Aが必要なのでRaspberryPi Zeroの場合はmicroB→HostA変換する必要がありますし、そもそも場所を取るので取り付けに困ったりします。特に、小型化したいとか、基板上に配置したいといった場合に苦労します。

ということで、GPIOで録音する方法を紹介。

方法

RaspberryPiはA-Dコンバータを積んでいないので、デジタル信号を入力する必要があります。音声信号のデジタル入出力は、I2S、PDM、TDMなどがあります。I2Sが一番メジャーで、RaspberryPiもI2Sをサポートしています。

そんなわけで、I2SでRaspberryPiに入力して録音する方法を模索します。

マイクの調達

まずはI2SでRaspberryPiにマイク音声を入力するって、どんな部品を調達すればいいいんでしょう?というところから。”I2S RaspberryPi”とかで検索すると、お値段の高いハイレゾDACに関する記事が大量に見つかります。いや、そっちじゃないんです。DACじゃなくてADCが欲しいんです。

それはさておき、I2SをOutputにするADCは例えばこんなものがあります。

ADAU1977 データシートおよび製品情報 | アナログ・デバイセズ

このADAU1977は、RaspberryPiに標準でDeviceTreeにドライバが登録されています。ただ、チップ単体販売なので、基板を作らなければならないので非常に面倒くさいです。私も扱ったことがないので、たぶんできるよとしか言えません。

しかし、世の中には、I2S出力するデジタルマイクが存在したりします。便利な世の中になったものです。手に入りやすいところではADMP441, SPH0645LM4H, ICS-43432あたり。ADMP441なら秋月電子DIP化キットが売っているので、今回はこれを使います。1つ750円。

ADMP441 DIPモジュール: パーツ一般 秋月電子通商 電子部品 ネット通販

SPH0645LM4Hにもスイッチサイエンス製のモジュールキットがあります。こちらはAmazonでも購入可能。


SPH0645LM4H搭載 I2S MEMSマイクモジュール

ADMP44 DIP化キットはんだ付けの注意

マイクの開口部が実装面の裏にあるので、ピンヘッダの装着面に注意しましょう。この通り、ちゃんと説明書に書いてあります。が、私ははんだ付けしてから気づきました……。

f:id:kinokorori:20180224212215j:plain

ピン配置

ピンの配置は次の通りです。直接挿すだけなので、難しくないです。L/RはGNDの場合は左チャンネル、+Vの場合は右チャンネルになりますが、1つしかマイクがない場合はどのみちモノラルになります。

電源電圧は1.8V~3.3Vなので、3.3Vピンに接続しましょう。動作時の消費電流が1.4mAなので、余裕で給電可能です。

f:id:kinokorori:20180225014458p:plain

RaspberryPiの設定(ソフト)

上記の通り、I2SのGPIOピンは18,19,20(,21)を接続し、ALT0で利用します。ただし、ALT0でI2Sを有効にするだけでなく、デバイスドライバも必要です。しかし、RaspberryPiのデフォルトでは、I2Sマイクで利用可能なモジュールが存在しません。

ただ、カーネルソースにはモジュールがあるので、カーネルをビルドしてカーネルモジュールとくっつけて利用する説明が数多く存在します。

この辺とか。

GitHub - nejohnson2/rpi-i2s: Using the ICS43432 MEMS microphone on a Raspberry Pi with i2s

調べていると、Device-Treeを利用した、もっと簡単な方法を公開している人がいましたので、今回はそちらを紹介します。

GitHub - gtalusan/admp441-rpi: ADMP441 for the Raspberry Pi

手順は書いてありますが、少し補足説明を加えておきます。

kernelフォルダのビルド

git cloneして、kernelフォルダの中身をビルドします。

$ git clone https://github.com/gtalusan/admp441-rpi.git
$ cd admp441-rpi
$ cd kernel
$ make
$ make install

おそらく、make時に以下のようなエラーが出ると思います。

make -C /lib/modules/4.9.59+/build M=/home/pi/admp441-rpi/kernel modules
make[1]: *** /lib/modules/4.9.59+/build: No such file or directory.  Stop.
Makefile:4: recipe for target 'all' failed
make: *** [all] Error 2

このエラーが発生した場合、

$ sudo apt-get install raspberrypi-kernel-headers

を実行してみてください。それでも解決しない場合、おそらくraspberrypi-kernel-headersでインストールされるバージョンと、uname -rのバージョンがずれています。カーネルビルドを施したのであれば、ターゲットのbuildから、ビルドに用いたlinuxディレクトリへのシンボリックリンクを貼ってみてください。

Device Tree Overlay

Device-Treeに登録します。

$ cd ../dts
$ dtc -@ -I dts -O dtb -o i2s-soundcard.dtbo i2s-soundcard-overlay.dts
$ sudo cp i2s-soundcard.dtbo /boot/overlays

これはただ実行するだけです。dtc実行時にwarningが出ますが、特に問題はなさそうです。

Configuration

以上の全てが完了後、/etc/modulesの末尾にadmp441を追加し、/boot/config.txtに、dtoverlay=i2s-soundcard,alsaname=mems-micを追加します。

編集を終えたらリブートをかけます。これで完了です。

※ ADMP411専用っぽい感じがしますが、I2SのMEMSマイクなら、同じモジュールで動作する可能性が高いです。

録音

まずは、録音デバイスの確認。arecord -lを叩いてチェックしてみます。

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: memsmic [mems-mic], device 0: bcm2835-i2s-admp441-hifi admp441-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

先ほど登録したmems-micがデバイスとして見えています。 では、早速録音してみます。

$ arecord -D plughw:1 -c1 -r 48000 -f S32_LE -t wav -V mono voice.wav
Recording WAVE 'voice.wav' : Signed 32 bit Little Endian, Rate 48000 Hz, Stereo

これでvoice.wavに音声が録音されます。録音できました、やったーと思いきや、めちゃくちゃゲインが低いです。再生してもなんだかほとんど聞こえません。

ゲイン調整

alsamixerやamixerでボリュームを調整できるよう、ALSAのPCMプラグインを登録します。ALSAのPCMプラグインは、ユーザ設定の場合は~/.asoundrcファイルに、システム全体に反映させる場合は/etc/asound.confに書き出します。今回は~/.asoundrcに書き出します。ファイル内容は以下の通りです。

pcm.dmic_hw {
    type hw
    card memsmic
    channels 2
    format S32_LE
}

pcm.dmic_sv {
    type softvol
    slave.pcm dmic_hw
    control {
        name "Boost Capture Volume"
        card memsmic
    }
    min_dB -3.0
    max_dB 30.0
}

上記内容は、基本的にここの情報を参照して、少し組み替えています。 https://learn.adafruit.com/adafruit-i2s-mems-microphone-breakout/raspberry-pi-wiring-and-test

※PCMプラグインのフォーマットについては、こちらを参照のこと。 ALSA project - the C library reference: PCM (digital audio) plugins

登録はしたものの、alsamixerを開いても項目が出てきません。しかし、一度以下のようにもう一度arecordを実行したところ、alsamixerやamixerで設定できるようになりました。

$ arecord -D plughw:1 -c1 -r 48000 -f S32_LE -t wav -V mono -v voice.wav

うーん、これは要調査ですね。とりあえず今回は、この問題は横に置いておきます。

$ alsamixer

でalsamixerを起動し、F6キーを押して、”mems-mic”を選択します。mems-micのボリューム設定に切り替わったら、F4キー、またはTABキーを押して、Captureの音量設定に切り替えます。

f:id:kinokorori:20180304015007p:plain

ボリュームを適当にあげて、再度録音してみましょう。今度はだいぶ録音音量が大きくなったはずです。