PICAXEでタッチセンサー(タッチスイッチ)

    PICAXE
    07 /10 2015
    PICAXEにタッチセンサー(タッチスイッチ)の機能(touch16コマンド)があるのでやってみた。

    結論だけにしようかと思いましたがPICを使っている人も含めてやってみようとする方の参考になるかもしれないので経過も書きます。

    この機能はPICの CAPACITIVE SENSING (CPS) MODULE を使ったものだと思われる。
    タッチパッドと人体(指)との静電結合具合が16bitレジスタに値として入る。
    この値はCPUクロックの影響を受ける。 今回はPICAXE標準の4MHzです。

    これを使えばSW用の穴を開ける必要がないので防滴・防水(・防爆?)構造にできる。
    ただ、タッチパッドと指との静電結合具合が環境条件によってかなり変わることが容易に想像され、使い物なるかはやってみないと分かりません。
    また、ケースやパッドの表面が濡れているとアースされて動作しないかもしれません。

    タッチセンサーパッドについて(PICAXEのtouch16コマンド等から)
    直径約15~20mmの面の電極。
    タッチといっても直接電極に触れてはならない。(PICAXEが壊れる)
     電極は絶縁体で絶縁する。 PCBや2mm位のプラスチックを想定している。
      静電気が電極に飛ぶ恐れがあるので穴の開いている万能板は基本的には向かない。
    パッドの位置が機器の表面からは分からないので何かでマークする必要がある。

    フリスクのケースに15mm幅のアルミテープを貼ったものを使った。
    ケースの厚さ1.0mm
    PICAXE_Touch1.jpg PICAXE_Touch2.jpg
    PICAXE_Touch3.png
    タッチしている間LEDを点灯させる回路。
    PICAXEの「Touch Sensor Project Kit」のマニュアルを参考にしています。

    読み取り値の感じをdebug で読んでみる。
    電極の大きさや絶縁体の厚さとかで静電結合具合が変わるので値をみて置く必要がある。
    ただ、ダウンロードケーブルの有り無しで変わる可能性があるので目安程度か?
    #picaxe 08m2
    main:
     touch16 C.4, w0
     debug
     pause 100
    goto main
    w0の値はフリスクケースに触れるまでは0。
    指先が軽く触れると4~5万位、強く触れると2万位、手のひらで触れると1万位の値を示す。

    判断値5000でON/OFFさせてみる。(これはtouch16コマンドサンプルプログラムと同じ値) 
    #picaxe 08m2
    main:
     touch16 C.4, w0
     if w0 > 5000 then
     high C.2 ; LED on
     else
     low C.2 ; LED off
     end if
    goto main ; loop
    反応のレスポンスがよくない。
    ONは0.1秒位で何とか許せるが、OFFが0.5秒弱位と悪い。
    連打する用途に向かない。

    ダウンロードケーブル無しで動かすとNGとなった。
    スレッショルド5000だと消灯したままで動かない。
    2500だと点灯したまま。
    7500だと消灯したまま。

    と、色々やっているうちにPICAXEが壊れた。
    この固体は散々使ってきた物で過大な入力パルスが入ったりと恐らく劣化していたもの。ただ、それでも動いてきたのでタッチセンサーはPICAXEに負担をかける気がする。

    急遽14M2に変更。
    PICAXE_Touch4.png
    また、電源系も関係する可能性があるので念(安全)のため電池(実測4.70V)に変更した。今までは電源はAC/DCで5Vだった。
    #picaxe 14m2
    main:
     touch16 C.4, w0
     debug
     pause 100
    goto main ; loop
    通常0。
    フリスクケースに指先を1cm位に近づけると6万位。
    指先が触れると1.2万位。接触具合で余り変わらない。
    手のひらだと2cm位で6万位。触れると8000位の値を示す。

    接触する前から反応するので厄介である。
    接触の判断は4000以上1.5万以下で行うことにする。
    上記のプログラムにLEDの点灯消灯を入れてみる。
    #picaxe 14m2
    main:
     touch16 C.4, w0
     debug

     if w0 > 6000 AND w0 < 15000 then
     high B.2 ; LED on
     else
     low B.2 ; LED off
     end if
    goto main
    反応時間依然はイマイチだがうまくいく。
    これでダウンロードケーブルを外すと動かない。LEDが消えたまま。orz

    6000以上にしてみる。
    ダウンロードケーブルありでは1cm位で動く。(当然)
    ダウンロードケーブルを外すと動かない(消灯)。
    やる気無くなる。orz

    頑張って値を変えてやってみる。ダウンロードケーブルは書き込み後外す。
    1000:点きっぱなし。
    3500:点きっぱなし。
    3750:点きっぱなし。
    4000:通常点灯、触ると消えると動作が逆。(ダウンロードケーブルありでは正常。)
    4500:消えたまま(?)
    4750:OK。
    5000:消えたまま。

    やったー!!動きました。(途中であきらめそうになりました。)
    上記は値の順番に書いていますが値を上下させて追い込んで行って最後が4750でした。
    並べ直してから気が付きましたが4500が変で取り間違いかもしれません。

    点滅のレスポンスがよく普通のSWとして使えます。
    苦労しましたがいい感じで動きます。
    連打にも反応するので以前実験した「PICAXEでパワーLEDをPWM調光」と組み合わせれば防滴・防水型のランタンができそうです。(調整が面倒なので私はやりませんが)

    まとめ
    ・電源は電池にしないレスポンスが悪そう。
    正確な理由は分からないがAC電源を介してグランド(大地)への容量結合具合か電源の1-2次間の 絶縁(リーク電流)が関係していると思われる。
    基本的に電池の方が簡単に動くでしょう。
    ・判断値は5000前後のようである。
    サンプルプログラムで5000、今回4750なため。
    なお、複数のタッチセンサーの場合、それぞれ微妙に異なるので厳密には個別の調整が必要です。

    なお、touchという8bitの値を返す命令もあるが今回の結果からすると粗すぎてチョット厳しそう。(PICAXEとしても非推奨)
    複数のタッチセンサーを使うなど変数が不足する場合には使わざるを得ないかもしれない。

    YouTubeにPICAXEでのタッチセンサーの動画をUPされている外国の方がおられました。 動画の埋め込みコードを公開しておられますので動作イメージの参考に貼り付けさせて頂きました。
    これも電源は電池です。 タッチ部の万能板の穴は気になりますが。


    以上 (疲れました。)
    関連記事

    コメント

    非公開コメント

    Friendship 7

    浅く広くのハード屋です。
    コメントへの返信には過大な期待をしないで下さい。 非公開コメントは停止しております。 不適切なコメントはFC2で自動的にはじかれます。
    リンクフリーですが盗作は禁止です。
    本ブログの内容を参考にされる場合はあくまで自己責任でお願い致します。