マイクロブロアー(MZB1001T02)をArduino単体で駆動する

2019年9月13日

最近マイクロブロアー(MZB1001T02)を使っています。20mm x 20mm x 3mmくらいの空気を送るポンプです。圧電素子の共振を利用しているため駆動部分が無くコンパクトで省電力です。

私が購入したときはDigi-Keyでしか買えませんでしたが、最近は秋月電子で買えるようです。現在の価格は1300円です。

今日の記事はこのマイクロブロアーをArudino単体で動かすためのコードを書きましたので紹介します。

その前にマイクロブロアとは?

マイクロブロアとは村田製作所が生産しているエアポンプです。ただのエアポンプですが、アイデアしだいではモーターのようなアクチュエータの代わりとすることもでき用途は広そうです。

文章で書いてもよくわからないので村田製作所の動画を見てください。


例えばファンの代わりに放熱フィンにこれをつけても良さそうです。ファンに比べると恐ろしく高いですが、駆動部分が無いので静音、低電力、メンテナンスフリーです。

2019年の後半の時点では村田のマイクロブロアは3種類が生産されています。MZB1001T02は高流量タイプになり、その他に高圧力タイプと高圧力薄型があります。

マイクロブロアをArduinoで動かす

マイクロブロアの仕様によると動作電圧は10〜20Vppの25kHzの交流です。これって電圧も周波数もちょっと作りにくい感じですよね。しかも共振周波数が結構シビアで1/1000くらいの精度が必要です。

仕様書には10〜20Vの動作データがありますが、5Vはありません。しかし、いろいろ試してみましたが、5Vの方形波でもなんとか動きました。これならArduinoのPWMでうごかすことができますね。

PWM出力を26kHzで動かすスケッチは以下のようになります。

void setup(){
  
  pinMode(9, OUTPUT);
  TCCR1A = _BV(COM1A1) | _BV(COM1B1) ; // phase and frequency correct mode. NON-inverted mode
  TCCR1B = _BV(WGM13) | _BV(CS10);     // Select mode 1 and select divide by 1 on main clock.
  
  ICR1 = 312;           //Fout = F / (Prescalar(TCCR1B) * 2 * ICR1) = 16MHz / ICR1 = 25.6kHz
  OCR1A = int(ICR1/2);  // duty MAX = ICR1
  
}

void loop(){
}

ICR1の312は手持ちのブロアーでは一番共振が強い値でしたが、個体差があるかもしれません。±2くらいは現物で調整したほうが良いです。シューと音がしますがどのくらい空気が送られているかはよくわかりません。

簡単に電圧を増幅

さすがに5Vでブロアーを駆動するのはムリがあるかもしれません。この記事の趣旨からはずれますが、ちょっと工夫をしてスペックの範囲内の電圧にする方法を検討してみました。

パルス波形を簡単に増幅できる方法の1つにロジックレベルコンバータがあります。ロジックレベルコンバータとは例えばICなどの制御信号(5Vまたは3.3V)をPCのRS232通信(12V)へ送受信するためのICです。

ロジックレベルコンバータはICの入出力とRS232の入出力に間に入ります。そして12V→5Vと5V→12Vの変換を行います。今回は5V→12Vの変換だけ使用して25kHz12Vの信号を作ります。この記事ではアナログデバイス社のADM3202を使いました。

ADM3202の各ピンの機能は上記のようになっています。必要なピンに0.1μFのコンデンサをつけてVccにArduinoの5V、T1INにArduinoのD9を接続します。するとT1OUTには次のようにPP20Vくらいの電圧の方形波が出力されます。

すごい!と思ったんですが、マイクロブロアをつけた途端に次のような波形になってしまいました。もともとロジックレベルコンバータは電源用途では無いので仕方ないです。

マイクロブロアも思っていたより入力インピーダンスが低いようです。(インピーダンスが低い → 電流が流れる → 電源能力不足で電圧降下する)

PPで10Vくらい出力されているのでArduino直結よりはいいかもしれません。コンデンサの容量調節でうまく行きそうな気もしますが。

最後に・・・

私はこのマイクロブロアを非常に検出精度の高いセンサーの温度制御に使おうと思いました。センサーの自己発熱があるのでブロアーでセンサーを一定温度に冷却する作戦でした。しかし、ブロアー本体から出るノイズが結構多くてブロアー無しのほうが安定しているようだったので使用を諦めました。ノイズ対策が必要なければ役に立つかもしれません。

しかし、ブログを書くようになってわかったんですが、村田製作所すごいなぁ。村田製作所の物って他の代替が無いものが多いですよね。

追記 間違い訂正

当初公開していたソースコードの中に間違いがありました。お詫びいたします。

PWMの出力ピンですが、6(D6)としていましたが、D9でないといけませんでした。原因はどうやら水晶の分周比の設定とピン番号の関係にあるようです。

私のコードでは”TCR1A”と”TCR1B”を設定していますが、この設定はD9とD10のピンの設定を変更します。D6の場合波TCR0AとTCR0Bになります。

Arduino Unoは5,6,9,10,3,11の6ピンにPWM出力を設定できますので、残りの3、11ピンはTCR2AとTCR2Bになります。ここの3ピンだけイレギュラーですね。配線の関係だと思います。

付け加えて説明するとTCR2○だけ設定に用いるCOM1〇〇などのビット名の割当が異なるようです。ここだけ細かく設定できるようなんですが、ハマるポイントかもしれませんので注意してください。