皆さんこんにちは。yossyです。
今回はRaspberryPi Picoでスイッチを使う方法について解説します!
スイッチを使えば、ボタンを押して装置を操作できたり、特定の処理を実行することができるなど、工作の幅が広がります。
スイッチの使い方
それでは、スイッチの使い方について解説します。
今回は、スイッチを押すとThonnyのシェルに「スイッチが押されました!」と表示するプログラムを作成します。
用意するものは次の通りです。
- タクトスイッチ(押しボタン)
- ブレッドボード
- ジャンパーワイヤー

言語はMicroPythonを使用します。
まだラズピコのセットアップが済んでいない人は、下の記事から方法が確認できます!

スイッチについて
スイッチは押すと内部の接点が接触し、電気を通すことで動きます。
一般的には押したときに電気が流れるノーマルオープンが使われます。
一方で、非常停止ボタンなどでは通常時は電気がながれ、押されると電気が途切れるノーマルクローズが使われます。
万が一スイッチが壊れた故障しても安全に機械が停止するような設計です。
今回使うスイッチは一般的なノーマルオープンのスイッチです。
プルアップ・プルダウン
スイッチを使う時に、ピンにそのままスイッチをつなごうとするのはよくありません。
スイッチがオフ(接点がつながっていない状態)の時、ラズピコのピンはどこにもつながっていません。
そうなるとノイズに弱くなってしまい、思わぬ動作をすることがあります。
そこで、抵抗を使って回路を作成することで、動作に影響を与えないようにします。
これがプルアップ・プルダウンの概要です。
また、プルアップとプルダウンそれぞれの違いは
- プルアップ:スイッチがオフのときに電気が流れる
- プルダウン:スイッチがオンのときに電気が流れる
というものです。

普段のイメージではプルダウンを想像しますが、プルアップのほうがよく使われます。
ラズピコには内臓のプルアップ抵抗があるので、それを使えば面倒な配線なく簡単にスイッチを使うことができます。
この記事でもラズピコの内蔵プルアップ抵抗を使用します。
プルアップ・プルダウンについてわかりやすく解説しているサイトがあるので、気になる方は御覧ください


回路


画像のように配線します。
スイッチの片側の2つの足に、それぞれGNDピンと16番ピンを接続します。
スイッチはブレッドボードにしっかり差し込まないと正しく動作しないので、きちんと押し込みましょう。
プログラム
from machine import Pin
import time
sw = Pin(16, Pin.IN, Pin.PULL_UP)
while True:
if sw.value() == 0:
print("スイッチが押されました!")
time.sleep(0.1)
プログラムはこの様になっています。
それぞれポイントごとに解説します。
from machine import Pin
import time
まずは、ラズピコのピンを使用するためにmachineモジュールからPinを、時間を使った制御をするためにtimeモジュールを読み込みます。
sw = Pin(16, Pin.IN, Pin.PULL_UP)
この部分では、16番ピンを入力モードにして、スイッチの状態を取得できるようにしています。
Pin.PULL_UP
は、ラズピコに内蔵されているプルアップ抵抗を使用する設定です。
while True:
if sw.value() == 0:
print("スイッチが押されました!")
time.sleep(0.1)
メインの処理です。
まず、while True:は中のコードを無限に繰り返します。
if文はif 条件式:
で条件式を満たしたときに中のプログラムが実行されます。
今回の条件式はif sw.value() == 1:
です。sw.value()
はスイッチの状態を取得するものです。
今回はプルアップ抵抗を使用しているので、if文は
- sw.value()が0のとき(スイッチが押されたとき)→シェルに「スイッチが押されました!」と表示する。
のように動作します。
最後にtime.sleep(0.1)
は、CPUの負荷を下げたり、スイッチのチャタリング(ノイズによる誤検出)を防ぐために0.1秒待つ処理です。
まとめ
今回はRaspberry Pi Picoでスイッチを使う方法について紹介しました。
ラズピコ内臓のプルアップを使うことで、自分で配線する必要なく簡単にスイッチを使うことができます。
また、他の装置と組み合わせるといろいろ応用できます。
例えば、LEDを点灯させるプログラムと組み合わせると、スイッチを押すとLEDが光るプログラムを作れます。


ぜひいろんなことを試してみてください!