スイッチで音を奏でる!リレーでメロディを演奏!
なんてできたら、魅力的ですよね。今日はそんな夢を実現した企画についてお話していこうかと思います。
みなさんこんにちは、Jinです。最近は寒さも増してきましたがいかがお過ごしでしょうか。
MusicRelayという企画が始動したのは、私が高専に入って2年目に入ろうとしていた春休みのこと。当時リレー電卓の改修を行う企画を担当していた私は、このリレーという部品と出会い、音を奏でてみたいと思うようになりました。
この企画はJLCPCBのご提供で実現しております。併せてご覧くださいませ。
概要
今回紹介するのはEleMagHarmony企画の一端を担うMusicRelayという企画です。これはEleMagHarmonyのすべての土台となる企画であり、ここが原点なので最初にこちらから説明していきます。EleMagHarmony自体はまた別の記事にてご紹介させていただきますので、楽しみにしていてください!
さて、MusicRelayはリレーという部品を用いて演奏を行っています。リレーについて、詳しくは以下の記事にて解説していますので是非ご覧ください。
上の記事を要約すると、リレーというのはつまり電磁石というスイッチであるということです。皆さんご存じの通り、家電などのスイッチを切り替えるときに「カチッ」という音が鳴りますよね。
これはスイッチの中で接点が動くときに、振動するためこのような音が鳴るのですが、この振動を周期的にしてみるとどうでしょうか。
音というのは縦波であり、振動がそのまま空間を伝播して空気を震わせることで発生します。数百Hzの振動をスイッチで起こせば、その音階の音が鳴らせるのです。
マイコンで周波数やデューティ比を制御した矩形波の信号(パルス)を出力し、そのレベルをリレーの12Vに変換してリレーに入力し、MusicRelayは実現します。
また音を鳴らすだけでは単調で面白くないので、Midiファイル解析を行い、その音階から周波数を求めマイコンにタイミングを合わせて周波数情報などを送信するアプリの作成も行いました。
構成
先述したMusicReleyの企画を実現するために、PCでMidiファイルの解析を行うアプリ(ソフトウェア)、解析した周波数情報を元にパルス幅や周波数を制御するマイコン側のプログラム(ファームウェア)、マイコンから出力された信号を元にリレーに電流を流す回路(ハードウェア)が必要になります。
この3つの分野でそれぞれの設計や製作を行っていくこととなります。
ソフトウェア
C#を用いたwindowsのフォームアプリを作成します。UIの設計は下の画像のようになっています。
まずSelectComPortでコンボボックスからマイコンのComポートを選択し、RelayConnectというボタんをクリックしてMusicRelayのプロセスを開始します。
その後プレイリストモードorテストモードを選択できます。プレイリストモードは.m3uファイルのプレイリスト形式でループ再生やランダム再生にも対応しており、まさに電子演奏に特化した音楽プレイヤーとなっています。
テストモードは一曲を奏でるためにあります。これはプログラムのデバッグ又はmidi楽曲のテストに使えるため、テストモードとして備わってあります。
これがテストモードの様子です。テストモードを選択すると下にテキストボックスが生えてきて、ここにログメッセージが表示されるようになっています。Relayに流すmidi楽譜の楽器がピアノなので、piano send : と出ています。
いずれはここにステッピングモータ用のログなどが生えて複雑になっていく予定です!
こちらはプレイリストモードの動作風景になっています。プレイリストモードでは、曲のスキップや曲戻り、ランダム再生やループ再生の操作が可能になります。
このように実現するためにソースコードを設計してはいるのですが未だ皆さんにお見せできるようなきれいなコードにはまとめられていません…
汚いままですが、現段階では下のgithubレポジトリにまとめておりますので、興味ありましたら是非ご覧ください。
ファームウェア
midiファイルの解析や、ノート番号から周波数へ変換するといった基本的なところはすべてDEO Playerアプリに委託しています。そのためマイコン側ではほとんど複雑な処理は行っておりません。
初期のMusicRelayではマイコンはArduinoを使用しておりましたが、動作処理が遅く精度が悪く感じられたため、本年度よりはこれをSTM32F303k8t6に変更し、内蔵のPWMタイマーによって精度を抜群に向上させています。
マイコンについては以下に特集しておりますので、是非ご覧ください。
先述した通り、ファームウェアではUARTで受信した周波数情報を元にパルスの波形を生成しています。一度正弦波によって制御しようとも考えましたが、DCリレーにACを入力しても(電圧?)なぜか動作しなかったので検討課題として未だ残っている段階です。
周波数で音階、デューティ比で音の大きさを制御するようにしているのですが、デューティ比の制御についても今は検証段階でまだ完璧なものではありません。
このようにファームウェアのソースに関しては検討課題が多くあり、未だgitにも用意できていないため、次回の記事にて公開し、詳細な解説をDEO Playerのソースと合わせて行おうと思いますので、是非チェックしてみてくださいね!
ハードウェア
MusicRelayでは10個ものリレーに電流を流し込んでいますが、どれも単体は以下の仕組みの回路が並列に連なっているだけです。
マイコンから出力される電圧値はStm32F303k8t6だと3.3Vしか出せません。また使用するのはHJのパワーリレーで、12V900mWもの電力を消費します。
使用したHJリレーの詳細
そのため、上記画像のようにトランジスタによる増幅を行います。トランジスタの計算式や仕組みはまた別の記事にまとめますが、ここでは簡単に計算のみを行います。
$$i_{CE}=h_{fe}i_{BE}$$
これはエミッタ接地のトランジスタの増幅作用を示す基本的な数式です。
トランジスタは電流による増幅作用がありますので、コレクタエミッタ間に流れる電流\(i_{CE}\)はベースエミッタ間に流す電流\(i_{BE}\)をトランジスタ固有の決められた倍率\(h_{fe}\)倍となります。
また、12V900mWのリレーに流す電流は、電力の基本式\(P=IV\)から\(I=0.9/12=75[\mathrm{mA}]\)と分かり、これをエミッタコレクタ間に流せばよい。また使用するトランジスタ2SC1815は増幅率が代替\(h_{fe}=100\)となるため、上記の基本式よりベースエミッタ間に流す電流は、
$$i_{BE}=i_{CE}/h_{fe}=75/100=0.75[\mathrm{mA}]$$
となる。STM32F303k8t6のマイコンは出力電圧が3.3Vのレベルなのでベースエミッタ間飽和電圧を0.6[V]とし、配置するべきベース抵抗は、オームの法則より
$$R_B=V_R/i_{BE}=3.3-0.6/0.00075=3600[\mathrm{Ω}]$$
となります。これをE24系列の抵抗から選別すると、橙橙赤金の3.3kΩの抵抗を使用すれば良くなり、このようにしてトランジスタに接続されている抵抗の値を決定しています。
またこの回路はJLCPCBに発注して基板を製作しています。併せてご覧ください!
動作の様子
それではこの企画の動作の様子をご覧いただきましょう!今年度の高専祭特集で取り上げましたが、オンラインでの展示は私の所属する電研という同好会が作成する電気科展HPにて公開しております。
電気科展 2022
上記HP記載の展示品ダイジェスト動画でも動作風景をご覧いただけますが、下の動画ではフルでギターとの演奏がご覧いただけます。
さいごに
いかがだったでしょうか。今回はEleMagHarmony企画の記事第一弾としてその原点であるMusicRelayについてお話ししました。
リレーという今はもうほとんど使われなくなったそんな部品であっても、やはり古いからこそ感じるロマンがあり、それを音楽にしてカチカチと音を奏でることで新しい芸術としてこの部品について皆さんに知ってもらえる機会になれば幸いです。
次回からはこの企画の中身を一挙公開していこうと思います。お楽しみに!JLCPCBも併せてチェックしてみてくださいね!
それではまた!GoodBye!