見出し画像

アルミホイルで自作ボルテコントローラー

こちらは2020年度4月,CCS制作発表会オンライン用の記事になります.

他の記事はこちら↓

製作発表会オンライン ~ CCS春の陣2020


はじめまして.ㄘlニぼと申します.

情報が追えてなくてよくわからないですけど,サークル活動できないらしいですね.

という訳でサークル外(内?)から飛び入り参加です.対戦よろしくお願いします.

制作物

見出しの通りゲームのコントローラーです.動作は動画の通り,まあ遊べる.タッチセンサ式なので騒音は小さい.壁の薄い物件に住んでいる私でも安心して遊べます.


私の拙いプレイをご覧ください.


タッチセンサの仕組み

【Arduino】抵抗1本で作る静電容量式のタッチセンサ

こちらの記事を参考にさせて頂きました.詳しくはこちらへ.

・人がアルミホイルに触れているとき,アルミホイルと人体との間にコンデンサができる.

・電圧をLowからHighに上げるとき,コンデンサがあるとその充電の時間分電圧の上昇も遅れる.

ということを利用しています.

[出力ピン]-[抵抗]-[アルミホイル]-[入力ピン]と繋げ,出力をLowからHighに切り替えて入力がHighになるまでの遅延時間を測定,その時間が大きいならばタッチしているという判定.

//OUT_PIN (出力ピンの状態)
//IN_PIN (入力ピンの状態)

//これを何度も呼び出す
int GetSwitchState() {
    const int border = 100; //遅延時間のしきい値
    int count = 0;
    int state;
    
    OUT_PIN = 1; //出力ピンをHighに
    
    //入力ピンがHighになるまでcountを増やし続ける
    while(IN_PIN == 0) {
        count++;
    }
    
    //遅延時間がしきい値より大きければタッチしている判定
    if(count > border) {
        state = 1;
    }else {
        state = 0;
    }
    
    //出力ピンをLowにして放電するのを待つ
    OUT_PIN = 0;
    while(IN_PIN == 1);

    return state;
}

こんな感じ,今note上で書いただけなので動作確認はしていません.間違っていても知らないです.実際はもうちょっと手を加えています(※).

プログラミングを触ったことがある人なら分かると思いますが,やっていることは単純,なんとご家庭にあるアルミホイルとちょっとしたプログラムで簡単にタッチセンサが作れちゃうんです.いかがでしたか?

※タッチ時には常に1を返してほしいのに,実際は「1 0 0 1 0 0 1 0 0」のように0混じりの出力になってしまいます.ローパスフィルタ等を使ってうまく処理しましょう.


遅延時間

遅延時間は抵抗が大きいほど大きくなります.

遅延時間が大きいと...

利点: しきい値を決めやすくなります.触ってないときと触っている時の差がはっきりするので.ノイズにも強くなりそう.

欠点: 充電,放電時間が大きくなるため,反応が遅くなる,1回のタッチ判定にかかる時間も大きくなります.

用途がON/OFFを切り替えるスイッチとかだったら1MΩとか10MΩの抵抗を使うと遅延時間が大きくて作りやすいと思います.

しかし今回は音ゲー用,1MΩの抵抗とか使ったら縦連と長押しの区別をつけられなくなっちゃいます.


つまみ

ロータリーエンコーダを使って作ります.回転方法の判別はこれが好きです.波形のずれの関係をうまく使っていて面白い.

//befDat 前の信号の状態を2bitで表したもの
//curDat 現在の信号の状態を2bitで表したもの

if((((befDat<<1)^curDat) & 3) < 2){
    //順回転
}else{
    //逆回転
}

みたいな感じで処理できます.こちらも上記のままではダメでローパスフィルタ等が必要です.


いざコントローラー制作

以下のモノを用意しました.

・アルミホイル キッチンにあったもの,ほぼ¥0

・30φ丸棒木材 ¥300くらい

・発泡スチロールのプレート  ¥300くらい

・段ボール ¥0

PIC18F14K50-I/P ¥220 (☆)

水晶発振子(12MHz) ¥30 (☆)

・サージ電流緩和用コンデンサ 全部で¥50くらい (☆)

ロータリーエンコーダ(ノンクリックタイプ)¥90 × 2

・51kΩ抵抗(タッチセンサ用) 約¥1 × 6

・1kΩ抵抗(ロータリーエンコーダー入力プルアップ用) 約¥1 × 4

・基盤とか導線とか回路作るのに必要なもの ¥500くらい

(☆)がついているモノは3セット用意します,ピンの相性の問題(※)があるので.普通にボタンでコントローラー作るんだったら1セットで足りるんだけど...

☆ついている奴らをココの回路図のように組み立てて,段ボールと発泡スチロールプレートから良い感じにコントローラーのボディーを作って,丸棒木材をロータリーエンコーダに合うように穴をあけてつまみを作って...

Microchip Libraries for Applications(MLA)のUSBキーボードのサンプルを少し書き換えると自分だけの最強のUSBキーボードが作れます.これにタッチセンサとロータリーエンコーダの処理を加えてPICマイコンに焼きましょう.

参考

東京海洋大学 田原研究室 MPLAB X IDEの使い方

PIC18で始めるUSBデバイス自作 その1:サンプルプロジェクトを動かす


※抵抗51kΩの場合は以下の組み合わせでのみうまく動作します.(出力:RC2,入力:RC4),(出力:RC1,入力:RC5)


夢の壁薄物件で使える専用コントローラー!

完成です.アルミホイルを綺麗に貼るの難しすぎる,見栄えは犠牲になったのだ...

画像1

音ゲー向け自作タッチセンサは調整が地獄です.制作はおススメしません.大人しく引っ越しましょう.

いいなと思ったら応援しよう!