圧電素子は電圧をかけると音が出ますが、逆に音(衝撃)を感じると電圧を生じます。
この性質を利用して、圧電素子を衝撃センサとしてLEDを光らせてみることにしました。
圧電素子はRaspberryHabuBasicについているものを使います。
RaspberryHabuの圧電素子はスピーカとして使えるように配置されていますが、そばのジャンパーピン(下の画像の黄色の線で囲ってあるところ。画像ではすでに外してある。)を外すことにより回路との接続が切れるようになっています。
画像の上側のピン(上の画像の赤い丸印)がRaspberryHabu上の抵抗(2kΩ)とつながっており、その先に圧電素子がつながっています。圧電素子のもう片方の端子はGNDにつながっています。画像の上側のピンから別に用意した抵抗(10kΩ)をつないでTD62703AGPを通して74HC02を使ったフリップフロップ回路(SRラッチ)につなぎます。
RaspberryHabuのデジタル出力についているTD62783は入力耐圧15V、出力耐圧が50Vと高く、電流を500mAに制限する入力抵抗も入っており、RaspberryHabuにつないだ機器の保護回路となっています。
圧電素子から発生する電圧がとても高いことがあるのですが、74HC02の入力耐圧は6V程度なので、圧電素子から高い電圧がかかった時の保護のためにこのTD62783APGを外してブレッドボードに刺して保護回路として使います。
フリップフロップの出力をデジタル入力につなぎます。
フリップフロップのリセット信号につなぐRaspberryHabuからの配線はデジタル出力ですが、TD62783APGを外しているため脇のRaspberryPiから直接つながっているポートを使います。画像では一列のピンソケットをはんだづけしてあります。
一定時間ごとにフリップフロップをリセットするようにします。
信号を検知してから4秒後に1秒間のリセット信号を流すようにしました。
/* Lisence CC 0*/ #include "stdio.h" #include "wiringPi.h" #include "unistd.h" #define DIN 0 #define RESETPIN 3 int main(void) { wiringPiSetup(); int i = 0; pinMode(DIN,INPUT); pinMode(RESETPIN,OUTPUT); digitalWrite(RESETPIN,0); while(1){ i=digitalRead(DIN); if(i == 1){ printf("ON %d n",i); sleep(4); digitalWrite(RESETPIN,1); sleep(1); digitalWrite(RESETPIN,0); } } return 0; }
圧電素子を軽く叩いて衝撃を発生させます。
衝撃を検知すると5秒以内にON 1と表示され、そのあと放置すると画面はそのままになります。
圧電素子を衝撃センサとして窓につけて防犯システムに使うこともあります。
使い方次第でいろいろできそうです。