注釈

こんにちは、FacebookのSunFounder Raspberry Pi & Arduino & ESP32愛好者コミュニティへようこそ!Raspberry Pi、Arduino、ESP32について、他の愛好者と一緒にさらに深く学びましょう。

なぜ参加するべきか?

  • 専門家によるサポート: 購入後の問題や技術的な課題をコミュニティやチームからの支援で解決できます。

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

  • 限定プレビュー: 新製品の発表や先行公開情報にいち早くアクセスできます。

  • 特別割引: 最新製品の特別割引を楽しめます。

  • 祝祭プロモーションやプレゼント: プレゼントキャンペーンやシーズンプロモーションに参加できます。

👉 私たちと一緒に探求し、創造してみませんか?[こちら]をクリックして、今すぐ参加してください!

2.9 磁場を感じる

このレッスンでは、Raspberry Pi Pico 2と リードスイッチ を使って、磁場の有無を検出する方法を学びます。リードスイッチは、磁場を利用して動作するシンプルな電気スイッチです。磁石がスイッチの近くに来ると、内部の接点が閉じ、電気回路が完成します。

必要なもの

このプロジェクトでは、以下の部品が必要です。

キットを購入するのが便利です。こちらのリンクからご覧いただけます:

名前

キット内の部品

リンク

Newton Lab Kit

450以上

Newton Lab Kit

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

番号

部品

数量

リンク

1

Raspberry Pi Pico 2

1

購入

2

Micro USBケーブル

1

3

ブレッドボード

1

購入

4

ジャンパーワイヤー

複数

購入

5

抵抗器

1(10KΩ)

購入

6

リードスイッチ

1

リードスイッチの理解

リードスイッチは、ガラスのカプセル内に封入された2本の薄い金属リードで構成されています。これらのリードは強磁性の材料でできており、わずかに離れて配置されています。磁場がない状態では、リードは離れており、スイッチは いた状態です。磁石がスイッチの近くに来ると、リードが磁化され、引き寄せられて接触し、回路が閉じます。

  • 磁石が近くにない場合: スイッチは いており、回路は未完成です。

  • 磁石が近くにある場合: スイッチは じており、回路は完成します。

img_reed_sche

回路図

sch_reed

デフォルトでは、GP14は低レベルで、磁石が近くにあると高レベルに変わります。

10KΩの抵抗は、磁石が近くにない場合でも、GP14が一定の低レベルを維持できるようにするために使用されます。

  • 磁石が近くにない場合:

    • リードスイッチは いています。

    • GP14 はプルダウン抵抗を通じて GND に接続されています。

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

  • 磁石が近くにある場合:

    • リードスイッチは じています。

    • GP14 はリードスイッチを通じて 3.3V に接続されています。

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

配線図

wiring_reed

コードの作成

リードスイッチの近くに磁石があるかどうかを検出し、その結果を表示するMicroPythonプログラムを作成します。

注釈

  • 2.9_feel_the_magnetism.pynewton-lab-kit/micropython から開くか、コードをThonnyにコピーして、「実行」ボタンをクリックするか、F5キーを押して実行します。

  • 正しいインタプリタが選択されていることを確認してください:MicroPython(Raspberry Pi Pico)。COMxx。

import machine
import utime

# GP14を入力ピンとして初期化
reed_switch = machine.Pin(14, machine.Pin.IN)

while True:
    if reed_switch.value() == 1:
        print("Magnet detected!")
        utime.sleep(1)  # 複数回の検出を避けるために遅延

コードが実行されると、以下の現象が観察されます。

  • 磁石が近くにない場合: メッセージは表示されません。

  • 磁石を近づけると: コンソールに「磁石が検出されました!」と表示されます。

  • 磁石を遠ざけると: メッセージが表示されなくなります。

コードの理解

  1. モジュールのインポート:

    • import machine: ハードウェア機能にアクセスします。

    • import utime: 時間関連の関数を提供します。

  2. リードスイッチピンの初期化:

    • reed_switch = machine.Pin(14, machine.Pin.IN): GP14を入力ピンとして設定します。

  3. メインループ:

    • while True: 無限ループを開始します。

    • if reed_switch.value() == 1: 磁石が近くにあるかどうかをチェック(GPIOピンがHIGHの場合)。

    • print("Magnet detected!"): メッセージを表示します。

    • utime.sleep(1): 複数回の検出を避けるために遅延を追加します。

効率的な検出のための割り込みの使用

リードスイッチの状態をループで常にポーリングする代わりに、割り込みを使用してリードスイッチの状態変化をより効率的に検出できます。

割り込みを使用すると、リードスイッチの状態を継続的にチェックする必要がなくなり、イベントが発生したときに即座にハンドラ関数が呼び出され、反応が速くなります。

割り込みを使用した修正版コード。磁石を近づけると「磁石が検出されました!」と表示され、メインプログラムは他のタスクを実行できます。

import machine

# GP14を内部プルダウン抵抗付きの入力ピンとして初期化
reed_switch = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

def magnet_detected(pin):
    print("Magnet detected!")

# 上昇エッジ(LOWからHIGHへの遷移)で割り込みを設定
reed_switch.irq(trigger=machine.Pin.IRQ_RISING, handler=magnet_detected)
  • def magnet_detected(pin): 割り込みがトリガーされると自動的に呼び出される関数です。

    • print("Magnet detected!"): 磁石が検出された場合にメッセージを表示します。

  • reed_switch.irq(trigger=machine.Pin.IRQ_RISING, handler=magnet_detected): リードスイッチピンに割り込みを設定します。

    • trigger=machine.Pin.IRQ_RISING: 上昇エッジ(ピンの値がLOWからHIGHに変わる時)で割り込みが発生します。

    • handler=magnet_detected: 割り込みが発生したときに呼び出す関数を指定します。

実用例

  • セキュリティシステム: ドアや窓が開かれたことを検出。

  • 位置センサー: 機械の動いている部品の位置を検出。

  • 近接検出: 磁石が近づいたときにイベントをトリガーします。

さらに実験してみる

  • LEDを制御する:

    別のGPIOピン(例:GP15)にLEDを接続し、適切な抵抗を使用します。割り込みハンドラを修正して、磁石が検出されたときにLEDを点灯させます。

    import machine
    
    reed_switch = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
    led = machine.Pin(15, machine.Pin.OUT)
    
    def magnet_detected(pin):
        led.value(1)  # LEDを点灯
    
    # 上昇エッジで割り込みを設定
    reed_switch.irq(trigger=machine.Pin.IRQ_RISING, handler=magnet_detected)
    
    # メインループ
    while True:
        # 磁石がないときはLEDを消す
        if reed_switch.value() == 0:
            led.value(0)
        machine.sleep(100)
    
  • 磁石が外れたことを検出する:

    落下エッジ(磁石が外れたとき)に対する別の割り込みを設定します。

    def magnet_removed(pin):
        print("Magnet removed!")
    
    reed_switch.irq(trigger=machine.Pin.IRQ_FALLING, handler=magnet_removed)
    

結論

Raspberry Pi Pico 2でリードスイッチを使用すると、磁場の有無を検出でき、セキュリティシステムからインタラクティブなプロジェクトまで、さまざまな応用が可能です。リードスイッチの配線方法や割り込みの利用方法を理解することで、効率的で反応の良いプログラムを作成する能力が向上します。

参考文献