注釈

こんにちは!SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community(Facebook)へようこそ! Raspberry Pi、Arduino、ESP32について、他の愛好家と共にさらに深く探求しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの支援を受けて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを高めましょう。

  • 独占プレビュー:新製品の発表やプレビューを早期にアクセスできます。

  • 特別割引:最新製品を独占的な割引価格で楽しめます。

  • 祭りのプロモーションとギフト:ギブアウェイや祝日のプロモーションに参加します。

👉 私たちと一緒に探索し、創造してみませんか?[こちら]をクリックして今日から参加しましょう!

2.7 左右のトグル

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

必要なもの

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

全キットを購入するのが便利です。リンクはこちらです:

名称

このキットに含まれるアイテム

リンク

Newton Lab Kit

450+

Newton Lab Kit

以下のリンクから個別に購入することもできます。

SN

コンポーネント

数量

リンク

1

Raspberry Pi Pico 2

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.inonewton-lab-kit/arduino/2.7_toggle_left_right から開くことができます。

  • または、このコードを Arduino IDE にコピーしてください。

  • Raspberry Pi Pico 2 ボードを選択し、適切なポートを設定した後、「Upload」をクリックしてください。

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. スイッチピンの設定:

    switchPin(GP14)を入力として設定し、スイッチの状態を読み取ります。

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

    スイッチの現在の状態を読み取ります。右に切り替えたときはHIGH、左に切り替えたか中間位置の場合はプルダウン抵抗のためLOWになります。

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

    スイッチが左に切り替えられたとき(GP14がHIGHを読むとき)は「ON」と出力し、右に切り替えられたとき(GP14がLOWを読むとき)は「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をオンまたはオフにするようにコードを変更します。

  • 複数のスイッチ:異なるアクションを制御するために、より多くのスイッチを追加してみてください。

  • デバウンシング:スイッチのバウンスを処理するためにソフトウェアデバウンシングを実装します。