注釈

こんにちは!FacebookのSunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Raspberry Pi、Arduino、ESP32を他の愛好者と一緒に深く学びましょう。

参加する理由は?

  • 専門的なサポート: 購入後の問題や技術的な課題をコミュニティやチームの助けを借りて解決できます。

  • 学びと共有: ヒントやチュートリアルを交換し、スキルを向上させましょう。

  • 限定プレビュー: 新製品の発表や先行公開をいち早くチェックできます。

  • 特別割引: 新しい製品に対して独占的な割引を楽しめます。

  • 祭典のプロモーションやプレゼント: プレゼントや祝日プロモーションに参加しましょう。

👉 一緒に探求し、創造を楽しむ準備はできましたか?[ここ]をクリックして、今日から参加しましょう!

2.7 左右の切り替え

このレッスンでは、Raspberry Pi Pico 2 Wを使用して スライドスイッチ の位置(左または右)を検出し、その位置に基づいてアクションを実行する方法を学びます。スライドスイッチは、位置に応じて共通(中央)ピンを2つの外部ピンのいずれかに接続するシンプルな機械的デバイスです。

必要なコンポーネント

このプロジェクトでは、以下のコンポーネントが必要です。

全セットを購入するのが便利なので、こちらのリンクをチェックしてください:

名前

このキットのアイテム

購入リンク

Pico 2 Wスターターキット

450+

Pico 2 W Kit

以下のリンクから、コンポーネントを個別に購入することもできます。

SN

コンポーネント紹介

数量

購入リンク

1

Pico 2 Wの概要

1

2

Micro USBケーブル

1

3

ブレッドボード

1

買う

4

ジャンパーワイヤー

数個

買う

5

抵抗器

1(10KΩ)

買う

6

コンデンサ

1(104)

買う

7

スライドスイッチ

1

スライドスイッチの理解

img_slide

スライドスイッチには3つのピンがあります:

  • ピン1:スイッチを一方の位置(例えば、左)に切り替えたときに接続されます。

  • ピン2:共通ピン(中央のピン)

  • ピン3:スイッチをもう一方の位置(例えば、右)に切り替えたときに接続されます。

共通ピンの電圧を読み取ることで、スイッチの位置を検出できます。

回路図

sch_slide

スライドスイッチを右または左に切り替えると、GP14の電圧レベルが変わります。

10KΩの抵抗の目的は、スイッチが切り替えられたときにGP14が低く保たれるようにすることです(スイッチが完全に左または右に切り替えられていない状態)。

スイッチを切り替える際、機械的接点により「バウンス」と呼ばれる急激でノイズの多い信号が発生することがあります。GP14とGND間に接続されたコンデンサは、この急激な変動をフィルタリングし、よりクリーンな信号を提供します。

  • スイッチが右に切り替えられた場合:

    • ピン2(GP14)はピン1を通じて 3.3V に接続されます。

    • GPIOピンは HIGH (1)を読み取ります。

  • スイッチが左に切り替えられた場合:

    • ピン2(GP14)はピン3を通じて GND に接続されます。

    • GPIOピンは LOW (0)を読み取ります。

  • スイッチが中央の位置にある場合:

    • ピン2(GP14)は 3.3V または GND に接続されません。

    • プルダウン抵抗がGPIOピンを LOW (0)に保ちます。

    • コンデンサはスイッチバウンス(機械的な動きによるノイズ)を軽減します。

配線

wiring_slide

コード作成

注釈

  • 2.7_toggle_left_right.ino ファイルを pico-2w-kit-main/arduino/2.7_toggle_left_right から開きます。

  • または、このコードを Arduino IDE にコピーします。

  • Raspberry Pi Pico ボードと正しいポートを選択して、「アップロード」をクリックします。

const int switchPin = 14;   // スライドスイッチに接続されたGPIOピン
int switchState = 0;

void setup() {
  Serial.begin(115200);       // シリアルモニタを115200ボーレートで初期化
  pinMode(switchPin, INPUT);  // スイッチピンを入力として設定
}

void loop() {
  switchState = digitalRead(switchPin);  // スイッチの状態を読み取る

  if (switchState == HIGH) {
    Serial.println("ON");   // スイッチが左に切り替えられた
  } else {
    Serial.println("OFF");  // スイッチが右に切り替えられた
  }
  delay(200);  // シリアルモニタが溢れないように小さな遅延
}

コードが実行され、シリアルモニタが開かれている場合:

スイッチが左に切り替えられると「ON」、右に切り替えられると「OFF」が表示されます。

コードの理解

  1. シリアル通信の初期化:

    シリアル通信を115200ボーレートで開始します。これにより、シリアルモニタにメッセージを表示できます。

    Serial.begin(115200);
    
  2. スイッチピンの設定:

    スイッチピン(GP14)を入力モードに設定して、スイッチの状態を読み取ります。

    pinMode(switchPin, INPUT);
    
  3. スイッチの状態を読み取る:

    スイッチの現在の状態を読み取ります。右に切り替えられるとHIGH、左または中央の位置ではプルダウン抵抗によりLOWになります。

    switchState = digitalRead(switchPin);
    
  4. スイッチの位置に反応:

    スイッチが左に切り替えられると「ON」、右に切り替えられると「OFF」をシリアルモニタに表示します。

    if (switchState == HIGH) {
      Serial.println("ON");
    } else {
      Serial.println("OFF");
    }
    

代替案:内部プルアップ抵抗を使用

回路を簡略化し、コンポーネントの数を減らしたい場合、Picoの内部プルアップ抵抗を使用できます。ただし、従来のArduinoボードは内部プルダウン抵抗をサポートしていませんが、Raspberry Pi PicoはINPUT_PULLDOWNをサポートしていますが、Arduino環境ではサポートが異なる場合があります。この例では、INPUT_PULLUPを使用します。

  • 回路の変更:

    • 外部10KΩ抵抗とコンデンサを取り外します。

    • スライドスイッチの接続:

      • ピン1:PicoのGNDに接続。

      • ピン2:PicoのGP14に接続。

      • ピン3:接続しないか、GNDに接続(内部プルアップを使用するため)。

  • コードの変更:

    const int switchPin = 14;   // スライドスイッチに接続されたGPIOピン
    int switchState = 0;
    
    void setup() {
      Serial.begin(115200);          // シリアルモニタを115200ボーレートで初期化
      pinMode(switchPin, INPUT_PULLUP);  // 内部プルアップ抵抗を有効にする
    }
    
    void loop() {
      switchState = digitalRead(switchPin);  // スイッチの状態を読み取る
    
      if (switchState == LOW) {
        Serial.println("ON");    // スイッチがGNDに接続され、右に切り替えられた
      } else {
        Serial.println("OFF");   // スイッチが接続されておらず、プルアップでHIGHを読み取る
      }
      delay(200);  // シリアルモニタが溢れないように小さな遅延
    }
    

結論

このレッスンでは、Raspberry Pi Picoを使用してスライドスイッチを制御し、その位置に基づいてアクションを実行する方法を学びました。また、回路にプルダウン抵抗を実装して信頼性の高い読み取りを実現する方法と、内部プルアップ抵抗を使用して回路を簡素化する方法も学びました。

さらなる探求

  • LEDの制御:スイッチの位置に基づいてLEDをオンまたはオフにするようにコードを変更します。

  • 複数のスイッチ:異なるアクションを制御するために、さらにスイッチを追加してみましょう。

  • デバウンス処理:ソフトウェアでデバウンス処理を実装して、スイッチの残留バウンスを処理します。