注釈
こんにちは、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+ |
以下のリンクから個別に購入することもできます。
番号 |
部品 |
数量 |
リンク |
|---|---|---|---|
1 |
1 |
||
2 |
Micro USBケーブル |
1 |
|
3 |
1 |
||
4 |
複数 |
||
5 |
1(S8050) |
||
6 |
1(1KΩ) |
||
7 |
パッシブ ブザー |
1 |
|
8 |
1 |
||
9 |
1 |
部品の理解
MFRC522 RFIDリーダーモジュール: SPIで通信する低コストのRFIDリーダー。13.56 MHzで動作するRFIDタグにデータの読み書きができます。
RFIDタグ/キーフォブ: 小さなデータを保存できるパッシブデバイス。これらのタグに音符を記録します。
パッシブバザー: PWM信号を駆動すると音を発生させる電子部品。音符を再生するために使用します。
WS2812 RGB LED: NeoPixelとしても知られ、広範囲の色を表示でき、単一のデータラインで個別に制御できます。
回路図

配線図
コード作成
2つのスクリプトを作成します:
6.5_rfid_write.py: RFIDタグに音符を保存するためのスクリプト。7.8_rfid_music_player.py: 保存された音符を読み取り、メロディを再生するスクリプト。
注釈
この時、 mfrc522 フォルダ内のライブラリを使用する必要があります。Picoにアップロードされているか確認し、詳細なチュートリアルは Picoにライブラリをアップロード を参照してください。
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()
実行後、シェルに
EEFGGFEDCCDEEDD EEFGGFEDCCDEDCCと入力し、RFIDタグをリーダーに近づけて「歓喜の歌」の楽譜を保存します。確認メッセージ「データが正常に書き込まれました!」が表示されます。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()
実行後、コンソールに「タグをリーダーの近くに置いてください...」と表示されます。
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タグにメロディを保存することで、さまざまな曲を簡単に共有し、再生できるようになります。
