注釈

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

参加する理由

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

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

  • 限定プレビュー: 新製品の発表や先行公開情報をいち早く手に入れましょう。

  • 特別割引: 新製品に対する特別割引を楽しめます。

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

👉 一緒に探求し、創造的な活動をしてみませんか?[こちら]をクリックして、今すぐ参加しましょう!

7.8 RFIDミュージックプレイヤーの構築

このプロジェクトでは、Raspberry Pi Pico 2、MFRC522 RFIDリーダー、パッシブバザー、WS2812 RGB LEDを使用して RFIDミュージックプレイヤー を作成します。RFIDタグに音符を記録し、それを読み取って、Picoが対応するメロディを再生し、カラフルなLED効果を表示します。このプロジェクトは、RFID技術と音楽生成を組み合わせており、RFIDカードやキーフォブにメロディを保存して共有できるようにします。

必要なもの

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

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

名前

キット内の部品

リンク

Newton Lab Kit

450+

Newton Lab Kit

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

番号

部品

数量

リンク

1

Raspberry Pi Pico 2

1

購入

2

Micro USBケーブル

1

3

ブレッドボード

1

購入

4

ジャンパーワイヤー

複数

購入

5

トランジスタ

1(S8050)

購入

6

抵抗器

1(1KΩ)

購入

7

パッシブ ブザー

1

購入

8

MFRC522モジュール

1

購入

9

WS2812 RGB 8 LEDストリップ

1

購入

部品の理解

  • MFRC522 RFIDリーダーモジュール: SPIで通信する低コストのRFIDリーダー。13.56 MHzで動作するRFIDタグにデータの読み書きができます。

  • RFIDタグ/キーフォブ: 小さなデータを保存できるパッシブデバイス。これらのタグに音符を記録します。

  • パッシブバザー: PWM信号を駆動すると音を発生させる電子部品。音符を再生するために使用します。

  • WS2812 RGB LED: NeoPixelとしても知られ、広範囲の色を表示でき、単一のデータラインで個別に制御できます。

回路図

sch_music_player

配線図

wiring_rfid_music_player

コード作成

2つのスクリプトを作成します:

  • 6.5_rfid_write.py: RFIDタグに音符を保存するためのスクリプト。

  • 7.8_rfid_music_player.py: 保存された音符を読み取り、メロディを再生するスクリプト。

注釈

この時、 mfrc522 フォルダ内のライブラリを使用する必要があります。Picoにアップロードされているか確認し、詳細なチュートリアルは Picoにライブラリをアップロード を参照してください。

  1. 6.5_rfid_write.py ファイルを newton-lab-kit/micropython から開くか、このコードをThonnyにコピーして、「実行」ボタンをクリックするか、F5キーを押して実行します。

    from mfrc522 import SimpleMFRC522
    from machine import Pin, SPI
    
    # RFIDリーダーの初期化
    reader = SimpleMFRC522(spi_id=0, sck=18, mosi=19, miso=16, cs=17, rst=9)
    
    def write_to_tag():
        try:
            data = input("Enter data to write to the tag: ")
            print("Place your tag near the reader...")
            reader.write(data)
            print("Data written successfully!")
        finally:
            pass
    
    write_to_tag()
    
  2. 実行後、シェルに EEFGGFEDCCDEEDD EEFGGFEDCCDEDCC と入力し、RFIDタグをリーダーに近づけて「歓喜の歌」の楽譜を保存します。確認メッセージ「データが正常に書き込まれました!」が表示されます。

  3. 7.8_rfid_music_player.py ファイルを newton-lab-kit/micropython から開くか、このコードをThonnyにコピーして、「実行」ボタンをクリックするか、F5キーを押して実行します。

    from mfrc522 import SimpleMFRC522
    import machine
    import time
    from ws2812 import WS2812
    import urandom
    
    # WS2812 LEDの設定
    # ピン0に8個のWS2812 LEDストリップを初期化
    ws = WS2812(machine.Pin(0), 8)
    
    # MFRC522 RFIDリーダーの設定
    # 特定のピンでSPIを使ってRFIDリーダーを初期化
    reader = SimpleMFRC522(spi_id=0, sck=18, miso=16, mosi=19, cs=17, rst=9)
    
    # バザー音符周波数(ヘルツ)
    NOTE_C4 = 262
    NOTE_D4 = 294
    NOTE_E4 = 330
    NOTE_F4 = 349
    NOTE_G4 = 392
    NOTE_A4 = 440
    NOTE_B4 = 494
    NOTE_C5 = 523
    
    # ピン15にバザー用PWMを初期化
    buzzer = machine.PWM(machine.Pin(15))
    
    # 音符周波数に対応する音符のリスト
    note = [NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5]
    
    # 指定された周波数と継続時間でバザーにトーンを再生する関数
    def tone(pin, frequency, duration):
     pin.freq(frequency)  # バザーの周波数を設定
     pin.duty_u16(30000)  # デューティサイクルを50%に設定
     time.sleep_ms(duration)  # 指定された継続時間だけ音を鳴らす
     pin.duty_u16(0)  # デューティサイクルを0にして音を止める
    
    # 指定されたインデックスでWS2812 LEDをランダムな色で点灯させる関数
    def lumi(index):
     for i in range(8):
         ws[i] = 0x000000  # すべてのLEDを消す
     ws[index] = int(urandom.uniform(0, 0xFFFFFF))  # 指定されたインデックスのLEDにランダムな色を設定
     ws.write()  # WS2812 LEDsに色データを書き込む
    
    # 音符テキストをインデックスにエンコードして、対応する音符を再生する関数
    words = ["C", "D", "E", "F", "G", "A", "B", "N"]  # 音符をテキスト文字にマッピング
    def take_text(text):
     string = text.replace(' ', '').upper()  # 空白を削除し、テキストを大文字に変換
     while len(string) > 0:
         index = words.index(string[0])  # テキスト内の最初の音符を検索
         tone(buzzer, note[index], 250)  # バザーで対応する音符を250ms再生
         lumi(index)  # 対応する音符のLEDを点灯
         string = string[1:]  # 次の文字に進む
    
    # RFIDカードから読み取って保存された楽譜を再生する関数
    def read():
     print("Reading...Please place the card...")
     id, text = reader.read()  # RFIDカードからIDと保存されたテキストを読み取る
     print("ID: %s\nText: %s" % (id, text))  # IDとテキストを表示
     take_text(text)  # カードに保存されたテキストから楽譜を再生
    
    # RFIDカードから読み取り、対応する楽譜を再生
    read()
    
  4. 実行後、コンソールに「タグをリーダーの近くに置いてください...」と表示されます。

    RFIDタグをリーダーに近づけると:

    • Picoがタグのデータを読み取ります。

    • コンソールにタグのIDとテキストが表示されます。

    • バザーがタグに保存された音符に対応するメロディを再生します。

    • WS2812 LEDが音楽に合わせたエフェクトで点灯します。

コードの理解

  • RFIDとのインタラクション:

    • SimpleMFRC522 クラスはRFIDタグへの読み書きを簡素化します。

    • データの書き込み: write_to_tag() でユーザー入力がタグに書き込まれます。

    • データの読み取り: read_and_play() で、タグがリーダーに近づけられた時にデータが読み取られます。

  • 音楽の再生:

    • 音符辞書: note 文字が周波数にマッピングされます。

    • 音符の解析: RFIDタグからのテキストはクリーンアップされ、1文字ずつ繰り返し処理されます。

    • 音符の再生: 各文字に対応する周波数がバザーで再生されます。

  • LEDエフェクト:

    • WS2812制御: ws オブジェクトはRGB LEDを制御します。

    • LEDを点灯させる: 音符ごとに、対応するLEDがランダムな色で点灯します。

  • タイミング:

    • 音符の継続時間: 各音符は300ミリ秒間再生されます。

    • 音符間の間隔: 音符の間には100ミリ秒の短い間隔があります。

さらに実験する

  • 自分のメロディを作成:

    • RFIDタグに異なる音符を記録します。

    • 音符C、D、E、F、G、A、B、N(休符)を使いましょう。

    • 自分の音楽RFIDタグを友達と共有できます。

  • 音符の範囲を広げる:

    • 追加の周波数を定義して、さらに多くのオクターブを追加します。

    • 音符辞書を適宜更新します。

  • 視覚的な改善:

    • light_led関数を変更して、さまざまなLEDパターンを作成します。

    • 音楽とLEDエフェクトをより密接に同期させます。

  • 複数のタグで異なる曲を再生:

    • 複数のRFIDタグに異なるメロディをプログラムします。

    • シンプルなRFIDベースの音楽ライブラリを作成します。

制限事項の理解

  • RFIDタグのデータ保存:

    • RFIDタグには保存容量が限られています(MFRC522の場合、通常は最大48文字まで)。

    • 音楽のシーケンスは簡潔に保ちましょう。

  • 音質:

    • パッシブバザーは単純な音しか再生できません。

    • より良い音質を求めるなら、アクティブスピーカーを使い、DAC出力を使用してください。

  • RFIDタグの互換性:

    MFRC522リーダーと互換性のあるRFIDタグを使用してください。

結論

あなたは、Raspberry Pi Pico 2を使ってRFIDミュージックプレイヤーを作成しました!このプロジェクトは、RFID技術、音楽生成、LED制御を組み合わせ、インタラクティブで楽しい体験を提供します。RFIDタグにメロディを保存することで、さまざまな曲を簡単に共有し、再生できるようになります。