本記事の内容
Raspberry Pi Picoで超小型振動スイッチ(AT-407)を使用して、傾きを検知する装置を作成します。思いのほか安価で簡単に作れますので、是非試してみてください。
必要なもの
振動スイッチ(AT-407)は秋月電子で購入しました。一つ100円と、とてもお手頃価格なことに驚きです。
紙一枚ですが参考資料も付属しているので、とてもありがたいです。

振動スイッチ(AT-407)の仕組み
安いのもそのはず、振動スイッチ(AT-407)はびっくりするくらいシンプルな構造でできています。

円筒形の内部は空洞になっていて、金属の球体が入っています。素子が-30度以下の状態では、球体が片側に寄って端子と接続しないため、両端はOFFとなっています。(左)
一方で素子が30度以上に傾くと、球体が逆側に移動して端子と接続し、両端がONになります。(右)
ご想像に値しますが、傾けたタイミングで瞬間的にONとOFFが繰り返すチャタリングが発生しやすいです。チャタリングを防止する場合は、コンデンサを挟む必要がありますので、電圧に応じたコンデンサを用意してください。
Raspberry Pi Picoで振動スイッチを使用する
LEDで検知した振動を表示
まずは簡単に、検知した振動をLEDに表示したいと思います。こちらは、Raspberry Pi Picoも不要なくらい簡単な回路です。

GP14から振動スイッチ⇒赤色LED⇒1kΩ抵抗を介して、GNDに繋いでいます。(本当は3V3から繋げば良いのですが、あいにく画面右側は別の配線が残っているため、GP14を使用しました。)
以下のプログラムコードでGP14に3.3Vを出力すると、振動スイッチの傾きに応じてLEDが点灯・消灯します。
from machine import Pin
led=Pin(14,Pin.OUT)
led.value(1)

Shell上に検知した振動を表示
続いて、検知した振動をThonnyのシェル上に表示させたいと思います。Pin.PULL_UPでGP14のプルアップ抵抗を有効にして、GNDとの接続有無を検知する方法になります。

回路としては、LEDを介さずに、GP14⇒振動スイッチ⇒1kΩ抵抗⇒GNDとなっています。どこが変わったのか分からないので、先ほどとの違いは赤丸で示しました。
プログラムコードは以下の通りです。horizontalとdiagonalに深い意味はありませんが、状態が変わったことを表示させるようにしました。
from machine import Pin
import time
Switch = machine.Pin(14, Pin.IN, Pin.PULL_UP)
while True:
time.sleep(1)
if Switch.value() == 1:
print("horizontal")
else:
print("diagonal")

余談ですが、振動スイッチを介したGP14を、GNDでなく3V3と接続した場合は、Pin.PULL_DOWNとなります。この辺はYoutube動画で丁寧な解説がありますので、こちらも参考にしてみてください。
最後に
以上、振動スイッチAT-407で傾きを検知する方法でした。今一つ使用例が思いつきませんでしたが、振動スイッチを使うとしたら、きわどい角度に固定して揺れを検知する地震計などでしょうか、、、?
(地震計としても、揺れの角度によっては検知できないこともありそうなので、なんか微妙ですが、、、)
面白い使用方法が思いつき次第、記事にしてみますので、ひとまず今回は振動スイッチの使い方の紹介にとどめておきます。
コメント