いつもとちょっと違うのはいつも水曜ですが休みだったので、本日[S]です。今回はどういつもと違うかというと、すいません、容赦なく専門的な内容が入ります。もしかしたら誰かの役に立つかもしれないので。
ちょっと仕事で回転数を制御できるモータが欲しくなったので、ちょこちょこっとそのへんのモジュール組み合わせて作ろうと思い、ググり始めたところ、意外にすっきりした答えを見つけられず、多分数時間悩みました。
結局自分の頭で「よし、arduino と PWM DCモータドライバモジュールを組み合わせて作ってみよう」と考えだし、部品の注文開始。
あれ、でもよく考えたら arduino (アルデュイーノ。小さなコンピュータ)は昔子供に触らせてみようかと買って、でもお蔵入りになった奴がどっかにあったはず、あと、モータドライバもとりあえず子供が科学実験教室でもらったのがあるはず。モータはとりあえず、ザ・マブチモーター。
arduinoを見つけるのは大変でした。家中のダンボールをひっくり返しても見つけられず、諦め切れずにもう一度最初開いた箱を見たらありました。だって小さいんだもん。
そして、子供にお願いしてとりあえずモータドライバとザ・マブチモーターも借り、適当に組み合わせて、思い立ってその日のうちに動き始めました。
arduinoというのはすごくて、まさにこういうことに使われることを想定しているので、簡単にモータを回せます。arduinoを動かすにはUSBでPCにつなぎます。PCにアプリをインストールして立ち上げるととりあえずひな形が出てきます。それに、
analogWrite(6,255);
の一行加えてコンパイルして、arduino に書き込んでやれば(それぞれボタン押すだけ)、動いちゃいます。255の数字のとこ変えると回転速度も変わります。
傍らで、本格的に使うための部品も注文し、揃ったところで組み直しました。やりたいことはこんなこと。
・PCで回転速度を変えられる
・回転数を把握したい
・できれば指示した回転数に制御したい
で、できたのものはこんな感じ。
手前には、いわゆるコンピュータ用のケースファンと呼ばれるもの。回転数検出用のセンサがあるので今回のやりたいことにばっちり。
配線用のブレッドボードの上、左側は、MD10C という PWM DCモータドライバ。右側は Arduino Uno。下のタッパの中には 12V電源。これらのモジュール間をただ配線するだけ。唯一雑音防止に、ファンの白線と黒線の間、赤線と黒線の間に青い小さなコンデンサを入れたのが唯一の部品。
プログラムの方はファンの信号線を INPUT_PULLUP モード、つまりプルアップして読むことで、プルアップ抵抗すら省けてます(実は 1kΩ以下の小さな抵抗しか見つけられなくて、困り果てて調べたらプルアップモードを発見したのは内緒)。つまり、
pinMode(12,INPUT_PULLUP);
あと、MsTimer2というモジュールを追加して、 250ms ごとにタイマを起動して、その間の回転数を読み取っています。1秒に4回しか制御しないので、完全に安定するわけではありませんが、簡単な P 制御もいれて、指定回転数にすることもできました。
ということで最初に欲しかったものがモジュールの組み合わせだけで実現できました。なお実は反対周りもやりたかったのですが、市販のケースファンで逆回りできるの見つけられませんでした。残念。
いやー、便利。個人でPCからモータを制御したいときの未来の普通だね。
というのも、できてしまえば簡単だったのですが、ググる限りこの組み合わせで作っている例はなく、この組み合わせに思い至るまでに数時間かかったのです。
マイコンの方は Arduino 以前のものが多く、プログラミングの手間が結構かかりそう。Arduinoだと PWM信号を出すのに analogWrite(6,255); で済むところを全部自分で書かないといけないとか。