落胆がらくた街

多分三日坊主で終わると思うんですけど

もうちょっと真面目にパナ改を作った

まえがき

suzublog.hatenablog.com
↑およそ一年前に作ったやつ
こいつは回路の実験という側面が強かったし、単純に出来がよろしくなかったので、「余り物で安く作る」というコンセプトはそのままにもうちょいマトモな代物を組み上げた。
ろくに回路を知らなかった去年よりもう少し知恵も付けたので、多少はマシになった筈だ。採用した回路はいつもの通り
1713 :ファンタム式パナ改マイクの単純化 省電流バージョン|ShinさんのPA工作室
からパクらせていただく。ただし、マジで金が無くて秋月で買い物する送料すら捻出できない貧乏ぶりなので、「コンデンサは容赦なく積層セラミックを使う」という致命的な欠点が。

でざいん

本体及びハウジングだが、これも余り物の流用で、まずXLRはサウンドハウスで一番安かったこれ。
CLASSIC PRO ( クラシックプロ ) >CXL2B | サウンドハウス

マイク本体を収めるのは、ぶち折れたオシロスコープのプローブを流用。
オシロスコープ・プローブ(60MHz): 測定器・計測器関連 秋月電子通商 電子部品 ネット通販
これをバラすとどうなるかはこちらの記事が参考になる…というかまんまだ。
オシロスコープのプローブの修理 ( 修理とリフォーム ) - 金田式アンプ・ファンのささやき - Yahoo!ブログ

さらにそれらを収めるハウジング的な何かとして、余ってたモノプラグのガワを流用。なんでも良いんだけど、これが一番サイズがぴったりだった。
https://www.soundhouse.co.jp/products/detail/item/25715/

f:id:suzumodoki:20171214150549j:plain
右から、「BNCコネクタをバラバラにしたもの」「プローブの持ち手のゴム?の部分」「モノプラグのガワ」「ガワだけ使われていらない子になったモノプラグの本体」。

電子的な部分について。
マイク石はお決まりのこれ↓。拘る人はオリジナルのWM-61Aに拘るらしいが、とりあえず安くて手に入りやすいのでこっちに飛びつく。
エレクトレットコンデンサーマイクロホン(ECM) WM−61A相当品: パーツ一般 秋月電子通商 電子部品 ネット通販

また基盤は、元ネタの「コネクタの中に回路を全て入れる」というアイデアを拝借。必然的に小さい部品が有利なので、J-fetはこれ↓を使う。2つのJ-fetが1チップに収められており、しかもソース同士が内部でくっついている(元の回路図と同じ状態になっている)ので大変好都合だ。
Nch J−FET 2SK2145−BL (2個入): 半導体 秋月電子通商 電子部品 ネット通販

そして基盤は面実装モノをうまい具合に乗せられるこれ↓を採用。こいつは穴がちっこすぎて面実装以外の部品がマトモに乗らないのだが、
64ホールユニバーサル基板(1.16mm): パーツ一般 秋月電子通商 電子部品 ネット通販

こいつの端子部分を引っこ抜くとうまい具合に変換ピンとして流用出来る。↓
シングルピンソケット (低メス) 1×20 (20P): パーツ一般 秋月電子通商 電子部品 ネット通販
f:id:suzumodoki:20171214150536j:plain

ケーブルを受ける側の基盤は同じサイズでDIPピッチの物があるのでこれと繋げばOKだ。
16ホールユニバーサル基板(2.54mm): パーツ一般 秋月電子通商 電子部品 ネット通販


抵抗はebayで中国人が何故か送料無料で送ってくれた大量の面実装抵抗を使う。精度?知らんな!w

かいろ

「超簡略版」との事だが、ファンタム電源を使う以上はいくら簡略化されていても構わない。どうせゲインはオーディオインターフェースでどうとでも出来るからだ。
抵抗4つ、コンデンサ2つ、面実装のJ-fet実質1つを基板上にせっせこ組み上げるだけで出来上がる。今回はあれこれ余り物を使った以上ちょっとヘンな部分があるので回路は本家様にまかせてここではさらっと各部品について触れる。

まず、各J-fetのゲートからGNDに落としている1MΩの抵抗。こいつは十分大きければ何でも良い。今回は在庫事情から750kΩを採用したが、そんなに精度もいらんだろう。
次に、マイクのマイナス、即ちマイク内蔵FETのソースからGNDに落ちている2.2kΩ。こいつはマイク石のデータシートに指定されている数値なので、余り弄るべきじゃないだろう。精度がいるかは謎だが。
で、J-fetのソースからGNDに落としている1.5kΩ、これもなるべくこの通りにした方がいい。まぁ今回は1kΩにしちゃったんだけど。元の回路は2sk-2880というJ-fetを使ってるんだが、今回使ったJ-fetはもうちょっとソース電流がデカいので、それに合わせて少し下げてみた。ここの抵抗がどんな影響を及ぼすかは検証の余地あり。

2つの0.22uFコンデンサ。これは耐圧50V以上が必須で、かつなるべくオーディオ向きのフィルムコンなんかを使うべきだ。在庫無いから安物の積セラ挿したけど(号泣)
ただ、0.22uFという数字は検証の余地があると思う。こいつを絞ると低域がカットされる筈だが、完成品を使ってみた所どうも低域がちと強すぎる感じがあった。好みで上下させていいと思う。

かこう

兎にも角にも苦労するのは加工作業だ。もしこれから初めてこのECM改造をやるのであれば、安いものなので多めに買って練習すると良いと思う。
f:id:suzumodoki:20171214150542j:plain
画像左が無加工の状態。青字で注釈を入れたが、ようはこの黒い点がスルーホールで、内部のマイクの端子にくっついているわけだ。初期状態ではマイクのガワ(GND)とくっついているのが困るので、うまい具合に切り離さなきゃならない。まず予め乗っているハンダが邪魔なので吸い取る。次にスルーホールを潰さないよう気をつけながら、基盤の金属部分、赤点線の所をカッターでせっせこ切って電気的に切断する。マイクのガワはまずハンダが乗らないので、基盤部分をマイク-とGNDに分けなければならないわけだ。マイクは熱に強い部品ではないので、コテを押し当てる時間は長くても3秒程度、それを超えたら一旦冷やす…という感じでやると失敗しにくいと思う。

出来上がったマイクの各端子に配線するのも一苦労だろうが、これはなるべく細い線を使えば(そしてコツさえ掴めば)難しくない。お勧めは物故割れたイヤホンの線だ。こいつは極めて細い上に秋葉原まで出なくても安く簡単に入手出来るというメリットがある。金の話しかしてねぇな…?
メッキ皮膜がなされているので普通に剥がそうとすると大変だが、「ハンダゴテの熱でメッキを溶かして剥がす」というテク(?)を身につければ楽勝だ。まず乗らない事を承知の上ではんだを線材のさきっぽに当ててコテで溶かす。そのまま線材にコテを当て続けると、はんだを通じて熱が伝わり、メッキが黒く焦げて焼け落ちる。黒くなった部分をコテ先で擦るとうまい具合にメッキが剥がれてハンダが乗ってくれるというわけだ。
f:id:suzumodoki:20171214150527j:plain
画像は作業途中の2線繋いだ所。

なお、この配線作業も慣れない内は失敗がつきものだと思う。そんなこと無い?自分だけ?
そんな時、「とりあえずマイクが生きてるかどうか確かめる回路」をブレッドボードかなんかに作ってテストすると便利だ。
f:id:suzumodoki:20171214160047j:plain
ようは本家本元、3線加工する前の回路でマイクテストして、ちゃんと音声が取れればとりあえず配線は成功、という事で。当たり前だけどこの回路はファンタムじゃないので注意。単三電池一個あればテストできるので便利。

くみたて

f:id:suzumodoki:20171214155051j:plain
コンデンサに小さい積セラを使っていることを除いても、面実装部品を遠慮なく使えば余裕を持ってコネクタに収まる事がわかる。
ちなみに手前のケーブル及びコンデンサ部分の基盤と、XLRピンに繋いだ面実装基盤部分は分離できるように作ったので、もし色気づいてお高いコンデンサを買い足しても簡単に改造出来る仕組みだ。今度部品を買いに行く機会があったらやってみよう。

f:id:suzumodoki:20171214155043j:plain
出来上がり。大分端折ったが、どんな部品が手元にあるかで作り方は千差万別だと思う。兎にも角にも、「6ミリ径のマイクがきれいに収まってケーブルを通せる部品」があればなんだって良いのだ。それこそ100均で売ってるチャッカマンの先端の筒部分だって良い。回路部分に関しては、本家のJ-fetや高精度抵抗への拘りも理解できるものの、コストに釣り合わないとか、そもそもS/N比が良ければあとは加工次第でどうにでもなるとか、アマチュアにはアマチュアの事情があるので、個人個人で部品を選べばいいと思う。自分は面実装を容赦なく使用し、確実にコネクタに入れられる方針を採用した(でもコンデンサは自分でも酷いと思う)。もっと一般的な事を言うなら、
・J-fetはNchのものであれば何でも良い。音は好みによる所が大きいので、出してみないとわからない。
・抵抗は高精度であることが売りになる部分(1.5kと2.2k)とそうでもない部分(1MΩ)がある。前者は拘る価値があるかもしれないが、音質にどこまで影響するかは謎。精度より温度特性を意識したほうが良いかも?
コンデンサは拘る価値が大いにある。ただし、容量に関しては検討の余地がある。0.047uF~1uFあたりを色々試してみたい所存。ただし2つのコンデンサが同容量なのは絶対。



といったところ。肝心の録音に関しては、「A/Iのゲインが最低でも十分過ぎるくらいの音量でびっくり」という結果に。これはこれで不便かもしれないので要検証。
Twitterには録音した音源を挙げたのだが、ネタに走ってクッソ汚い六尺コピペ朗読音声しか挙げなかったので、こっちに挙げるのは後日マトモな奴を正式に録るということで…

Split-Radix型大浦FFTの一部をC#に移植した

qiita.com

Qiitaクソ便利だしもうプログラム関連の記事はあっちで書くわ 何がはてなじゃw

~~~

Qiitaでは一切関係ない話題だから書かなかったけど、大浦FFTもFFTWも基本的には「いかに高精度で、次に速く」を原則として作られてる。ので、例えばDTMで使うVSTプラグインみたいな、「まぁ概ねスペクトルの概形が見られればOK」っていうシチュエーション、すなわち「いかに速く軽く、次に高精度で」を原則とした場合まだイジれそうな気がする。

具体的には、FFTはサンプルをN個突っ込んで、サンプルレートの半分を更にNで割った分だけ周波数分解能が得られるわけだが、パラメトリックイコライザなんかでとりあえずローをばっさり切るべーみたいな時に果たして何千という分解能はいるのかという感じ。だから「8192個のサンプルを突っ込むんだけど、求める係数は1つ飛ばし」とかでもいいんじゃね的な。

なんでこんなこと考えてるのかというと、CubaseからStudio Oneに移行したら、Cubaseにあったデフォルト付属のパライコがなくなっちゃったのだ。あのチャンネルストリップに最初から刺さってるやつ。
んでスタ1には一応ProEQって結構高性能なEQが付属しとるんだけど、もっともっと手軽に使えるEQの需要ってあるんじゃないかと思った所。
例えばミックス処理なんかで、大抵のトラックにはローカットを食らわせつつ特定の周波数帯をピークEQでどついたり削ったりするってのがよくある話だと思うんだけど、それやるのにそんな高級なEQいちいち挿したくない。んで探すと意外とフリーでシンプルなパライコ無いんだよな。なんかどれもコレも性能重視というか。性能は雑魚くていいから馬鹿みたいに軽い奴誰か教えてください。

~~~

もいっこ思ったんだけど、FFTというかオーディオのバッファリングでよく使われるのがリングバッファだ。リング状の配列にぐるぐるデータを突っ込んでいく。で、FFTをかけるときは、例えばサイズ8のリングバッファを4つずつFFTかけるみたいな時、最初はa0からa3をFFT、次はa1からa4、次はa2~a5…みたいにちょっとずつずらしながらFFTをかけたい…なんていうのが思いつく。ところが大浦FFTはin-place演算なので、FFTをかけたら元のデータは無くなってしまう。ましてやこの「ずらしながら法」の場合、ハミング窓も一緒になってずれていくので、こうなると一々FFTをかけたい部分だけリングバッファからコピーしないといけない計算になる。こりゃー無駄だ。

っていうのを何とかしたかったんだけど、素のFFTアルゴリズムを自前で書いてリングバッファと窓関数を対応させたやつよりも、一々バッファをコピーしてから大浦FFTかけるほうが速度出たからもう寝るわw

Vscode+PlatformIOでIntelliSenseが変なもん参照する時の覚書

前置き

f:id:suzumodoki:20171125212155j:plain
画像はVS codeにPlatform IOという拡張をぶち込んで
Mbed lpc1114fn28向けのプロジェクトを立ち上げた時の一コマ。
一見1114向けのヘッダが見事に読み込めているように見えるし、ビルドもちゃんと通るのでとっても快適。

f:id:suzumodoki:20171125221448j:plain
ところが、実はこんな明らかにヘッダファイルを読めているにも関わらず、IntelliSenseが1114のピンネームマクロ「dp14」を候補に出してくれない。
コンパイル・ビルドが通る以上ビルドツール向けのパスの設定はちゃんと出来ているので、問題はプロジェクトフォルダのc_cpp_properties.jsonという事になる*1
で、c_cpp_properties.jsonがどうなってるかというと…

イヤーッ!
f:id:suzumodoki:20171125212815j:plain
グワーッ!

これは「configurations」属性の直下の「includepath」属性なので、コンパイラに渡すインクルードパスと同じだ。
ここの設定は正しいのだが、何故かIntelliSenseはこのインクルードパスを参照してくれず、果には「mbed.hなんて無いよ」とか言い出す。
で、下の方を見てくと、「browse」というタグがあり、やはりその下にはpath属性があって似たような記述がずらっと並ぶ。
browse属性は何をしているかというと「fazzyモード(厳格ではない、多少のエラーは気にせずコード解析するモード)」で候補を出すときのインクルードパスだ。
最初にVs codeでプロジェクトを起こした時、インクルードパスを何も設定してないせいで#includeプリプロセッサに緑の線が引かれるが、あれは「参照が解決できないのでファジーモードで候補出すよ」という記号だ。だから緑の線が無くなるまできっちりインクルードパスを書いてやったのだが何故か逆に何も読んでくれなくなった(原因不明。誰か教えてください)。

コンパイラに渡すインクルードパスと違い、「browseのpath属性」にIntelliSenseが検索をかける時はサブフォルダまで舐め回すように探すので、
このずらーっと並んだ書き方は恐らく無駄でしか無い。
例えば1114が参照するのは「targets/TARGET_NXP/TARGET_LPC11XX_11CXX」以下なんかにあるファイルだが、
ドタマに「C:/Users/admin/.platformio/packages/framework-mbed/.」が書かれている以上、その下にある全く関係無い他のデバイス用の同名のヘッダも全部読む。
そして名前の衝突が起こった場合、本来ならばIntelliSenseは複数の候補があると言ってくるのだが、「複数の候補が存在するa.hからやはり複数の候補が存在するb.hをインクルード」というシチュエーションの時、どうやらb.hで名前がぶつかっている候補をIntelliSenseは見つけてくれない。

f:id:suzumodoki:20171125214129j:plain
PlatformIOはMbedプラットフォームを選択した時点で対応しているライブラリを全てダウンロードして手元に置く。
その為、たとえ存在を知らないような、BEETLEとかいうわけのわからんボードのAPIも手元にある。これは2017/11/25時点でMbedプロジェクトフォルダのアタマに置かれている(framework-mbed\targets\TARGET_ARM_SSG以下。)
で、ビルドツールは設定されたマクロに従い、図の右下の1114用ライブラリをきっちり読み込んでくれるのだが、ファジーモードのIntelliSenseはそんなマクロ知ったこっちゃないので、まずDevice.hで競合する(図中とりあえず①)。この時はまだ「競合してるよ」的なウィンドウを出してくれるのだが、ここから更に読み込んでいるヘッダに関しては「競合が解決されない以上は仮に一番上のヘッダを読んでおく」事になっているらしい。つまり、「TARGET_ARM_SSG\TARGET_BEETLE\PinName.h」をPinName.hの代表として読むわけだ(図中とりあえず②。図ではobjects.hが一例)。
かくして1114の為のPinName.hは読み飛ばされ、候補にdp14というマクロは出なくなる。纏めると、
「厳密な解析モードだと何故か何も表示してくれない。ファジーモードだと何もかも読み込み衝突を起こす」。


解決策

ようはbrowseタグのpath属性でサブフォルダを読まないようにすればいい。
vscode-cpptools/c_cpp_properties.json.md at master · Microsoft/vscode-cpptools · GitHub
リファレンス曰く、「パスの末尾が/*か\*ならそれ以降読まない」との事。なので、このずらっと並んだ部分を選択して、置換コマンドで
「",」を「/*",」に置換してやる。これだけ長ったらしく前置きをした挙句やることがこれだけって…。
f:id:suzumodoki:20171125223000j:plain

なお、今回はMbedの話だが、多分どのプラットフォームを選んでも似たり寄ったりじゃないかと思うので、状況は違えど現象が同じなら同じやり方でなんとかなると思います。
いやわかんないけど。めっちゃ対症療法だし。

*1:インクルードパスなどを設定する、プロジェクトフォルダ毎の設定ファイル

例大祭14戦利品

今回買った中で特に良かったもの。自分向け。太字は今年初めて買ったサークル。
敬称略。


・べにしゃけ/poprication 初恋に捧ぐ
レイマリ。いつも通り文句なしの傑作。もう殿堂入りみたいなもんだし割愛。

いな/Inadahime 床伏の君。
レイマリ。文章力がないので上手く書けないがとても良かった。次回レミフラ描くらしいのでそっちにも期待。

・よぬりめ 雨音が結ぶ
レイマリ。ここも殿堂入りみたいなもんだし割愛。ところでよぬりめさん体調の方はもう大丈夫なんだろうか。

電派絵師団/しろし 科学世紀小噺
SF色強め。個人的にはかなりアタリ。秘封。

あみだ屑 秘封倶楽部モノ
漫画を描く技術が頭一つ飛び抜けてる。構成や描き込みの技術が魅せる。

・romi/あじさい通り 蓮子が落ち着かない話。
前から好きなサークルなので割愛でもいいんだけど今回はいつもより甘めかもしれん。蓮メリ。
秘封ってシリアスな話多いんだけどここのはダダ甘でいいね。

にくにくみっく ふきのとうは甘く
サニーとスターのR18。作者は間違いなく筋金入りのロリコンだと思う。幼児体型へのこだわりが尋常ではない。

・杏飴/こいんとす おかしが食べたいっ
まぁここも毎年買ってるし有名だし殿堂入りっすね。割愛。


全体として豊作だったけど古明地姉妹がちと不作だった。ここ数年言ってるけどサークルスペースが変わらないままキャラやジャンルが増えたので好きジャンルの本の絶対数が下がっている。そろそろ新ジャンルを開拓しないと…

LPC11u35 DIP化基板を試す

0.2017年秋も終わり頃の追記
LPC11U35マイコンボードキット (LPC11U35 QuickStart Board互換): マイコン関連 秋月電子通商 電子部品 ネット通販
今気づいたんだけど今年の6月(つまりこの記事の本文を書いたひと月後くらい)にこんなんが出てた。
マイコン、回路、周辺回路、その他諸々でお値段850円也。
これを買えば手間暇回路をあれこれする必要は全く無い

つまりこの記事の存在価値もまったくない。

一応残しますが、資料として真新しい要素は無いし、お安くMbedでUSBdeviceが叩きてぇようって人は黙ってこれ買えば良いと思います。
あ、それと、一応850円基盤の方は11U35の足が一部オミットされてるので、「11U35の足を全部くまなく使う予定があるんじゃ」という人にはいいかも。いるのか?

結論。もう一月早く出してくれ。

          • 追記ここまで------

秋月でこんなのが売ってた。
LPC11U35 DIP化モジュール: マイコン関連 秋月電子通商 電子部品 ネット通販
LPC11u35を単体で試せるとのこと。お値段500円也。
11u35はUSBを搭載したマイコンで、プログラムの書き込みもMbedでお馴染みのマスストレージとして認識されるアレが出来る。
ただしその為にはちょっと回路を組まなきゃならないよ、ということで参考になったサイトなんかを纏めておく。
(ようはトラ技ARMライタを自前でやっちゃおうという話)

1.いるもの
マイコン単体だけではどうにもならんので必要な資材を挙げる。
・12Mhzクリスタル
・クリスタル用コンデンサ20pf 2個
・USBコネクタ
・3.3V出力のレギュレータ
・レギュレータ用コンデンサ
ISPモード用のスイッチ(必須ではない)
といった具合。最初1114みたいに内部の発振器が使えると思い込んでて延々悩んでたけど外部にクリスタルが要る模様。

2.回路
実は同じようなことを自前で既にやってらっしゃる方がいる。
mbedクラウド対応CPUボード
ここにある「回路図」がまんまやりたいことなので、参考にさせていただく。
ただし、USBDeviceとしてのみ使う場合は外部電源の存在を気にしなくて良いので、PIO0_6 USB_CONNECTあたりの端子は不要になる。
秋月の商品画像とマイコンのデータシートを加工して(勝手にやった。万が一怒られたら消す)ピンアサインっぽいのを作った。
f:id:suzumodoki:20160917204419j:plain
これを見ながら組んでいく。
注意点としては、
・左右にVDDが一つずつあるが、別に内部で繋がってたりはしない。どちらも3.3Vに繋ぐ必要がある。
・データ線に直列で入ってる33Ω抵抗とかは無くても動く。勿論一応あった方が良いに越したことはない。
・VBUSには文字通りUSBからの5Vをブチ込んでやる。抵抗は入れても入れなくても良い。
・何か知らんけどリセットが効いてるんだか効いてないんだか。USBを指し直さないとリセットが効かない?


f:id:suzumodoki:20160917204224j:plain
組み上げたところ。ブレボでやったら結構ごちゃっとしたからもしかしたら基板組み上げちゃった方がいいかもしれない。
USBを繋いで、マスストレージデバイスCRP Disabled」が表示されたら成功だ。本来ISPピンをLOWにしながらリセットした場合だけこのモードに入れるが、初期出荷時はデフォルトでここに入るらしい。
11u35については以下のページが詳しい。
家庭用コンピュータ環境の模索:(トラ技ARMライタ基板:2014年2月)TG-LPC11U35-501 活用


3.あそびかた
恐らくMbedを使ったUSBDevice対応マイコンとしては現時点で最安の選択肢になる(次点でNucleoか?性能はダントツだがサイズがね…)。
USBDevice - a mercurial repository | Mbed
こいつを一発コンパイラにブチ込んで、試しにUSBSerialを書き込んでやろう。書き込んでからリセットをかければ、Mbed virtual serial portがインストールされ…ない。
どうもドライバが要るらしい。
直リン:https://developer.mbed.org/media/uploads/samux/serial.zip
デバイスドライバの不明なCDCドライバを更新する→上記infを読みこませるとやればドライバが入…らない。セキュリティ証明書が無いらしい。ファック!
セキュリティ証明を無効にして再度ドライバをインストールしてようやく成功。TeraTermからデバイスが見え、500円マイコンからPrintfが出来た。


ちょろっと電子部品がいるので、500円で済むとは言えないのだが、それでもあれこれあわせて7,800円で組み上がる。
それでもNucleoの半額くらいなので、USBDeviceを作りたい人にはいい選択肢なんじゃなかろうか。特に私のような貧乏人には良い商品だと思った。ありがたや秋月。

Nucleoでタッチセンサを自作した

タッチセンサの仕組みは
建築発明工作ゼミ2008: Arduino タッチセンサ
を参照。これをMbed環境でやりたい…という話。その際に出た問題を覚書。

1.青bedでやったらダメだった
このタッチセンサはMbedで言うDigitalInを使う。出力ピンと入力ピンを2MΩくらいの抵抗で繋ぎ、出力をHighにしてから入力がHighになるまでの時間を計測するわけだ。
ところが青bed及びLPC1114はDigitalInの入力閾値電圧が微妙に高く(Analogでいう0.75くらいだったと記憶しているから2.5Vくらい?)これだけ大きい抵抗を通すといつまで経ってもDigitalInはHighにならない。一応AnalogInを使えば解決するのだが、同時に6ピンしかタッチセンサに出来ないのは余りに寂しい。
そこでNucleo F401REを使ったところ一発で上手くいった。同じARMのCPUだろうにここらへんの仕様が違うんやなぁ。

2.値がめっちゃふらつく
こんな感じの回路で
f:id:suzumodoki:20160907182247j:plain

こんな感じのソースを実行すると

#include "mbed.h"

#define NUM 3

DigitalIn in[]= {D14,D15,D12};
DigitalOut dout(D7);


int ret_us(int pin)
{
    Timer t;
    dout=0;
    while(in[pin]==1);
    t.reset();
    wait_us(10);
    t.start();
    dout=1;
    while(in[pin]==0);
    return t.read_us();
}

int main()
{

    while(1){
        printf("%d,%d,%d\r\n",ret_us(0),ret_us(1),ret_us(2));
        wait(0.2);
    }
}

こんな感じの結果が得られる。

10,10,10
10,10,10
9,10,10
10,11,11
11,11,9
10,11,9
10,10,9
9,10,11
10,11,8
9,177,10
18,2,12
19,2,11
9,149,12
12,2,15
18,2,12
12,29,12
13,2,14
16,2,13
18,2,8


赤字の部分が真ん中のピンを触った時の挙動だ。これを見ると、
1.タッチされた時、応答速度は早くなるか、極端に遅くなる
2.自分以外の誰かがタッチされていても応答は若干ふらつく。具体的には若干遅くなる。

という事がわかる。触られた時に応答速度が遅くなるという予想に反した結果だが、何度やってもこうなる。
ちなみに2つ以上を同時にタッチしてもこの法則に基づくようだ。

この2つのルールをうまい具合に判定しないといけない。

最終的なソースコードは以下。

#include "mbed.h"

#define NUM 3

DigitalIn in[]= {D14,D15,D12};
int num[NUM]= {0};
DigitalOut dout(D7);
DigitalOut led(LED1);

int ret_us(int pin)
{
    Timer t;
    dout=0;
    while(in[pin]==1);
    t.reset();
    wait_us(10);
    t.start();
    dout=1;
    while(in[pin]==0);
    return t.read_us();
}

int main()
{
    led=1;

    //初回でレンジ出す
    int range[NUM],buf;
    for(int i=0; i<NUM; i++) {
        range[i]=ret_us(i);
        for(int j=0; j<50; j++) {
            buf=ret_us(i);
            if(range[i]>buf) range[i]=buf;
        }
    }
    
    int fil[NUM]= {0};
    int cnt=0;
    const int loop=10;
    const int border=5;
    while(1) {
        memset(fil,0,sizeof(int)*NUM);
        for(int k=0; k<loop; k++) {
            for(int i=0; i<NUM; i++) {
                cnt=0;
                for(int j=0; j<5; j++) {
                    if(range[i]>ret_us(i)) {
                        cnt++;
                    }
                }
                if(cnt>=2)fil[i]++;
            }
        }
        for(int i=0; i<NUM; i++){
            if(fil[i]>border)printf("1:");
            else printf("0:");
        }
        printf("\r");
    }
}

ようは複数回判定する事で、時間解像度を犠牲に判定の精度を上げるわけだ。
この方法でも「中途半端に触ってる時」なんかは判定がふらつくが、その場合用途に応じて判定回数を増やしたりすればいい。
ちなみにこれ、出力ピンが共通だからこんな事になってしまっているが、ケチらず出力ピンと入力ピンを一対一で用意してやればもう少し判定は楽になる。
…が、それでも「複数回判定して例えば分散を見る」みたいにした方がいいのは変わらない。


RH6010?久々に棚から出したら死んでたよ。

パナ改とやらを作った

~~~~~~
2017年年末の追記
この記事はクソいい加減なクソ記事です。
もう少しマシな内容はこっちに
もうちょっと真面目にパナ改を作った - 落胆がらくた街


~~~~~~

ファンタム式パナ改マイクロホン|ShinさんのPA工作室
これを組み上げただけ。
f:id:suzumodoki:20160724060203j:plain


…なのだが、回路図の単純さに対してやたら手間がかかったので、注意点をあれこれ書いておく。
尚、ハウジングは見ての通りまだだし、そもそも余り物で安く作るのが目的だったので
コンデンサはセラコンを容赦なく使う
・ケーブルのコネクタの中に入れるのはやらない。ケースはフリスクケースを使う。
・一部の抵抗の数値変更
なんかをやっている。音質はそれでも十分すぎるくらいだった。音声は追って上げる。


【注意そのいち】
f:id:suzumodoki:20160724060708j:plain
マイクは必ず表面実装の方を買うこと。リード線タイプのはベタグラウンドでどうしようもない。
マイクのハンダ付けはそこまで難しくない。
赤線の部分をカッターでパターンカットし、線をくっつけてあげる。
マイクの外側部分が本当に繋ぎたい部分なんだが、素材的に絶対ハンダが乗らないので、あくまで面実装のランド部分にくっつけるわけだ。
言われてる程簡単には外れないが、エポキシで固定したほうが良いのは間違いない。
ただ、詳しくはわからないんだが瞬間接着剤をエポキシ代わりに使ったらマイクがぶっ壊れて使い物にならなくなった。
何でだか不明。中で外れたのかな?
そんなわけなので、エポキシで固定するんなら全ての配線が終わって動作確認が出来てからで良いと思う。

【注意そのに】
回路図の1.5KΩと2.2KΩは1KΩで十分だった。入手性としてもこちらを推奨する。
コンデンサは、拘るんならWIMAのよさそうコンデンサを使うらしい。自分はそんなのどうでもいいのでセラコンを使った。安いは正義。
それからFETの向きに注意。最後まで残った回路図のミスがこれだった。分かってても間違える(池沼)
実はあれこれ失敗に失敗を重ね、マイク石を5つもゴミにしてしまった。なので、回路は回路で作っておき、最後にマイクを繋いで動くか確認したらハンダ付け、がいいだろう。マイク石は、壊れやすい(ハンダ付けはコツさえ掴めば難しくないが、コツを掴むまでに何個か焼く。どうせ一個50円なので多めに買ったほうが良いだろう)。




というわけで、単純かつ安価に結構な性能のマイク?が手に入ってしまった。いや高性能なマイク使ったこと無いのでわからないんだが、少なくとも無音時のノイズみたいなのがびっくりするほど小さい。ここまでとは。
実際に作る場合は予め予備のマイクを買い込んでおいて、FET2つに余り物の抵抗とコンデンサでせいぜい300~500円だ。