そうだモーターを動かそう!!
最近のゲリラ豪雨って、レベルアップしてて恐ろしいですねぇ
まるです。凄いことに3回目までやって来ました!!
今日は「DCモーター」について学びたいと思います。
この「DCモーター」ですが、最近馴染みがありませんよね??
僕が小さいころは、プラモデル、ラジコン、そしてミニ四駆など気がつけばモーターが何個か部屋に転がってた記憶があります。
ミニ四駆といえば、、、トラウマが、、、
まだ小学生だったと思うのですが、僕の世代でミニ四駆が大ブームになりました。
当時、お小遣が少なく何ヶ月分かをようやくかき集め、やっとのことで1台購入し夜な夜な完成させました。しかし、部屋で走らせるにはあまりにも速いので、次に日に外で走らせる事にしました。
テンションが下がらぬまま朝を迎え、いよいよ試走開始!!
電源を入れ勢い良く走るマイマシーン!!走ること数秒して縁石にそれ、姿が消えた!!!
そう、、、、、、排水口に落ちてしまったのだった、、、、呆然とする俺。。。今でもそのシーンを覚えているので当時は相当ショックだったと思います。
と、大幅に脇道にそれましたww
Arduino(アルディーノ)を使ってDCモーターの制御に行きたいと思います。
モータードライバー
電子回路において「DCモーター」の制御を行うには「Hブリッジ制御回路」という回路を学ばない行けません!!
僕もまだ専門家ではないので、わかりやすく解説しているサイトのリンクを張っておきます。
簡単に話しますと、モーターを制御するための基本的な回路なんです。
でも完全に理解する必要はありませんよ。世の中便利なものがあるのですよ。
それがモータードライバーだぁ!!
これと、Arduino(アルディーノ)、DCモーターがあると2つの事ができます。
- モーターの回転方向の制御
- 回転速度のコントロール
では、早速実践しましょう。。
意のままにモータを操れ!!
回路図はちょっと複雑ですが、これはこういうものなので、割りきって覚えちゃいましょう。
※1 右側に10Ωの可変抵抗がつていますが、これは回転速度のコントロールに使います。
※2 モーター用の電源は、別途用意しました。アルディーノから直接電源をもらうと渦電流によって、アルディーノ本体が燃え尽きると思いますのでご注意を!!
※3 モータードライバー近くの抵抗は「10kΩ」です。
そして、プログラムはこうなっています。
ボリュームを回してモーターを制御するプログラム
int MOTER1PIN = 9; int MOTER2PIN = 10; void setup() { pinMode(MOTER1PIN, OUTPUT); pinMode(MOTER2PIN, OUTPUT); } void loop() { // 可変ボリュームの値を取得 int val=analogRead(0); int val_02 = map(val, 0, 1023, -255, 255); Serial.println(val_02); //=============== // モーターの制御 //=============== if (val_02 <= 40 && val_02 >= -40) { // 停止 analogWrite(MOTER1PIN,0); analogWrite(MOTER2PIN,0); } else if(val_02 > 40) { // 正方向の回転 analogWrite(MOTER1PIN,0); analogWrite(MOTER2PIN,val_02); } else if(val_02 < -40) { // 逆方向の回転 int val_ichizi = -val_02; analogWrite(MOTER1PIN,val_ichizi); analogWrite(MOTER2PIN,0); } delay(15); }
【解説】
・可変抵抗の読み取り
Arduino(アルディーノ)のアナログポートに差し込んだ可変抵抗は、0〜1025の値を返してきます。これを利用してモーターの回転と方向をコントロールします。
int val=analogRead(0)
上記がアナログ回路の読み取り部分です。数字のゼロは読み取りポートの番号です。
・モーターの制御
前回のLEDでも出てきた「analogWrite」ですが、今回も同様に扱います。ですので、0〜255の範囲で動き、正回転用、逆回転用の2つポート(9、10番)を利用してモーター制御をしてます。その為、可変抵抗の値をモーター用に置き換えるため、「map」関数を利用。
map(val, 0, 1023, -255, 255);
アナログ回路から入ってきた値(0〜1025)を「−255〜255」に置き換えてー!
って意味です。
ボリュームの動作は、こんな感じでやっています。
真ん中:停止
左方向:逆回転
右方向:正回転
なお、中心はゼロなんですが、実際やるとモーターが動くまでラグがあるので「−40〜40の間が停止」としてプログラムしてあります。
これを実行するとこんな感じですよー
なんか簡単ですね。なんでもっと早くやらなかったんだろう・・・
これらを二個つないで制御すれば戦車作れないか???
ということで次回は戦車を作って見たいと思います。
Fusion360や3DCADを
より本格的に学びたい方はこちらへ!
動画で学ぶ!Fusion360で自在に形状を作る方法論
Fusion360の基本操作をある程度できる方を対象に
モデリングの方法論やノウハウを身につけて、自在にモデリングができるスキルを
動画で学べるオンラインスクールです。
- Fusion360の基本操作ができる方が対象
- 本のお手本やチュートリアルに頼らず自在にモデリングできる
- 動画を使って、いつでもどこでも学ぶことができる
メイカーズファクトリー 代表取締役
プロダクト&グラフィックデザイナー /WEBコンサルタント
株式会社メイカーズファクトリーCEO
広告グラフィックのデザインからWEBのマーケティング戦略立案、企業の商品開発のコンサルティングまで幅広い業務を経験。 MacBook Airじゃない方のMBAホルダー。