Raspberry Pi Picoでリレーを順番制御|スイッチ1回で複数操作を自動化

目次

はじめに

知人から、少し面白い相談を受けました。とある機器を特殊なモードへ入れるために、

  • スイッチAを押す(通電する)
  • 数秒保持
  • 次にスイッチBを押す(通電する)
  • さらに一定時間保持

という操作が必要とのこと。しかも、

  • 押す順番
  • 押している時間

が重要で、人が毎回操作するのは面倒です。そこで今回は、

「1回スイッチを押すだけで、自動的に順番通りボタン操作する装置」

を Raspberry Pi Pico で作って見ようと思います。最終的には、リレーモジュールを使い、

人間がボタンを押したのと同じ状態

を外部回路側で再現します。ただし、いきなり実機へ接続するのは危険なので、まずはLEDで動作確認しながら進めます。

やりたいこと

最終的な動作イメージはこんな感じです。
スタートスイッチ(モーメンタリ)押下 → AスイッチON → 5秒保持 → AスイッチOFF → BスイッチON → 3秒保持 → BスイッチOFF

つまり、時間付きの順番制御です。これは実はかなり多くの機器で使われています。
例えば
 ・隠しメンテナンスモード
 ・初期化モード
 ・設定モード
 ・サービスモード

まずLEDで確認する理由

今回、かなり実際の開発に近い要望となっています。
そのため、
・入力確認 → スイッチがよめるか
・出力確認 → LEDが制御できるか
・本番機器 

という順番で進めることにしました。いきなり実機接続して配線ミスや仕様の読み違えを避けたいと考えました。

スタートスイッチを作る

最初にやるのは、

「スイッチを押したことをPicoが検知できるか」

です。ここで重要なのが「プルアップ」です。

プルアップとは

GPIO入力は、何も接続しないと不安定になります。スイッチをただ配線すると不安定ということです。
これを「フローティング」と呼びます。そこで、

通常時は1に固定

しておきます。これがプルアップです。(不安定なものを引っ張り上げ(プルアップ)て、1にする)
そしてスイッチを押すと、GPIOがGNDへ接続され0になります。つまり、

状態GPIO
通常時1
押下0

になります。混乱しやすいですが「スイッチを押したら0」が正常な状態にしました。

使用部品

部品用途
Raspberry Pi Pico制御
タクトスイッチ(モーメンタリ)スタート入力
LED×2A,Bスイッチ代用
220Ω抵抗LED保護
ブレッドボード配線
ジャンパワイヤ配線

配線

モーメンタリスイッチ

Pico接続
GP15スイッチ
GNDスイッチ

LED

LED:Aスイッチ代用

Pico接続
GP14抵抗
抵抗LED
LEDGND

LED:Bスイッチ代用

Pico接続
GP13抵抗
抵抗LED
LEDGND
from machine import Pin
import time

switch = Pin(15, Pin.IN, Pin.PULL_UP)

led_a = Pin(14, Pin.OUT)
led_b = Pin(13, Pin.OUT)

while True:

    if switch.value() == 0:

        print("start")

        # A ON
        led_a.on()
        time.sleep(5)

        # A OFF
        led_a.off()

        # B ON
        led_b.on()
        time.sleep(3)

        # B OFF
        led_b.off()

        print("finish")

        # 誤連続動作防止
        time.sleep(1)

    time.sleep(0.01)

この時点でできていること

すでに本番にかなり近いことができています。GPIOをつかった順番制御ができています。
LEDへの入力をリレーのトリガーにすればよいだけです。

プルアップ処理したおかげで、モーメンタリのスタートスイッチを長押ししたり連打しても破綻しないようになっています。

次回予告

次は実際に、
 ・リレーモジュール
 ・外部回路
へ進みます

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次