おもしろ工作・プログラミング動画配信中!せでぃあのYouTube

ArduinoでL293DモータードライバーICを使ったPWM制御ブロックプログラミング(スクラッチベースmBlock)【Lesson15】

Arduino(アルドゥイーノ)を使ったスクラッチプログラミングLESSON15:モータードライバーICのL293Dを使ってDCモーターを制御する
  • URLをコピーしました!

この記事内には、プロモーションが含まれます。

こんにちは、せでぃあ(@cediablog)です。

ArduinoプログラミングLESSON15は「モータードライバーIC(L293D)を使ったDCモーター制御」です。

PWM制御による、DCモーターの回転方向(時計回り・反時計回り)、回転速度を制御するプログラミングの作り方を紹介します。

モータードライバーL293Dを使ったDCモーター制御回路の配線が完了した状態
本LESSONテーマの配線完了状態

本LESSON記事は、プログラミングの学習と電子パーツの知識が習得できるプログラムになっています。

小学生、中学生も安心してプログラミングができるように、スクラッチでのプログラミング方法についても動画付きで紹介しています。

せでぃあ

写真右上のプロペラが付いた機器がDCモーターです

本記事では、スクラッチベースのビジュアルプログラミングツールmBlockとArduinoIDEプログラムどちらも紹介しています

本記事ではmBlockのアップロードモード「オン」でのプログラム例を紹介しています

無料のブロックプログラミングツールmBlockのインストール方法については、こちらの記事を参照してください。

この記事を読んでわかること
  • モータードライバーIC(L293D)とはどんな機器なのか
  • DCモーターの回転制御方法
  • Arduino IDEでのプログラミング方法
  • mBlockを使ったビジュアルプログラミング方法
この記事を書いた人
せでぃあ

せでぃあはこんな人物です

✅プライム企業に勤める電気・機械設計エンジニア

✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作

✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞

✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中

✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中

目次

モータードライバーIC(L293D)について

モータードライバーIC(L293D)の概要説明

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

モータードライバーIC(L293D)とは、DCモーターに対して回転動作・回転方向を制御することができる電子機器です。

回転方向・動作速度を制御する場合は、最大2つのモーターを接続して個別に制御することができます。

片側8本、計16本のピンが付いており、今回はブレッドボードに直接差し込んで使用します。

DCモーターの制御方法

モータードライバーIC(L293D)の配線説明図
モータードライバーIC(L293D)の配線説明図

L293には4つのモーター制御回路があります。(上記説明図の△1~4)

2つのCHを使用することで、モーターの回転速度と回転方向を制御することができます。

DCモーターの制御方法
  • 各CHへの指令入力電圧値(PWM出力)により、モーター回転速度を制御する
  • 電圧入力するCHを選択することで、モーターの回転方向を制御する
せでぃあ

まずはDCモーター制御のイメージだけつかんでください

アナログ出力機能(PWM)について

Arduinoでは0Vと5VのON時間の割合を調節することで、疑似的なアナログ出力ができる機能を持っています。

疑似的なアナログ出力方式をパルス変調といい、PWM(Pulse Width Modulation)出力といいます

アナログ出力値(PWM)とモーター回転速度の関係
アナログ出力値(PWM)とモーター回転速度の関係

アナログ出力値(PWM)は、プログラム上にて0~255の範囲で指定することができます。

最大値255で出力したときに、出力電圧が最大値(5V)の出力となります。

アナログ出力の5Vは制御用電圧であり、モーター駆動用の電源ではないので注意してください

アナログ出力に関して学習したい方は、こちらの記事がおすすめです。

ピン割り当て

モータードライバーIC(L293D)のピン割り当て
モータードライバーIC(L293D)のピン割り当て

左右に各8本ずつ配線用のピンが搭載されており、上記のようになっています。

ピンの役割
  • 1,2EN:1,2CHドライバ制御有効/無効(入力ONで有効)
  • 3,4EN:3,4CHドライバ制御有効/無効(入力ONで有効)
  • 1~4A:モーター駆動入力(PWM)
  • 1~4Y:モーター駆動出力(ドライバ電圧)
  • VCC1:制御回路+電源(5V)
  • VCC2:ドライバ電源(今回は5Vを接続)
  • GND:-電源(GND)とヒートシンク機能
この記事を書いた人
せでぃあ

せでぃあはこんな人物です

✅プライム企業に勤める電気・機械設計エンジニア

✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作

✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞

✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中

✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中

DCモーターについて

DCモーターの説明

DCモーター
DCモーター

DCモーターとは、直流電源を流すことで回転させることができるモーターです。

流す電源電圧の+-極性切り替えにより、回転方向(時計回り・反時計回り)制御させることは可能ですが、サーボモーターのような、指定角度への移動制御(位置決め制御)はできません

サーボモーターについて知りたい方は、こちらの記事がおすすめです。

L293Dを使ったDCモーター制御動作の説明

今回の説明する「モータードライバーICのL293Dを使って、DCモーターを制御する」は、以下になります。

DCモーター制御動作の説明
  • 押しボタンを押すと、モーター停止⇒高速正転⇒低速正転⇒停止動作を行う
  • 次に押しボタンを押すと停止⇒高速逆転⇒低速逆転⇒停止動作を行う
  • LEDの点灯色は停止:赤、高速:緑、低速:黄で、逆転モード時は点滅する
動作説明とスクラッチプログラミング手順の解説動画
動画での解説内容
  • モータードライバーIC(L293D)の機器説明
  • L293Dを使ったDCモーター制御動作説明
  • mBlockを使ったプログラミングの解説

まずは動画を見て、今回のLESSON15で実行させたい動作内容を確認してください。

また、mBlockを使ったスクラッチプログラミングや動作確認方法についても解説しています。

L293Dを使ったDCモーター制御動作回路の作り方

STEP
必要なものを準備

プログラミングするために、パソコンが必要です。

電子部品等の必要な機器については、このあと説明します。

STEP
Arduinoを使うためのセットアップ(Arduino IDEプログラミング時のみ)

パソコンに統合開発ソフトウェア「ArduinoIDE」のインストールを行います。

Arduinoのセットアップ方法については、以下の記事にて詳しく説明しています。

Arduino IDEでの言語プログラミングも勉強したい方は、プログラミングの流れを理解しておいてください。

以下の記事にて、プログラミングから動作確認までの流れを詳しく説明しています。

mBlockでプログラミングする場合は、ArduinoIDEのインストールは不要です

STEP
mBlockでプログラミングするためのセットアップ(mBlockプログラミング時のみ)

パソコンにスクラッチベースのビジュアルプログラミングツール「mBlock」のインストールを行います。

以下の記事にて詳しく説明しています。

ArduinoIDEでプログラミングする場合は、mBlockのインストールは不要です

STEP
電気配線

電子部品とジャンパーワイヤの差し込みだけで配線が可能です。

STEP
Arduino IDEプログラミング

専用開発ソフトウェア「Arduino IDE」を使います。

私が作成したプログラムをコピペして使ってください。

Arduino IDEプログラミングの基本操作については、こちらの記事にて詳しく説明しています。

mBlockでプログラミングする場合は、ArduinoIDEプログラミングは不要です

STEP
mBlockプログラミング

スクラッチベースのビジュアルプログラミングツールmBlockを使ってプログラムを作成します

プログラム内容については、後述するプログラミング例を参考にしてください。

ArduinoIDEでプログラミングする場合は、mBlockプログラミングは不要です

STEP
動作確認

プログラムが完成したら動作確認を行います。

動作確認チェックリスト
  • 押しボタンを押すと、モーター停止⇒高速正転⇒低速正転⇒停止動作を行うか?
  • 低速正転停止後に押しボタンを押すと停止⇒高速逆転⇒低速逆転⇒停止動作を行うか?
  • LEDの点灯色は停止:赤、高速:緑、低速:黄で、逆転モード時は点滅するか?

L293Dを使ったDCモーター制御動作回路で使うもの

L293Dを使ったDCモーター制御動作回路で使うもの
配線が完了しプログラム転送できる状態写真
準備するもの
  1. パソコン
  2. Arduino本体
  3. USBケーブル
  4. ブレッドボード
  5. 電源モジュール
  6. LED(赤・緑・黄)
  7. 抵抗(220Ω)×3本
  8. 押しボタンスイッチ
  9. 抵抗(1kΩ)
  10. 9V電池
  11. スナップケーブル
  12. L293DモータードライバーIC
  13. DCモーター(+プロペラ)
  14. ジャンパー線(オスーオス)×15本

今回はELEGOO社のスーパースターターキットに含まれる部品で作ることができますが、Arduino裏面のショート対策としてクリアケースも併せて準備することをおすすめします。

モーター固定用のLEGOブロックはキットに含まれませんので、ご注意ください

モーターは動画撮影用に自前のLEGOブロックで固定しましたが、LEGOブロックを使わなくても配線・動作確認は可能です。

パソコン

プログラムを作成するために必要です。

プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。

パソコンのOSはWindows、Macどちらでも対応可能です。

Arduino本体【キット】

Arduino本体
Arduino本体

基本的なエディション「Arduino Uno」の互換機である、ELEGOO社のUNO R3を使用しています。

Arduino本体裏面のショート対策に、別売りのクリアケースの購入をおすすめしています。

各ソケットの役割など、Arduino本体の機能について以下の記事にて詳しく説明しています。

USBケーブル【キット】

必要なUSBケーブルの説明写真
USBケーブル

パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。

ブレッドボード【キット】

ブレッドボードの機能説明図
ブレッドボードの機能説明図

たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。

説明図は30列のショート版ですが、スーパースターターキットに含まれる63列タイプでも機能面は同じです

電源モジュール【キット】

電源モジュール
電源モジュール

ArduinoUnoのデジタル入出力ピンから供給できる電流は40mAとなっており、それほど大きくはありません。

今回使用するDCモーターは負荷回転時に最大250mA流れるため、電流値不足となってしまいます。

この対策として、今回のような外部電源モジュールを接続して駆動させる必要があります。

電源モジュールについては、こちらの記事にて詳しく説明しています。

LED(赤・黄・緑)【キット】

使用するLEDと極性の見分け方
LEDのプラス・マイナスの見分け方

赤色・黄色・緑色のLED(発行ダイオード)を1本ずつ使用します。

LED素子にはプラスマイナスの極性があるため配線時には注意が必要です。

極性を間違えて配線すると、LEDは点灯しません

抵抗(220Ω)【キット】

220Ω抵抗とカラーコードによる見分け方
220Ω抵抗と色による見分け方

220Ωの抵抗を使用し、各LEDに1本ずつ接続します。

LEDは流せる電流値に制約があるため、抵抗を直列つなぎすることでLEDに流れる電流を調節します。

抵抗は極性がないので、配線時に方向を気にする必要はありません。

LEDを点灯させるために接続する抵抗の選び方については、こちらの記事で詳しく説明しています。

押しボタン【キット】

押しボタンの説明
押しボタンの説明

今回のLESSONでは、押しボタンスイッチを使用します。

押しボタンは押されている間のみ、上記写真での2点が内部でつながります。

このようなボタンをモーメンタリボタンといいます。

今回は扱いませんが、ボタンから手を離してもONしたままになるボタンをオルタネイトボタンといいます。

モーメンタリ・オルタネイトボタンについては以下記事にて詳しく説明しています。

抵抗(1kΩ)【キット】

1kΩ抵抗と色による見分け方
1kΩ抵抗と色による見分け方

1kΩの抵抗を1本使用し、押しボタンスイッチに接続します。

抵抗を接続するのは、押しボタンがOFFのときにArduino本体がノイズによる誤検出することを避けるためです。

この記事では詳しく説明しませんが、ボタンを押していないのに押されたと誤認識されることを避ける目的であるということだけ覚えておいてください。

DC9V電池、スナップケーブル【キット】

9Vバッテリーとスナップケーブル
DC9V電池とスナップケーブル

9V電池とDCジャックがついたスナップケーブルです。

電源モジュールに接続します。

L293DモータードライバーIC【キット】

L293Dモータードライバー
L293Dモータードライバー

Arduinoのデジタル出力ソケットからの信号入力により、DCモーターの回転速度や正転・逆転制御をすることができます。

DCモーター(プロペラ付き)【キット】

DCモーターとプロペラ
DCモーターとプロペラ

DCモーターは直流電圧をかけるだけで回転させることができます。

パルス変調(PWM:Pulse Width Modulation)という出力方式を利用して、モーターの回転速度を制御することができます。

ジャンパー線(オスーオス)【キット】

キットに同梱されているジャンパー線(オスーオス)の説明
ジャンパー線

ジャンパー線を15本使用します。

Arduino本体とブレッドボードの接続や、ブレッドボードの共通電源ライン(GNDまたは5V)からブレッドボード内の配線系統穴に差し込んで接続するのに使います。

スターターキットに含まれる機器に関しては、以下の記事にて詳しく紹介しています。

配線のやり方

配線完了時の状態写真
配線完了時の状態写真
モータードライバーICであるL293Dを使ったDCモーター制御動作回路の配線説明図
LESSON15の配線説明図(fritzingを用いて作成)

上図が配線説明図となりますので、これと同じ配線をすれば完成します。

配線数が多いので、1本ずつ落ち着いて配線してください

機器が故障するおそれがあるので、接続するプラスマイナス極性には十分注意して配線してください。

電源モジュールの電圧設定ジャンパーは2か所とも「5V」設定にしてください。

抵抗は極性がありませんのでどちら側のピンを挿入してもOKです。

機器故障させないためにも、USBケーブルを抜いた「通電OFF」状態にて配線を行ってください

プログラミングのやり方

本記事では、以下に示す「Arduino IDEプログラミング」と「mBlockプログラミング」の2通りのプログラミング方法について解説しています。

いずれか1つのプログラミング方法を用いることで、LESSON15の制御動作を行うことが可能です。

ArduinoIDE:文字列による命令語形式
mBlock:スクラッチベースのビジュアル形式

文字列を使わないmBlockの方が、直感的で分かりやすく小学生におすすめのプログラミング方法になります。

mBlockを使ってプログラミングをする方は、mBlockの説明まで読み飛ばしてください。

6つのモーター動作モードについて

今回6つのモーター動作モードを用意して、それぞれの動作ごとにプログラムを作ります。

6つの動作モード
  • モード0:正転待機停止、赤点灯
  • モード1:高速正転、緑点灯
  • モード2:低速正転、黄点灯
  • モード3:逆転待機停止、赤点滅
  • モード4:高速逆転、緑点滅
  • モード5:低速逆転、黄点滅

モード0とモード3はどちらも「モーター停止」ですが、次に押しボタンを押したときの回転方向が赤色LEDの点灯・点滅でわかるように区別しています。

Arduino IDEプログラミング

Arduino IDEとは統合開発ソフトウェアで、C言語のような文字列を用いたプログラミング方法です。

プログラミングするにあたり、ある程度の命令語を知っておく必要があります。

Arduino IDEのインストール方法については、以下の記事で詳しく説明しています。

日本語版のArduino公式リファレンスが巻末に収録されているので関数を調べるときに重宝します!(私も所有しています)

プログラミング方法

Arduino IDEでのプログラミング画面(LESSON15)
Arduino IDEでのプログラミング画面

Arduino IDEを使って、文字列プログラミングを行います。

Arduino IDEを使ったプログラミング~動作確認方法については、以下の記事で詳細説明しています。

Arduino IDEプログラム

/* 作品名:LESSON15 */
/* 作成者:せでぃあ https://cediablog.com */
/* L293Dを使ったDCモーター制御 */

int BTN_SOCKET = 2;           //押しボタン入力ソケット番号
int MT1A_SOCKET = 3;          //L293Dの1A入力ソケット番号
int MT2A_SOCKET = 5;          //L293Dの2A入力ソケット番号
int MTEN_SOCKET = 7;          //L293DのEN入力ソケット番号
int LED_G_SOCKET = 8;         //緑色LED点灯出力ソケット番号
int LED_Y_SOCKET = 9;         //黄色LED点灯出力ソケット番号
int LED_R_SOCKET = 10;        //赤色LED点灯出力ソケット番号

int MODE = 0;                 //モーター回転モード

void setup() {
  // put your setup code here, to run once: プログラム起動時1回だけ処理される回路

  //入出力の割り当て

  pinMode(BTN_SOCKET, INPUT);        //2番ピンは入力として使用
  pinMode(MT1A_SOCKET, OUTPUT);      //3番ピンは出力として使用
  pinMode(MT2A_SOCKET, OUTPUT);      //5番ピンは出力として使用
  pinMode(MTEN_SOCKET, OUTPUT);      //7番ピンは出力として使用
  pinMode(LED_G_SOCKET, OUTPUT);     //8番ピンは出力として使用
  pinMode(LED_Y_SOCKET, OUTPUT);     //9番ピンは出力として使用
  pinMode(LED_R_SOCKET, OUTPUT);     //10番ピンは出力として使用

}

void loop() {
  // put your main code here, to run repeatedly: プログラム起動後ループ処理される回路

  if(digitalRead(BTN_SOCKET) == HIGH){          //押しボタンがONのとき
    if(MODE > 4){                               //モーター回転モードが5以上のとき
      MODE = 0 ;                                //モーター回転モードを0にする
  }else{                                        //モーター回転モードが4以下のとき
    MODE = MODE + 1 ;                           //モーター回転モードを+1の値にする
  }
    while(digitalRead(BTN_SOCKET) == HIGH){     //押しボタンが押されたままのときに待機させる
    }
  }

  if(MODE == 0){                                //モーター回転モード「0:正転停止」
    analogWrite(MT1A_SOCKET , 0);               //L293Dの1A出力「0」
    analogWrite(MT2A_SOCKET , 0);               //L293Dの2A出力「0」
    digitalWrite(MTEN_SOCKET , LOW);            //L293Dのイネーブル出力をOFF
    digitalWrite(LED_G_SOCKET , LOW);           //緑色LED点灯出力をOFF
    digitalWrite(LED_R_SOCKET , HIGH);          //赤色LED点灯出力をON
  }
  else if(MODE == 1){                           //モーター回転モード「1:正転高速」
    analogWrite(MT1A_SOCKET , 255);             //L293Dの1A出力「255」
    analogWrite(MT2A_SOCKET , 0);               //L293Dの2A出力「0」
    digitalWrite(MTEN_SOCKET , HIGH);           //L293Dのイネーブル出力をON
    digitalWrite(LED_G_SOCKET , HIGH);          //緑色LED点灯出力をON
    digitalWrite(LED_R_SOCKET , LOW);           //赤色LED点灯出力をOFF
  }
  else if(MODE == 2){                           //モーター回転モード「2:正転低速」
    analogWrite(MT1A_SOCKET , 125);             //L293Dの1A出力「125」
    analogWrite(MT2A_SOCKET , 0);               //L293Dの2A出力「0」
    digitalWrite(MTEN_SOCKET , HIGH);           //L293Dのイネーブル出力をON
    digitalWrite(LED_Y_SOCKET , HIGH);          //黄色LED点灯出力をON
    digitalWrite(LED_G_SOCKET , LOW);           //緑色LED点灯出力をOFF
  }
  else if(MODE == 3){                           //モーター回転モード「3:逆転停止」
    analogWrite(MT1A_SOCKET , 0);               //L293Dの1A出力「0」
    analogWrite(MT2A_SOCKET , 0);               //L293Dの2A出力「0」
    digitalWrite(MTEN_SOCKET , LOW);            //L293Dのイネーブル出力をOFF
    digitalWrite(LED_Y_SOCKET , LOW);           //黄色LED点灯出力をOFF
  }
  else if(MODE == 4){                           //モーター回転モード「4:逆転高速」
    analogWrite(MT1A_SOCKET , 0);               //L293Dの1A出力「0」
    analogWrite(MT2A_SOCKET , 255);             //L293Dの2A出力「255」
    digitalWrite(MTEN_SOCKET , HIGH);           //L293Dのイネーブル出力をON
    digitalWrite(LED_R_SOCKET , LOW);          //赤色LED点灯出力をOFF
  }
  else if(MODE == 5){                           //モーター回転モード「5:逆転低速」
    analogWrite(MT1A_SOCKET , 0);               //L293Dの1A出力「0」
    analogWrite(MT2A_SOCKET , 125);             //L293Dの2A出力「125」
    digitalWrite(MTEN_SOCKET , HIGH);           //L293Dのイネーブル出力をON
    digitalWrite(LED_G_SOCKET , LOW);           //緑色LED点灯出力をOFF
  }
  //モーター逆転モード時のランプ点滅回路//
  if(MODE == 3){                                //モーター回転モード「3:逆転停止」
    digitalWrite(LED_R_SOCKET , HIGH);          //赤色LED点灯出力をOFF
    delay(200);                                 //0.2秒ウェイト
    digitalWrite(LED_R_SOCKET , LOW);           //赤色LED点灯出力をON
    delay(200);                                 //0.2秒ウェイト
  }
  else if(MODE == 4){                           //モーター回転モード「4:逆転高速」
    digitalWrite(LED_G_SOCKET , HIGH);          //緑色LED点灯出力をOFF
    delay(200);                                 //0.2秒ウェイト
    digitalWrite(LED_G_SOCKET , LOW);           //緑色LED点灯出力をON
    delay(200);                                 //0.2秒ウェイト
  }
  else if(MODE == 5){                           //モーター回転モード「5:逆転低速」
    digitalWrite(LED_Y_SOCKET , HIGH);          //黄色LED点灯出力をOFF
    delay(200);                                 //0.2秒ウェイト
    digitalWrite(LED_Y_SOCKET , LOW);           //黄色LED点灯出力をON
    delay(200);                                 //0.2秒ウェイト
  }  
  delay(100);                                   //0.1秒ウェイト 
}

上記がモータードライバーL293Dを使った、DCモーター制御動作回路のプログラムになります。

Arduino IDEのプログラム画面にコピーアンドペーストすることで、動作確認まで進めることができます。

各プログラム列の右側にプログラム内容をコメント記入してありますので参考にしてください。

せでぃあ

6つのモードに対する動作を理解しておこう

命令語の解説

今回のプログラムで使用した命令文について、解説します。

変数のデータ型指定

変数のデータ型を指定するものです。

今回はピンソケット番号を代入するので整数を扱う「int型」を指定します。

またアナログ出力値は「0~255」の整数を扱いますので、同じく「int型」を指定します。

スクロールできます
データ型説明扱える範囲
int2バイトの整数を代入可能。-32768~32767
long4バイトの整数を代入可能-2,147,483,648~2,147,483,647
float4バイトの小数を代入可能。3.4028235×1038~-3.4028235×1038
char1バイトの値を代入可能。文字列の代入に利用されます。-128~127
boolean0または1のみ代入可能。フラグのON-OFFなどに利用されます。0,1

pinMode(入出力番号,INPUTまたはOUTPUT)

指定したデジタル入出力ソケット番号の機能を指示します。

入力として使用する場合は「INPUT」、出力の場合は「OUTPUT」を指定します。

digitalRead(入出力番号)

指定したデジタル入出力ソケット番号の状態がON、またはOFFであるか確認します。

ONのときは「HIGH」、OFFのときは「LOW」の値が返ってきます。

digitalWrite(入出力ソケット番号,HIGHまたはLOW)

指定したデジタル入出力ソケット番号の電圧をON、またはOFFします。

ONさせたいときは「HIGH」、OFFさせたいときは「LOW」を指定します。

analogWrite(入出力番号,0~255の範囲のアナログ値)

指定したデジタル入出力ソケット番号の電圧を255階調での値で出力します。

5V出力の場合、0のとき0V、255の時5Vの出力となります。

0Vと5Vの状態を時間の割合で調整して作る、疑似的なアナログ電圧になります。

delay(時間)

()内で指定した時間(単位はmsec)だけ、プログラム実行を待たせます。

マイクロ秒単位で指定したい場合は、delayMcroseconds(時間)を使います。

if 文

条件が成立しているときのみ、{ }内の文が実行されます。

条件が成立しなければ、{ }内の文は処理されず、次の処理に移ります。

if( 条件 ){
 条件成立時に実行する文 ;
}

if else文

条件式が成立しているか否かで、どちらの命令文を実行するか振り分けます。

if( 条件 ){
 条件成立時に実行する文 ;
} else {
 条件不成立時に実行する文 ;
}

比較演算子

スクロールできます
比較演算子説明
A == BAとBが等しい場合に成立
A != BAとBが等しくない場合に成立
A < BAがBより小さい場合に成立
A <= BAがB以下の場合に成立
A > BAがBより大きい場合に成立
A >= BAがB以上の場合に成立
比較演算子の説明

プログラミング初心者の方に、おすすめなArduinoの参考書を紹介しています!

mBlockプログラミング

スクラッチベースのビジュアルプログラミングツールmBlockプログラミングの説明(LESSON15)
mBlockを使ったプログラミング画面

ここからは、mBlockを使ったプログラムの作り方を解説します。

mBlockを使ったプログラムの作り方
  1. デバイスにArduino Uno R3を追加する
  2. 接続モードを「アップロードモードON」にする
  3. mBlockプログラムを作成する
  4. プログラムをArduino本体に転送する

これらの基本操作方法については、こちらの記事を参照してください。

プログラミング、動作確認方法については、本記事の説明動画でも紹介しています

せでぃあ

動画を参考にプログラミングしてみよう

変数の作り方

今回演算処理した値を代入するための変数が必要になります。

mBlockでの変数作成方法について紹介します。

①カテゴリエリアの「変数」をクリックします。
②ブロックエリアの「変数を作る」をクリックします。

①カテゴリエリアの「変数」をクリックします。

②ブロックエリアの「変数を作る」をクリックします。

③変数名をキーボード入力します。
④「このスプライトのみ」を選択します。
⑤「はい」をクリックしてウインドウを閉じます。

③変数名をキーボード入力します。

④「このスプライトのみ」を選択します。

⑤「はい」をクリックしてウインドウを閉じます。

作った変数がブロックとして表示されたら、作成完了です。

今回作成する変数は「回転モード」になります

mBlockを使ったプログラム内容

今回は「アップロードモード オン」でのプログラム作成例を紹介しています。

プログラム開始条件が「Arduino Unoが起動したとき」になっている点に注意してください。

以下のプログラムが動作プログラムになります。

mBlockを使ったL293DによるDCモーター回転制御プログラム
mBlockを使ったL293DによるDCモーター回転制御プログラム

mBlockのArduino専用ブロックについては、こちらの記事にて詳しく説明しています。

動作確認方法

L293Dを使ったDCモーター制御動作回路で使うもの
配線状態説明図
動作確認チェックリスト
  • 押しボタンを押すと、モーター停止⇒高速正転⇒低速正転⇒停止動作を行うか?
  • 低速正転停止後に押しボタンを押すと停止⇒高速逆転⇒低速逆転⇒停止動作を行うか?
  • LEDの点灯色は停止:赤、高速:緑、低速:黄で、逆転モード時は点滅するか?

上記項目について確認していきましょう。

押しボタンを押すと、モーター停止⇒高速正転⇒低速正転⇒停止動作を行うか?

モード0~2の動作になります。

プログラム転送後にモーター停止状態であることを確認してください。

次に押しボタンを押して、指が離れたときにモーターが高速回転することを確認してください。

もう一度押しボタンを押したときにモーター回転速度が低速になり、さらにボタンを押すと停止することが確認できれば動作OKです。

低速正転停止後に押しボタンを押すと停止⇒高速逆転⇒低速逆転⇒停止動作を行うか?

モード3~5の動作になります。

上記、モーター正転動作完了後のモーター回転停止状態からの動作確認になります。

先ほどの正転動作とモーター回転方向が逆になっていることを確認してください。

その他の動作は、正転動作時と同じになります。

停止動作後さらに押しボタンを押すと、再び正転動作からの繰り返し動作になります

LEDの点灯色は停止:赤、高速:緑、低速:黄で、逆転モード時は点滅するか?

各回転動作モードに合わせて、該当する色のLEDが1つだけ点灯・点滅することを確認してください。

モード0~2:正転動作のときは「点灯」、モード3~5:逆転動作のときは「点滅」となります。

LESSON15:L293Dを使ったDCモーター制御のまとめ

この記事の内容をまとめると
  • モータードライバーL293Dを使うとモーター回転制御が簡単にできる
  • DCモーターはArduinoからのPWM出力により回転速度を変えられる
  • 流す電流が大きい機器と接続する場合は、外部からの電源供給が必要

小学生のお子様には断然、ビジュアルプログラミングがおすすめです!

せでぃあ

モーターはプログラム学習ロボットmBotにも使われています!

最後まで読んでいただき、ありがとうございました。

子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!

Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。

Arduinoプログラミング(スクラッチも)を使った電子工作を紹介しています。

応援ありがとうございます(^^)/

Arduino(アルドゥイーノ)を使ったスクラッチプログラミングLESSON15:モータードライバーICのL293Dを使ってDCモーターを制御する

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次