Arduinoと戯れてみる!

Arduino 入門 Lesson 26 【DCモータ編】

arduino-lesson26-00Arduino入門編
スポンサーリンク
子供と一緒に始める マイコンプログラム
Arduino 入門
Lesson 26
【DCモーター編】

「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。

少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。

※一部誤記修正しました。

 

本記事はLesson 26 【DCモーター編】です。

DCモーターはミニ4駆やラジコンなど、子供の時に遊んだおもちゃに使われています。

子供の頃はモーターと言えばTAMIYAとう記憶があります。

 

DCモータはモーターそのものですので制御回路などは組み込まれていません。

電圧を制御することで回転速度を変えることはできます。

本記事では、DCモーターとトランジスタの組み合わせによるDCモーターの制御を学習します。

また、DCモーターはシリアルモニタからテンキーによって制御します。

そうすることで、ミニ扇風機を作ります。

 

そう、ミニ扇風機です!

考えるだけで楽しくなってきました。

 

ちなみに、制御回路が組み込まれているのがサーボモータ-です。

Lesson 9で学習したサーボモーターは内部にモーターの制御回路などが組み込まれています。

そのため、回転角度をArduinoで簡単に制御できるようになっています。

 

本Lesson解説で使用しているのはArduino互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

正規品の本体単品がほしい方はこちらとなります。

 

スポンサーリンク

はじめに

DCモーターをArduinoで制御する場合、DCモーターの電流に注意する必要があります。

使用するDCモーターのデーターシートを必ず確認してください。

 

ArduinoのDC Current per I/O Pinの仕様を公式HPで再確認。

下記に示すように20mAとなっています。
※以前は40mAと記載されていたのですが・・・

arduino-lesson26-01

 

下記ページのTECH SPECSのタブをクリックすると確認できます。

 

DCモータの電流値は使用するモーターによって様々です。

ものによっては、数百mA程度必要とします。

20mAの出力電流であるArduinoのIOピンに数百mAの負荷を接続すると・・・

はい、壊れる可能性大です。

DCモーターをArduinoに直接つなぐのはやめましょう!

 

本Lessonでは、それを回避するためにドライバICを間にはさみます。

また、DCモーターはArduinoで直接扱うには電流値が大きい。

そのためDCモーターに別に電源を供給するための電源モジュールも使用します。

 

Lesson 26 目標

本Lessonの目標は以下です。

1.モータードライバIC(L293D)を理解する。
2.L293Dを使用したDCモータの制御を理解する。
3.ミニ扇風機のような動作をするスケッチ(コード)を作る。

今回も遊ぶことを最大の目標に楽しみましょう!

 

準備

ではLessonの準備に取り掛かりましょう。

Lesson 25 4桁7セグメントLEDに比べれば接続は簡単です。

頑張って組み上げていきましょう。

 

必要なもの

 

DCモーターはホームセンターなどで購入されても良いかと考えます。

 

Jumper wireは今後も頻繁に利用します。

Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

 

使用部品説明

新たに登場した部品について説明していきます。

本Lessonで新しく登場する部品は以下となります。

 

DCモーター 実物写真

下の写真が、DCモーターです。

一緒に写っているのはファンです。

モータに取り付けて扇風機のようにします。
※なくてもLessonには困りません。

arduino-lesson26-02

 

ちなみに、ELEGOO UNO キットには合わせて梱包されています。

 

Amazonで売られているものを紹介しておきます。

ただし、DCモーターに関してはホームセンターなどで購入されても良いかと考えます。

 

DCモーター 仕様

DCモーター。

梱包されていたDCモーターですが型番など記載ありません。

そのため、仕様がまったくわかりません。

 

しょうがありませんのでテスタを使って自分で調べます。

電圧の使用範囲は3V~6Vと記載がありました。

消費電流はテスタで測定。

電圧[V]電流[mA]
4.8
※乾電池3個分の直列電圧
57

 

測定した結果、電圧4.8Vで電流は約57mAとなりました。

約60mA程度と考えておけば問題ないでしょう。

※4.8Vは乾電池3個分を直列接続したときの電圧です。

 

DCモーターの原理を詳しく知りたい方は下記サイトなど参照ください。

 

電源モジュール 実物写真

下の写真が、電源モジュールです。

arduino-lesson26-03

 

使用しているELEGOO UNO キットには合わせて梱包されています。

手持ちのない方は以下などが入手可能です。

 

電源モジュール 仕様

電源モジュールの仕様を紹介しておきます。

本Lessonで使用する電源モジュールの仕様は以下となります。

  • ON/OFFスイッチ
  • ON/OFF確認用のLED付き
  • 接続:5.5mm × 2.1mmプラグ
  • 入力電圧:6.5V~9V(DC)
  • 出力電圧:3.3V/5.0V
  • 最大出力電流:700mA
  • サイズ:約53mm × 35mm

本Lessonでは、5.5mm × 2.1mmプラグから9Vの電池で電源を供給します。

 

Arduinoと電子部品の電源を分けることで、Arduinoの損傷を防ぐことに繋がります。
また、大電流を必要とする電子負品を使う場合も重宝します。
ぜひ、何個かは確保しておきたい電子部品です。

下記、Amazonにある別メーカー品もほぼ同じような仕様のため問題なく使用可能です。

 

電源モジュールの使い方に関しては下記にて詳細を解説しています。

 

モータードライバIC(L293D) 実物写真

こちらが、L293Dの実物となります。

arduino-lesson26-04

 

お手持ちがない方は以下などから入手ください。

 

モータードライバIC(L293D) 仕様

ドライバICのL293D外観

arduino-lesson26-05

 

ピン仕様

PIN入出力内容
ピン名ピンNO.
1,2EN1IEnable(ドライバ ch1、ch2) Active:High
ch1:1A/1Y ch2:2A/2Y
A<1:4>2,7,10,15I入力ピン
Y<1:4>3,6,11,14O出力ピン
3,4EN9IEnable(ドライバ ch3、ch4) Active:High
ch3:3A/3Y ch4:4A/4Y
GND4,5,12,13GNDピン
VCC1165V(内部ロジック用)
VCC284.5V~36V(ドライバ用)

 

絶対定格

MinMax単位
VCC136V
VCC236V
入力電圧 Vi7V
出力電圧 Vo-3VCC2+3V
ピーク出力電流-1.21.2A
出力電流 Io-600600mA
最大接合温度150

 

推奨動作条件

MinMax単位
電源電圧1VCC14.57V
電源電圧2VCC2VCC136V
VIHVCC1 ≦ 7V2.3VCC1V
VIHVCC1 ≧ 7V2.37V
VIL-0.31.5V
動作温度070

 

ブロックダイアグラム

図中のMはモーター、IC内の△マークはバッファとなります。

図中△内の数字1、2、3、4をch1、ch2、ch3、ch4のバッファと管理人は呼んでいます。

arduino-lesson26-06

 

詳細なデータシートを確認したい方は以下を参照ください。

 

上記仕様から、L293Dは4.5V~36Vの電圧範囲において、最大±600mAの出力電流で負荷を駆動できるということがわかります。

本Lessonで仕様する「DCモーター」は約60mA程度の消費電流となっています。

L293Dには十分な負荷駆動能力の性能があることがわかります。

 

また、本Lessonではch1とch2を使用します。

モータを正回転、逆回転させるためです。

そのため、ブロックダイアグラムにある左側の結線図を参考にします。

1つのモーターをch1、ch2のバッファを使用して制御するということになります。

 

回転を正回転のみ、逆回転のみとする場合は使用するchは1つでかまいません。

その場合、モーター負極をGNDに接続するなどしてください。

 

ブロックダイアグラム中の保護ダイオードについて

電流を流していたコイルの電流を切ると、逆方向に電流が流れます。
これは逆起電力と呼ばれるもので、インダクタの特性の一つです。
この逆起電力ですが、場合によっては供給した電圧の数十倍の電圧が発生することもあり電子部品を破壊する原因となります。
この逆起電力からトランジスタを守るのが保護ダイオードとなります。
L293DはIC内に内蔵されており外付けで考慮する必要はありません。

 

実践 回路作成とコード作成

最初に回路図を確認してください。

次に、回路図に合わせて部品を接続します。

最後にコードを書いて、DCモーターを動かしていきましょう。

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図

DCモーターの+をドライバーIC(L293D)のch1の出力(3番ピン)、-をch2の出力ピン(6番ピン)に接続します。

Arduinoはデジタルピンの7,5,3番ピンを使用します。

  • 7:L293Dの1番ピン(Enableピン)
  • 5:L293Dの2番ピン(CH1バッファ入力)
  • 3:L293Dの7番ピン(CH2バッファ入力)

回路図がこちら。

arduino-lesson26-07

 

こちらがブレッドボード図。
※M-M jumper wireのみで結線できます。

電源モジュールにはDCプラグから9Vの電池でつなぎます。
ブレッドボードへの電源供給は、電源モジュールの左上、左下にある+、-端子をブレッドボードの上下のVCCとGNDに挿入することで供給されます。

 

電源モジュールの出力は5Vとする。
ジャンパーは5Vと記載された黄色枠側につけてください。

arduino-lesson26-08

 

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続

下図に示すように、用意した部品を使用して接続しましょう。

部品は電源モジュールドライバーIC(L293D)となります。

M-M jumper wireを使用してUNOと接続しましょう。

 

使用するポートは、デジタルピンの「3,5,7」です。

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

arduino-lesson26-09

 

 

 

コードの書き込み

接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。

コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。

 

コマンド説明

特に新しくでてきたコマンドはありませんが、重要コマンドを復習しておきましょう。

コマンド説明
analogWrite(pin, value)指定したピンからアナログ値(PWM波)を出力します。
Unoのボードでは、デジタルピン3、5、6、9、10、11でこの機能が使えます。

 

analogWrite()思い出しましたか?

ぜひ、本Lessonで思い出して理解しておくことをお勧めします。

詳しく思い出したい方は下記を参照してください。

 

サンプルコード

サンプルコードを下記に示します。

シリアルモニタからテンキーの数字を押すことによってDCモーターの回転を制御するコードを作成してみました。

低速、中速、高速はanalogWrite()関数を利用しています。

パルス変調を利用することにより、疑似的に0V~5Vの中間値を作り出す制御です。

 

低速で回転させるためのコツ
パルス変調を利用する場合、
DCモーターを低速で動かすためにちょっとしたコツがいります。
それは、回転させるためのきっかけが必要です。
コードのコメントに記載していますので確認してみてください。

 

//Lesson 26 DCモータ編
//https://omoroya.com/

// 電子部品は電源モジュールとドライバIC(L293D)を使用

// 変数の設定
const int ENABLE = 7;
const int CH1 = 5;
const int CH2 = 3;
 
void setup() {
  //Pinの方向を定義
  pinMode(ENABLE,OUTPUT); // 7番ピンをOUTPUT指定
  pinMode(CH1,OUTPUT);    // 5番ピンをOUTPUT指定
  pinMode(CH2,OUTPUT);    // 3版ピンをOUTPUT指定
  Serial.begin(9600);

  //シリアルモニタに説明を表示
  Serial.println("1:Normal rotaion");
  Serial.println("2:Reverse rotation");
  Serial.println("4:PWM Low speed");
  Serial.println("5:PWM Middle speed");
  Serial.println("6:PWM High speed");
  Serial.println("0:STOP");

  // 初期化 DCモータが突然動きださないように
  digitalWrite(ENABLE,LOW); // disable
  delay(500);
}

void loop() {
  if (Serial.available() > 0 )     // 受信したデータが存在した場合以下を実行
  {
    char val = Serial.read();      // char文字として受信データの読み込み
    

    // 1の場合 正回転 CH1:High CH2:LOW
    if (val == '1')
    {
      Serial.println("1:Normal rotaion");
      digitalWrite(ENABLE,HIGH); // enable on
      digitalWrite(CH1,HIGH);    
      digitalWrite(CH2,LOW);
      //delay(500);                // 回転している時間を指定
      //digitalWrite(ENABLE,LOW);  // disable
    }
    
    // 2の場合 逆回転
    else if (val == '2')
    {
      Serial.println("2:Reverse rotation");
      digitalWrite(ENABLE,HIGH); // enable on
      digitalWrite(CH1,LOW);
      digitalWrite(CH2,HIGH);
      //delay(500);                // 回転している時間を指定
      //digitalWrite(ENABLE,LOW);  // disable
    }

    // CH1をPWM制御するこで回転スピードを調整
    // 4の場合 低速回転
    else if (val == '4')
    {
      Serial.println("4:PWM Low speed");
      digitalWrite(ENABLE,HIGH); // enable on
      analogWrite(CH1,255);      // 低速で回転させるためのきっかけ
      delay(100);                // 低速で回転させるための調整時間
      analogWrite(CH1,127);      // CH1をパルス変調 約50%
      digitalWrite(CH2,LOW);     // CH2はLow固定
    }

    // 5の場合 中速回転
    else if (val == '5')
    {
      Serial.println("5:PWM Middle speed");
      digitalWrite(ENABLE,HIGH);  // enable on
      analogWrite(CH1,255);       // 低速で回転させるためのきっかけ
      delay(100);                 // 低速で回転させるための調整時間
      analogWrite(CH1,181);       // CH1をパルス変調 約75%
      digitalWrite(CH2,LOW);      // CH2をLow固定
    }
    
    // 6の場合 高速回転
    else if (val == '6')
    {
      Serial.println("6:PWM High speed");
      digitalWrite(ENABLE,HIGH);  // enable on
      analogWrite(CH1,255);       // パルス変調 100%(High固定と同じ)
      digitalWrite(CH2,LOW);      // CH2はLow固定
    }

    // 0の場合 停止
    else if (val == '0')
    {
      Serial.println("0:STOP");
      digitalWrite(ENABLE,LOW); // disable
    }
  }
}

 

動作確認

では、さっそく動作を確認していきます。

シリアルモニタを開いてテンキーの数字を押してみてください。

1:正回転
2:逆回転
4:低速回転
5:中速回転
6:高速回転
0:停止

となるはずです。

​今回もgifで動作を掲載してみました。
※サイズを絞るために、画像サイズを小さくしています。

正回転、逆回転

arduino-lesson26-10

 

低速、中速、高速

arduino-lesson26-11

 

まとめ

今回は以下の内容について理解してもらいました。

1.モータードライバIC(L293D)を理解する。
2.L293Dを使用したDCモータの制御を理解する。
3.ミニ扇風機のような動作をするスケッチ(コード)を作る。
4.楽しんで遊ぶ。

 

いかがだったでしょうか。

ミニ扇風機、作れましたでしょうか?

スケッチ(コード)を考えながら、作るっておもしろいな~と改めて実感。

 

Lesson 26 【DCモーター編】 はここまで。

DCモーターの制御、扇風機だけでなく色んな事ができそうですね。

 

疑問点、質問などありましたら気軽にコメントください。

 

次回、Lesson 27は【リレー編】 です。

DCモーターをリレーを使って制御していきます。

Arduino 入門 Lesson 27 【リレー編】
本記事はLesson 27 【リレー編】です。リレー(relay)とは、単純に言えばスイッチのこと。継電器とも呼ばれることもあります。ただのスイッチではなく電気的に制御するスイッチ。本Lessonではリレー(relay)を使って電気的にDC…

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

Amazon ベストセラーNo.1
ELEGOO UNO キット レベルアップ  チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Amazonでお得に買う方法

Amazonでお得に購入するなら、Amazonギフト券がおすすめです。

現金でチャージするたびに、チャージ額に応じたポイントが付与されます。

最大2.5%!!!(Amazonプライム会員ならさらにお得)

チャージ額(一回分)一般プライム会員
5,000円~19,999円0.5%1.0%
2,0000円~39,999円1.0%1.5%
40,000円~89,999円1.5%2.0%
90,000円~2.0%2.5%

さらに、初回チャージで1000ポイントもらえるキャンペーンも実施中!

\Amazonギフト券 1000ポイントキャンペーン/
Amazonチャージ 初回購入で1000ポイントキャンペーン

 

補足情報
コンビニ・ATM・ネットバンクが対象
購入は1円単位で可能

コメント

  1. omoroyaomoroya より:

    DCモーターを制御してミニ扇風機を作ってみよう!

タイトルとURLをコピーしました