PSoC CapSenseで静電容量タッチセンサを自作した
回路などが間違っている事に気がつきました
正しい実装は次の記事へ。
使った部品の説明などはこのまま下へ。
*********************************************
できたっぽい。ひさしぶりにマイコンいじった。
銅箔テープの部分に指が近づけると電気容量の乱れるので、それをPSoC CY8C21334のCapSense機能で検出してLEDを光らせている。
コードもbitbucketにアップしました
(音小さい)
LEDは点滅させたくてさせているんじゃないんだけど、してしまっている。
もう少し抵抗値などの調整が必要らしい。
静電容量タッチセンサはメカニカルな部品が無いので、ビデオの最後にやっている様に、何の変哲もない壁に埋め込んでその上に人の手が乗っているかを検出したりできる。
防水加工も容易だし、銅箔等を使えば曲面に埋め込む事も出来る。
実際ヨーロッパの寒いところに行くと信号機やエレベータのボタンが凍結防止のために静電容量センサで実装されていたりする。
PSoCのCapSenseはワンチップで静電容量センサを簡単に実装できるパッケージで、商業的にはSONYのオーディオコンポやAppleのiPodのホイールなんかにも使われていてずいぶん潤っているらしく、セミナーも無料だし基盤は配るしタダメシも出てくる。
次は複数のcapsenseを使えるようにしてみる予定。
■必要な部品
リンク先は買ったお店の商品ページ。
- PSoCマイコン CY8C21334-24PVXI(20pin)
capsenseがついているマイコン。いろいろ探した結果、これをchip1stopで買うのがコストパフォーマンスが一番良いという結論になった - 秋月のSSOP変換基板
CY8C21334がSSOPという超小さいパッケージしか無いので、ブレッドボードに刺せるように足幅を広げる基盤。28ピンなので8ピン余るけど安いからこれを使う。 - 銅箔テープ たしか千石で買ったと思う。薄くて平べったい電極ならなんでも良さそう
あとは、秋月で買ったPSoC MiniProgというUSB接続の書き込み機と、ブレッドボードとLEDとクリップとベニヤ板と変換基板のピンヘッダ(オス)。
■センサー部分の制作
銅箔テープを千石で買ってきて適当な木の板に平行に貼る。裏に糊がついていたので楽だった。
CY3235 CapSense-ProxDetでは2.2kΩの抵抗と0.1μFのキャパシタがついているらしいが、手持ちのPSoC Expressセミナーの時にもらったCY3121では何もなくCY8C21434に直結しているように見えるので、これでいいのかも。
■マイコンのはんだづけ
今回はんだづけはここだけ。
フラックスをたっぷり塗って、足に沿ってさっさっと撫でる。
■PSoC Designerでのデバイス設定
新規プロジェクトをCY8C21334 24PVXI(20pin)で開始して、
Device EditorでUser ModulesからCap Sense(CSD)を配置。
「Select CSD with clock prescaler」を選択した。
PSoC入門:PSoC First Touch編 – MeRLマイコンブの記事ではwithout clock prescalerを選んでいるが、digital/analog block消費量も変わらないのでclock prescalerにしてみた。
Interconnect Viewで、CSD_1をplaceしてから右クリックすると「CSDウィザード」というのがあるのでそれを使う。
センサの数を1、スライダーを0にしてPORT0_1を左上にドラッグアンドドロップして「OK」
すると、CSD_1に接続されている。
いままでUARTやADCモジュールではInterconnect Viewで自分で接続していたが、その必要が無くなっている。
CSD_1の設定を確認。Pinの設定をしておく。
最後に、PORT0_0でLEDを光らせるためにDriveをStrongに変更
ピン割り当て
Generate Applicationして、Cでプログラムを書く。
■PSoC Designerでのプログラミング
shokai / CapSense LED / source — bitbucket.org
main.c
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#define _BV(BIT) (1<<BIT)
#define sbi(BYTE,BIT) (BYTE |= _BV(BIT))
#define cbi(BYTE,BIT) (BYTE &= ~_BV(BIT))
#define LED_ON() sbi(PRT0DR, 0);
#define LED_OFF() cbi(PRT0DR, 0);
void main()
{
M8C_EnableGInt;
CSD_1_Start();
CSD_1_InitializeBaselines();
CSD_1_SetDefaultFingerThresholds();
while(1){
CSD_1_ScanAllSensors();
CSD_1_UpdateAllBaselines();
if(CSD_1_bIsSensorActive(0)){
LED_ON();
}
else{
LED_OFF();
}
}
}
■マイコンの回路を作る
データシートを見て、PSoC MiniProgから接続が必要なSCLK、SDATA、XRES、VDD(VCC)、VSS(GND)の位置を確認
その通りに配線。電源はUSBのPSoC MiniProgから給電できる。
この時点でLEDを点灯させるだけのプログラムを書いて、マイコン単体で動くか確認した。
さきほどのプログラムを書き込んで、
PORT0_1とPORT1_5からクリップで銅箔テープに接続して完成。
さわると光る。