落胆がらくた街

Dr.Rootはサポート終了製品です。

ギターのような何かを手に入れた② ギター側回路編

製作記事でありながら、写真を撮るという習慣が普段全く無いので、画像資料が皆無になった。なんつーこった。

【ギターの回路を考える】
兎にも角にもエレキギターである以上、音声を出力できなきゃ話にならんので、D-PUの出力を何とか吐けるようにする。
いずれギターシンセとして拡張する事を考えると、単純にD-PUの出力をショートさせてはい終わりでは調子が悪い(尚、これはどの道上手く行かないのであった。後述)
というわけでオペアンプによる加算回路をギターに組み込み、D-PUの6つの出力を1つに纏めて出せるようにする。残念ながら、電力を使わずに解決する手段は思い浮かばなかった。

【回路】
f:id:suzumodoki:20160321205545p:plain
実は回路図を当初フリーハンドで描いてたので後から回路図エディタで描き直した。あと回路図の正しい描き方とかを習ってないので変な所があるかもしれない。
またあろうことか電源ラインのパスコンを省略して描いてしまっているが、VCC-GND間に数百uf、ICの足付近に0.01ufを入れている。ちなみに大きい方は調子に乗って470とか挿したら起動に時間がかかるという本末転倒に陥ったので100程度がよかったのかもしれない。
やっていることは単純なオペアンプによる加算回路で、強いて特徴を挙げるなら反転加算回路をバイアス電圧かけて片電源で使ってる所だろうか?
ネットで探してもこれといったものが無く(非反転加算回路の片電源使用はあった)、本を調べていたら
OPアンプ活用 成功のかぎ
なるものがあり、この本の中でサンプルを発見したのでガッツリパクった。それを除いても、まるっきり初学者にも満たない私ですら大変参考になった良書です。
ちなみに非反転加算回路を避けた理由は、入力インピーダンスやらノイズやらでいい話を聞かなかったからだが、結局「反転の方が良いんだよ!」としか理解できなかった。情けねぇ。

【組み立て】
組み立て、という程偉そうなことはしてないんだが、電源が必要であること、電源をギターの中に組み込むスペースが無く外付けにせざるを得ない事などから色々考えなければならなかった。
使ったのは以下。
www.aitendo.com
USBの口をパネル取り付けするという、身の回りでは当たり前のようにされている事がいざ自分でやろうとするとやたら難しいという問題を一発で解決する有能オブ有能製品。お勧め。

Amazon.co.jp: MOCREO® モバイルバッテリー、超薄型ウルトラポータブルモバイルバッテリー: 家電・カメラ
薄型のモバイルバッテリーで、そこそこ安いもの。何か似たような製品でコストパフォーマンスに優れてるのならなんでも良い気がする。

他に、何か部屋に落ちてたネオジム磁石二個とドイトで売ってた裏にテープが貼ってある磁石くっつくやつ。

f:id:suzumodoki:20160321211550j:plain
USBの口はギターの背面に顔を出すように。まぁ…よく出来た方なんじゃないの…私にしては………。

f:id:suzumodoki:20160321211628j:plain
ネオジム磁石二個を埋め込んだ所。ドリルで削って嵌めただけ(本当は接着剤かなんか使う予定だったんだけど、試しにはめ込んでみたら全く外れなくなってそのまま)

あとはモバイルバッテリーにテープ付き磁石みたいなのを貼って、ギターに繋いでくっつけるだけ。FF7クラウドくんの背中に剣付けてるアレと同じギミックだな!

タッチセンサ RH6010をMbedで使ってみた

無駄にツボを抑えた製品を格安で揃える事に定評のあるいぶし銀ことaitendoでタッチセンサをなんとなく探してたら「8ch I2C接続タッチセンサ」なるものを発見した。

タッチコントローラ(8ch/I2C) - aitendo

お値段なんと100円也。ピッチ変換基板もセットで買って200円。レッドブルより安いぜ!

で、普通ならわざわざブログで書くような話では無いんだけれども、この製品、

・データシートが中国語しかない
サンプルソースらしきものもざっと探した限り見当たらない
・少なくとも日本語の資料は見当たらない
・データシートに書いてある内容が必ずしも正しくない

という状態なので、決して大した内容でないどころかまだ使いこなせてすらいないのだが、無いよりはマシという事でサンプルと使ってみた感想を記す事にした。私は中国語がさっぱり解らないし、記事の内容の信憑性も怪しいので、詳しい人がいたら是非意見を伺いたい。というか誰かライブラリとして仕上げてくれ。

#include "mbed.h"

I2C i2c(p9,p10);

const int addr = 0x78<<1; // データシートに書いてある0x78は右詰めなので左1シフト

#define SCT 0x2    //多分だけどセンシング時間の事 0b11で感度最大、0b00で最低(=最速)
#define SFT 0x3f    //上のさらに細かい版かなぁわかんない でかい程感度がいいらしい 6bitだから0x00~0x3f
#define OTC 1   //センサに入れるクロックがどうのこうののフラグ 1で感度が良いらしいしデフォが1だそうだから1でいいんじゃね
#define MOT 0x3    //ずっと触れっぱ判定が続いた時再キャリブレーションする時間 0b00で100秒、0b01で50秒、0b10で20秒、0b11でしない(デフォルト)
#define OLH 1   //INTの出力どうするか 1でHIを吐く(デフォルト)
#define KEYT 1  //マルチ判定がどうのこうの 1でマルチ(デフォルト) 0でシングル判定 0の存在価値が不明
#define LPM 1   //省電力モード 1で無効(デフォルト) 0で省電力モードになる
#define RTC 0x1    //再キャリブレーション時間(そのものの時間) 省電力モードでない(=LPMが1)場合、00で1秒、01で3秒(デフォルト)、10で6.3秒、11で13秒かける

int main()
{
    char cmd[2];

    cmd[0] = 0x0;            // CONFIG1 コマンド
    cmd[1] = (SCT<<6)|SFT;
    i2c.write(addr, cmd, 2); // Send command string
    wait(0.07);              // Could also poll, 65ms is typical

    cmd[0] = 0x1;   //CONFIG2 コマンド
    cmd[1]=(OTC<<7) | (MOT<<5) | (OLH<<4) | (KEYT<<3) | (LPM<<2) | RTC;
    i2c.write(addr, cmd, 2); // Send command string
    wait(0.07);              // Could also poll, 65ms is typical

    while(1) {
        cmd[0] = 0x2;
        char idx=1;
        i2c.write(addr,cmd,1);
        i2c.read(addr, cmd, 1);

        // 結果を出力
        for(int i=0; i<8; i++){
            printf("%d",(cmd[0]&idx)!=0?1:0);
            idx=idx<<1;
            if(i==7)printf("\r\n");
            else printf(":");
        }
    }
}

…初めて使ってみたけど見難いなソースコード。何かなんないかなこれ。

使い方。回路は以下のようにする。
f:id:suzumodoki:20160313170251j:plain
…本来はちゃんとした回路図を描くソフトを使うべきなんだろうけど面倒だった。無いよりマシが合言葉。
タッチがあった時に信号が飛んでくるINTピンは試してないのでNC。
それと右上のCJM/CJPは0~50pF程のコンデンサ通して感度を落とせるらしい?んだけど手持ちにそんなもの無いので未検証。NCで感度最大(デフォルト)らしい。
真ん中8つ(TP0~TP7)がタッチセンサとして働くんだけど、直列に抵抗を入れて感度を弄る(その為定数を記入していない)必要がある。
データシートでは1kを通せとの事だったが大嘘で、少なくとも私がやった限りでは10kが一番それらしい挙動をした。
あとデータシートはSda/Sclに直列100Ωの抵抗をつけてMCUに繋げ、との事だったが無くても動く以上必須ではなさ気。その代わりプルアップが必須である。

パラメータについて
以下は全て環境によるのであくまで参考程度に。
SCT、STF…どうもGoogle翻訳さん曰く感度を弄れるらしいのだが、ちょっと下げたら速攻でセンサが反応しなくなり、上げると他のピンまで反応した。SCTは0x2が最適のよう。STFは模索中。
MOT…色々変えたが特に効果が見られず謎。
これ以外のパラメータは未検証。

使ってみた感想
どうも暫く触って遊んでいたら、主に長時間触り続けた時にセンサの値が1に張り付く現象が見られた。
こうなると再キャリブレーションが必要(恐らくMOTはそのためのパラメータ)なのだが、できればこれを手動でやれないかと思った。
これさえ無ければしっかりタッチを認識してくれるので、細かい調整さえしてやれば使い道はあるかもしれない。
多分電気スタンドのスイッチのような、ワンタッチで済むような用途であれば格安で実装できるんじゃないかな。下手なスイッチより安いし。
タッチ式キーボードみたいなのは要検証。あと布越しでもタッチ反応するか、とかも検証の余地あり。
総合的に見て良い玩具というのが感想。問題は手汗体質と恐ろしく相性が悪い事くらいだな!

ギターのような何かを手に入れた①

【'15年の夏まで遡る話】親戚の家で幼児のおもちゃにされていたそれを発見した時は驚いた。ネットにもほとんどデータのない、古のおもちゃである。詳細は他所様の記事に任せるが、「ローランド GC-10」なるものらしく。

♪Illustrator-meiste Yukio Miyamoto♪ Roland MIDI Guitar Contoroller GC-10

f:id:suzumodoki:20160126223427j:plain

 

ギターの分かる人でも分からないかもしれない、「DividedPickup(以下DPU)ただひとつのみをピックアップに持つエレキギター」という最早エレキギターと呼んで良いのかも怪しい代物。

しかし当時全くエレキギターに詳しくない私にも、その価値は見当が付いた。そこで、どうせ子供のおもちゃならと頼んだら快く引き取ることが出来た。でも私はギター経験無し。あのさぁ…

 

して、ガバガバ工作室オーナーとしては、このゴミをなんとか面白いことに使わないと気がすまない。'16年1月26日現在にして未だ達成できていない牛歩の如きプロジェクトがこの時始まったのである。お前ものづくりの才能無いし引退した方がいいと思うよ。

 

 

【大雑把な解説】

さっきさらっと言ったDPUについて触れる…前に、エレキギターの仕組みそのものについて考える。

エレキギターは「金属製の弦」と「ピックアップコイル」が心臓と言っていい。無学故、物理の話はさっぱり分からんが、めっちゃ大雑把に言えば「ピックアップの上で金属弦を振動させるとその振動に応じた電流が発生する」というのが基本中の基本になる。ピックアップってのは磁石の周りに導線ぐるぐる巻いたわけわからん部品なんだけど、カバーに覆われてるからその御姿を見ることは無い。だから、「ギターを弾く=弦を振動させる=電流が発生する」という一連の流れがエレキギターというシステムと言っていい。ただし、たかだか細かく弦を振動させるくらいで得られる電流はゴミみたいなもんで、所謂「エレキギターの音」ってのはアンプを通してこのゴミみたいな電流を大きく増幅させたものになる(このアンプという名称も曲者で、後々細かい話をしたい)。

 

で。

我がDPUと普通のピックアップ(以下PU)の何が違うのかというと、普通のPUが「ギターの6つの弦を全部まとめて一個に出力する」のに対し、DPUは「弦毎に別々の出力を持つ」という特徴がある。色々省くがようは「ギターシンセはDPUじゃないと難しい」という一点に落ち着く。このGC-10はギターシンセのコントローラーであって、純粋なエレキギターではないのだ。キワモノじゃねーか!しかも肝心のギターシンセは当然のように無い。お値段うん万するし買うのはありえない。ギター弾けないし。

 

【今後の展望】

して、このキワモノで色々遊ぶことを考える。最終的にはギターシンセというかMIDIコントローラとして使えれば言うこと無しだが、FFTとか大変そうだしMIDIあれこれも面倒だしでこれは最終目標とする。ということで、当面は「ただのギターとして使えるようにする」というのを目標にしようとした。

 

 

たかがそれだけ、たったそれだけの事だと……思ったんだ………

アケコン自作(完)

f:id:suzumodoki:20150319040316j:plain

木材を打ち付けて終わり。

開けにくいのであんま良くない。次何か問題が起きた時他の仕組みに変更する予定。とりあえず使えるからいいか…

 

 

やる気があったらアケコン自作のまとめ記事でも作ろうかと思っている。できたらやる。

XNA(MonoGame) 画面サイズに合わせて描画スプライトをスケーリングする

MSDN

画面のサイズに応じたスプライトのサイズ変更

の内容が嘘っぱち(XNA4.0の場合)なので報告ついでにその内容のコピーをメモ

XNAなんてオワコンwwwとか思ってたらMonoGameで使いますよみたいな話だった

ただ直すべき部分は一箇所なので大したミスでも無いんだけど…

 

 Draw メソッドで、SpriteBatch.Begin を呼び出し、LoadContent で作成したスケーリング行列を渡します。

 この部分がまるで反映されてない。

原文

spriteBatch.Begin();

は、 正しくは

spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, SpriteScale);

 

 

幾つか不満があって、まずこのBeginメソッド、デフォルト引数の類が使えず、Matrixを渡すにはその前に大量の引数を渡さなきゃならん。というのも、デフォルト引数は「コンパイル時に決定される定数」じゃないと使えないという性質があって、基本型以外の型を渡せないんだな。

大体の引数はそんな滅多に使うもんでも無さそうだからnullでいいと思うんだが、まだXNAは触り始めたばっかでよう分からん。誰かいい方法あったら教えてくれませんかね。

 

ちなみに風邪のような何かでもうかれこれ熱が13日続いてる。医者にも分からんらしい。

アケコン(ジョイスティック)を自作した ②

何で10日も空いてるんですかね…

 

配線作業

 

大前提として、ゲームコントローラの入力がどう処理されてるかというと、

共通の信号線(電源線VCCか0V線GND)―――[ボタン(スイッチの役割)]―――ICの入力

となっていて、ボタンが押されるとICの入力が反応しボタンが押されたことを認識する。

 

f:id:suzumodoki:20150224183448j:plain

純正PS2コントローラ(Dualshock2)はフレキシブル基板(回路がシートに描かれてるやつ)でクソが付くほど作業がしにくく、何でも根元の部分を乗っ取ればいいという情報に行き当たった時にはこの制作は終了していた。

今回使ったのはHORIのPS2コントローラだが、ちゃんと手元のUSBコンバータに挿しても認識するし、どうせハードオフで200円だしと文句がない。

 

手順としては、

1.入力部分のカーボン皮膜?みたいなのを剥がして銅板を出す

1.1.振動用モーターとLRボタンに繋がってるケーブルは取っ払う

2.むき出しになった銅板と配線用ケーブルに予備ハンダした後、くっつける

2.1.LRボタンはスルーホールなので普通に配線

3.アケコンのボタンに各々配線

4.やったぜ

 

f:id:suzumodoki:20150224183451j:plain

↑OX□△ボタンにケーブルをハンダ付けしたとこ

 

ところで

なんでだか知らんが(ホリパッドのこの製品だけか?)共通線がスタートとセレクトだけ他のボタンと異なっている。ST,SLはモーターのGNDっぽいのと信号線を繋げると認識される。

他の通常ボタンも共通線がGNDなら共通化しちゃえばいいんだが、何かそんな感じしなかった(未検証)。

通常ボタンはプルアップ、ST,SLだけプルダウンなんじゃないかと思う。何でそんな面倒な仕様にしたんだ?

 追記20160329:そんなわけねぇのでこの一行を削除。

 

多忙につき作業を始めるまでは随分かかったが、やり始めてしまえば数時間で出来上がる代物であった。

というか、普段から半田ごてを握ってるヒトには鬱陶しすぎる内容になったが、そんな奴はこんな記事見なくてももっと良い物作れるので知ったこっちゃあないのだ。

f:id:suzumodoki:20150224185234j:plain

成果物。ひどかシンプルじゃ。

 

 

次回最終回 箱に詰めて完成編

アケコン(ジョイスティック)を自作した ①

未完成だが書き溜めるのもめんどいので出来た分から書いて上げることにした。

 

目的

使ってたアケコンがぶっ壊れ、直して使っていたが焼け石だったのでいっそ一から作ることにした。

 

素材

 かつてのアケコンは何が死んだのか知らないが認識しなくなったので、ボタンやレバーはそのまま流用可能。

その為用意するのは追加する幾つかのボタンと「ガワ」だけである。

 

・2mm*200mm*330mm ポリカーボネート板 2枚約1000円(今見たらAmazonからPrime付のやつ無くなってた)

・木材 適当 700円位

・千石で買ったスイッチ 幾つか 500円

・つよい接着剤 250円

東急ハンズで買った木材はカットしてもらったので、カット代も込で延べ2500円くらい。

 

追記20160329:ハードオフとかのジャンクコーナーを探すと、「セガサターン用のアケコン」なんてのが数百円で投げ売りされていることがある。この手の製品を買えばボタン一式と単品では1000円以上するレバーが纏めて手に入ってめちゃお得。多少壊れていても、パーツ取りと割り切れば申し分無い。

 

使用工具

30経のリーマーと電動ドリル一本あれば大体なんとかなるが、リーマー大先輩の素晴らしさがよくわかっていなかったので、いらん作業しちまった。後述。

 

手順1 穴あけ

レバーとボタンをはめ込む位置決めてドリルでさぱっと穴あける。この時、

真ん中にドリルで穴あける→リーマーで広げる

とやれば確実だったのに、「リーマーは孔を開けるものではありません!」みたいなよくわからん先入観が邪魔してきたため、

開けたい穴の円周上に穴を開ける→糸鋸でカットする→リーマーで綺麗にする

という意味の分からない作業をした。

f:id:suzumodoki:20150214193523j:plain

円周上にドリルでちっこい穴あけて→必死に糸のこで切って(左下)→リーマーで綺麗にする(左上)

ちなみにボタンの経が30だからって経30のリーマー貫通させると詰むので注意。

リーマーで穴を綺麗に広げながらボタンをあてがって調整する。

 

手順2 パーツ嵌め

ボタンは「カチッ」と言うまで嵌めればOK。レバーは一旦元のアケコンにどう取り付けられてたかちゃんと覚えてないと(というか写真でもとっとかないと)めんどくさいことになる(一敗)

ちなみにFSEX2の場合は「レバー、上から被さってる黒い輪っか、白いパーツ3個、Cリング、バネ、大きくて四角い白いの2個」からできている。この小さい白パーツが1個どっか行って偉い目にあった(一敗)

f:id:suzumodoki:20150214194703j:plain

ガバガバ工作力により、右端の穴あけ場所が大分ずれたりしてるがこの際使用に問題は無いので目を瞑る。

どうせ工業生産製品に素人の力では敵わないのだ。私が不器用なわけじゃあない。

 

手順0 下地づくり

この間に平行してもう一つ作らなくちゃならんものがある。

といっても木材をポリカ板に接着剤でくっつけるだけ。なるべく丁寧にくっつけたら一日放置する。

f:id:suzumodoki:20150214194607j:plain

CAVE手ぬぐいが写り込んだ。

ほんとにこれだけ。クソが付くほど単純。

ちなみに木材は高さ40、幅20とかだった気がする。長さは当然板の大きさに合わせる。

上側が開いているのはケーブルやらを出すため。

 

 

 

配線は後日。