HOME >>  3Dプリンター > そうだモーターを動かそう!!

そうだモーターを動かそう!!

最近のゲリラ豪雨って、レベルアップしてて恐ろしいですねぇ

まるです。凄いことに3回目までやって来ました!!
今日は「DCモーター」について学びたいと思います。

DCモーター

DCモーター

この「DCモーター」ですが、最近馴染みがありませんよね??
僕が小さいころは、プラモデル、ラジコン、そしてミニ四駆など気がつけばモーターが何個か部屋に転がってた記憶があります。
ミニ四駆といえば、、、トラウマが、、、
まだ小学生だったと思うのですが、僕の世代でミニ四駆が大ブームになりました。
当時、お小遣が少なく何ヶ月分かをようやくかき集め、やっとのことで1台購入し夜な夜な完成させました。しかし、部屋で走らせるにはあまりにも速いので、次に日に外で走らせる事にしました。
テンションが下がらぬまま朝を迎え、いよいよ試走開始!!
電源を入れ勢い良く走るマイマシーン!!走ること数秒して縁石にそれ、姿が消えた!!!
そう、、、、、、排水口に落ちてしまったのだった、、、、呆然とする俺。。。今でもそのシーンを覚えているので当時は相当ショックだったと思います。

と、大幅に脇道にそれましたww

Arduino(アルディーノ)を使ってDCモーターの制御に行きたいと思います。

モータードライバー

電子回路において「DCモーター」の制御を行うには「Hブリッジ制御回路」という回路を学ばない行けません!!
僕もまだ専門家ではないので、わかりやすく解説しているサイトのリンクを張っておきます。

DCモータの制御(正転/逆転,スピード制御)

簡単に話しますと、モーターを制御するための基本的な回路なんです。
でも完全に理解する必要はありませんよ。世の中便利なものがあるのですよ。
それがモータードライバーだぁ!!

モータードライバー「TA7291P」

モータードライバー「TA7291P」

これと、Arduino(アルディーノ)、DCモーターがあると2つの事ができます。

  • モーターの回転方向の制御
  • 回転速度のコントロール

では、早速実践しましょう。。

意のままにモータを操れ!!

回路図はちょっと複雑ですが、これはこういうものなので、割りきって覚えちゃいましょう。
DCモーター回路図
※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を学べる

一ヶ月でFusion360をマスターするオリジナルノウハウを読むことができます。
  • 無料メールセミナーの詳細へ

Fusion360や3DCADを
より本格的に学びたい方はこちらへ!

オンライン講座

動画で学ぶ!Fusion360で自在に形状を作る方法論

Fusion360の基本操作をある程度できる方を対象に
モデリングの方法論やノウハウを身につけて、自在にモデリングができるスキルを
動画で学べるオンラインスクールです。

  1. Fusion360の基本操作ができる方が対象
  2. 本のお手本やチュートリアルに頼らず自在にモデリングできる
  3. 動画を使って、いつでもどこでも学ぶことができる
  オンライン講座の詳細へ
Fusion360オンライン講座
執筆者のご紹介
佐々木 康友 佐々木 康友
メイカーズファクトリー 代表取締役

プロダクト&グラフィックデザイナー /WEBコンサルタント
株式会社メイカーズファクトリーCEO
広告グラフィックのデザインからWEBのマーケティング戦略立案、企業の商品開発のコンサルティングまで幅広い業務を経験。 MacBook Airじゃない方のMBAホルダー。