前回までで子機側のプログラムが完成したので、次はマスター側のプログラムです。
1
2
マスター側のプログラムは基本的にはこれだけです。基板側のプログラムの逆の処理を行っているだけですね。また、あらかじめsetup関数内でシリアル通信の起動である「Serial2.begin(19200)」を実行しています。
使い方は、serialSent関数を第1引数に送り先のID、第2引数に周波数を入れて実行するだけです。また、音を止めるときは周波数に0を入れます。

これを音楽の分、ひたすら書くと音楽が完成ですが、書くのがあまりに大変なので、Midiファイルを読み込めるライブラリなどを使用すれば多少楽になると思います。

 

そして、そのあと格安で基板を製造できる業者を発見したので、チェナーダイオードとゲートドライバ電源の瞬停対策用のコンデンサを取り付けた基板を作り直しました。
3
4

そして届いた基板がこんなかんじ
P_20171207_185217_vHDR_Auto
安いのになかなかきれいにできました。

 

本当は実装したいのですが、部品が届かないのでケースファンを演奏してみることに

プログラムをこんな感じに書き換えて、1枚の基板で2つのケースファンを演奏できるようにします。

5

これが初期設定などです。ケースファンを演奏する場合は出力ピンのPWM機能を利用します。そしてその周波数を変更することで音楽にします。今回は8bitタイマーの位相基準PWMを使用しました。

6

これがPWMの周波数を設定する関数です。16bitタイマーに比べると出せる周波数の範囲が狭くなり、精度も悪化してしまいます。

7

これが、通信部分です。モータごとにIDを振っておき、IDの種類によって無視かどちらのモータのデータであるかの判別を行っています。

 

このプログラムでケースファンを演奏するとちゃんと演奏することはできました。ただ、まだ動画を撮れていないので動画は後日紹介します。