MOSFETオプトカプラHW-532を使ってArduinoで最大30Vの直流モーターの速度または負荷を制御する方法
本プロジェクトガイドでは、ArduinoとHW-532オプトカプラ内蔵のMOSFETモジュールを使用して、汎用的な直流モーターの速度制御装置を作る方法を示します。MOSFETはFR120N、LR7843またはD4184。これにより、最大30Vまでの電圧の直流モーターの速度とオン/オフ状態を制御できます。HW-532モジュールは保護と絶縁を提供するため、モーターをArduinoに直接接続するよりも安全で信頼性が高くなります。

このプロジェクトはさまざまな用途で有用です。以下はいくつかの例です:
- ロボットアームの速度を正確に制御すること
- 冷却システム用可変速ファンの製作
- 動作を調整できる自動機械の製作
- 流体システム向け電動弁制御の開発
ハードウェア/コンポーネント
主要な構成要素はArduino、HW-532光結合MOSFETモジュール(MOSFETの選択肢:D4184、LR7843、またはFR120N)、DCモーター(定格電圧 ≤ 30V)、接続用配線で、オプションとして高度な制御用のポテンショメータやプッシュボタンスイッチを含めることができます(ビデオの19:34で)。
HW-532モジュール内でのMOSFETの選択は、あなたの電流要件によります(ビデオの01:24)。そのビデオでは異なるMOSFETの詳細な比較(ビデオの06:50)と、さまざまな用途への適合性(ビデオの09:45)が示されています。DCモーターのような誘導性負荷からモジュールを保護するため、ダイオードを入れることを忘れないでください(ビデオの06:00および22:02)。
配線ガイド
基本配線は、モーターの正端子をHW-532の出力に、モーターの負端子をHW-532のGNDに、HW-532の制御ピンをArduinoのデジタルピンに接続します(ビデオの11:16で)。

コードの解説
提供されたコードは3つの制御レベルを提供します:

- オン/オフ制御:この簡単なコード(ビデオの15:05で)はデジタルピンを使ってモーターのオン・オフを切り替えます。ユーザーが設定できる部分は
MOTOR_OUT_PINHW-532モジュールを制御するArduinoピンを定義する定数 - PWMによる速度制御:このコード(動画の15:39)では、パルス幅変調(PWM)を使ってモーターの速度を制御します。ユーザーは調整できます。
SPEED_MAXそしてSPEED_MIN速度制御の上限と下限を設定し、motorControl()そしてstopMotor()関数はそれぞれ、モーターを制御するためと停止させるために使用されます。 - ポテンショメータとプッシュボタンによる制御:このコード(ビデオの22:12)は、ポテンショメータでモーターの速度を制御し、プッシュボタンで開始/停止できるようにします。ユーザーが設定可能な部分には以下が含まれます。
POT_PIN(ポテンショメータの端子),MOTOR_OUT_PIN(PWM制御ピン),START_STOP_PIN(プッシュボタンピン),SPEED_MAX、そしてSPEED_MIN。
ライブプロジェクト/デモンストレーション
このビデオでは、3つのコード例すべての動作を示しています。オン/オフ制御は(ビデオの11:41)で示され、その後にPWMによる速度制御(ビデオの16:53)、最後にポテンショメータとプッシュボタンによる制御(ビデオの23:02)が示されます。
章
- [00:00] 導入とプロジェクト概要
- [01:24] HW-532 モジュールとMOSFETのオプション
- [03:23] 回路図と説明
- [05:11] コンポーネントの詳細
- [06:50] MOSFETデータシート解析
- [11:16] 基本配線とオン/オフの実演
- [15:05] オン/オフ制御用のArduinoコード
- [15:39] Arduino用PWM速度制御コード
- [19:34] ポテンショメータとプッシュボタンの配線
- [22:12] ポテンショメータとプッシュボタンを使ったArduinoコード
/*
* レッスン 108-1: このレッスンでは、FR120N、LR7843、およびD4184 MOSFETを使用して、最大10AのDC負荷をオン/オフする方法を学びます。HW-532は、モジュールに応じて5Vから30Vまでの負荷を最大10Aで光絶縁されています。回路図が示され、配線図が説明されており、押しボタンやポテンショメーターを使用した異なる配線方法も示されています。
* ビデオ https://youtu.be/eqXaqRFAWrA
*
* 著者: Ahmad Shamshiri for RoboJax.com
* // 2022年8月25日にカナダのAajxで公開。
*
* プロジェクト1: モーターまたは負荷のオン/オフ(このプロジェクト)
* プロジェクト2: Arduinoコードを使用して速度を制御
* プロジェクト3: ポテンショメーターと押しボタンを使用して速度を制御
*
* このコードのビデオ指示を視聴: https://youtu.be/eqXaqRFAWrA
*
* このコードは、ここから始まるArduinoステップバイステップコースの一部です: https://youtu.be/-6qSrDUA5a8
*
* このコードのライブラリは、http://robojax.com/を訪れてください。
*
* このチュートリアルが役に立った場合は、私がこのようなコンテンツを作成し続けることができるようにサポートしてください。クレジットカードを使用してPayPalで寄付してください https://bit.ly/donate-robojax
*
* このコードは「現状のまま」で提供され、保証や責任はありません。この注意書きをそのまま保持する限り、自由に使用できます。*
* このコードはRobojax.comからダウンロードされました。
* このプログラムはフリーソフトウェアです: 自由に再配布および/または修正できます。
* GNU一般公衆ライセンスの条件の下で、フリーソフトウェア財団によって公開されたライセンスのバージョン3に従って、または(お客様の選択に応じて)以降のバージョンで使用できます。
*
* このプログラムは、役に立つことを期待して配布されていますが、保証はありません; 特定の目的に対する商品性や適合性の仮の保証もありません。詳細については、GNU一般公衆ライセンスを参照してください。
*
* あなたはこのプログラムと共にGNU一般公衆ライセンスのコピーを受け取っているはずです。受け取っていない場合は、<https://www.gnu.org/licenses/>を参照してください。
*/
const int MOTOR_OUT_PIN=2;
void setup() {
// Robojax MOSFETモータードライバーコード
Serial.begin(9600);
Serial.println("Robojax LR7834 , Arduino");
pinMode(MOTOR_OUT_PIN, OUTPUT);
digitalWrite(MOTOR_OUT_PIN, HIGH);
}
// ループルーチンは永遠に何度も繰り返し実行されます。
void loop() {
// Robojax XY-GMOS MOSFET モータードライバーコード
} // ループ終了
# include <Arduino_LSM6DS3.h>
/*
* レッスン108-2:このレッスンでは、FR120N、LR7843、D4184 MOSFETを使用して、最大10AのDC負荷をON/OFFする方法を学びます。HW-532は、モジュールに応じて5Vから30Vの負荷を最大10Aまで光学的に隔離されています。回路図を示し、配線図を説明し、押しボタンとポテンショメーターを使用した異なる配線方法も示します。
* ビデオ https://youtu.be/eqXaqRFAWrA
* このプロジェクトのコードは https://robojax.com/RJT797 から取得してください。
*
* アハマド・シャムシリによるRoboJax.com向けの執筆
* // 2022年8月25日にカナダのオンタリオ州Aajxで公開。
*
* プロジェクト1:モーターまたは負荷のON/OFF(このプロジェクト)
* プロジェクト2:Arduinoコードを使用した速度制御
* プロジェクト3:ポテンショメーターと押しボタンを使用した速度制御
* このコードのビデオ説明を視聴してください:https://youtu.be/eqXaqRFAWrA
*
* このコードは、ここから始まるArduinoステップバイステップコースの一部です:https://youtu.be/-6qSrDUA5a8
*
* このコードのライブラリについては http://robojax.com/ を訪問してください。
*
* このチュートリアルが役に立った場合は、私がこのようなコンテンツを作成し続けるためにサポートしてください。クレジットカードでPayPalを使用して寄付してください https://bit.ly/donate-robojax
* *このコードは、「現状のまま」で保証や責任なしで提供されています。このメモをそのまま保持すれば自由に使用できます。*
* このコードはRoboJax.comからダウンロードされました。
* このプログラムはフリーソフトウェアです。GNU一般公衆ライセンスの条件の下で再配布及び/又は変更することができます。ライセンスのバージョン3または(あなたの選択で)それ以降のバージョンに基づいています。
*
* このプログラムは有用であることを期待して配布されていますが、いかなる保証もなく、商品性や特定の目的への適合性に関する暗黙の保証もありません。詳細についてはGNU一般公衆ライセンスを参照してください。
*
* このプログラムと共にGNU一般公衆ライセンスのコピーを受け取るべきです。受け取っていない場合は、<https://www.gnu.org/licenses/>を参照してください。
*/
const int MOTOR_OUT_PIN = 3;
const int SPEED_MAX = 100; // パーセントで
const int SPEED_MIN = 0; // パーセントで
const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // 0%から100%の間。
// 動画の指示 https://youtu.be/eqXaqRFAWrA
void setup() {
// Robojax XY-GMOS MOSFET モータードライバーコード
Serial.begin(9600);
Serial.println("Robojax XY-GMOS Motor, Arduino");
pinMode(MOTOR_OUT_PIN, OUTPUT);
} // セットアップが終了します
// ループルーチンは永遠に繰り返し実行されます。
void loop() {
// video https://youtu.be/eqXaqRFAWrA
motorControl(50); // モーターを50%で運転する
delay(5000); // 5000ミリ秒、または5秒間実行し続けてください。
stopMotor(); // モーターを止めてください
delay(3000); // 5000ミリ秒または5秒間停止させておいてください。
for(int i=0; i<100; i++)
{
motorControl(i);
delay(200);
}
stopMotor(); // モーターを停止する
delay(3000); // 5000ミリ秒または5秒間停止させておいてください。
for(int i=100; i >0; i--)
{
motorControl(i);
delay(200);
}
// Robojax LR7843 MOSFETモータードライバーコード
} // ループ終わり
/*
* モーター制御(int s)
* @brief 値sでモーターを制御します
* @param 何も返しません
* @param "type"は文字です
* 2020年5月8日 02:36、カナダ・オンタリオ州アジャックス
*/
void motorControl(int s)
{
// Robojax LR7843 MOSFETモータードライバーコード
// video https://youtu.be/eqXaqRFAWrA
int k = map(s, SPEED_MIN, SPEED_MAX, 0, 255);
Serial.print("Speed: "); Serial.print(s);Serial.println("%");
analogWrite(MOTOR_OUT_PIN, k);
} // モーター制御
/*
* モーターを停止します()
* @brief モーターを停止します
* @param 何も返しません
* @param
* 2020年5月8日02時36分、オンタリオ州アジャックス、カナダ
*/
void stopMotor(){
// Robojax XY-GMOS MOSFET モータードライバーコード
analogWrite( MOTOR_OUT_PIN, 0);
Serial.println("STOPPED");
} // ストップモーター()
/*
* レッスン108-3: 可変抵抗器(ポテンショメーター)を使ってモーターの速度を制御し、Arduinoを使ってスタート/ストップ押しボタンを使用する方法。
*
* このレッスンでは、FR120N、LR7843、D4184 MOSFETを使って、最大10AのDC負荷をON/OFFする方法を学びます。HW-532は、モジュールに応じて5Vから30Vの負荷で最大10Aの光電絶縁を提供します。回路図が示され、配線図が説明され、押しボタンやポテンショメーターを使用した異なる配線方法も示されています。
* ビデオ https://youtu.be/eqXaqRFAWrA
* このプロジェクトのコードは https://robojax.com/RJT797 から取得できます。
* RoboJax.comのためにアハマド・シャムシリが執筆しました。
* // 2022年8月25日にカナダのオンタリオ州Aajxで公開。
*
* プロジェクト1: モーターまたは負荷をON/OFFする
* プロジェクト2: Arduinoコードを使って速度を制御する
* プロジェクト3: ポテンショメーターと押しボタンを使って速度を制御する(このプロジェクト)
*
* このコードのビデオ指示を見る: https://youtu.be/eqXaqRFAWrA
*
* このコードは、ここから始まるArduinoステップバイステップコースの一部です: https://youtu.be/-6qSrDUA5a8
*
* このコードのライブラリはこちらで訪問: http://robojax.com/
*
* このチュートリアルが役に立った場合は、私のコンテンツ制作を続けられるよう支援してください。クレジットカードでPayPalを使って寄付してください https://bit.ly/donate-robojax
*
* このコードは、「現状のまま」で、保証や責任はありません。このメモをそのまま保持する限り、自由に使用できます。*
* このコードはRobojax.comからダウンロードされました。
* このプログラムはフリーソフトウェアです:GNU一般公衆ライセンスの下で再配布および/または変更できます。これは、フリーソフトウェア財団によって発行されたライセンスのバージョン3または(あなたの選択により)任意の後のバージョンの条件に従います。
*
* このプログラムは、有用であることを期待して配布されていますが、いかなる保証もなく、特定の目的に対する適合性の暗黙の保証さえありません。詳細については、GNU一般公衆ライセンスをご覧ください。
*
* GNU一般公衆ライセンスのコピーをこのプログラムとともに受け取っているはずです。受け取っていない場合は、<https://www.gnu.org/licenses/>を参照してください。
*/
const int POT_PIN =A0; // 変更できます
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // 押しボタンスイッチ用
const int SPEED_MAX = 100; // パーセントで
const int SPEED_MIN = 0; // パーセントで
// 動画の指示 https://youtu.be/eqXaqRFAWrA
const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // 0%から100%の間。
void pushButton();
void setup() {
// Robojax XY-GMOS MOSFETモータドライバコード
Serial.begin(9600);
Serial.println("Robojax XY-GMOS Motor, Arduino");
pinMode(START_STOP_PIN, INPUT_PULLUP);
pinMode(MOTOR_OUT_PIN, OUTPUT);
// 動画の指示 https://youtu.be/eqXaqRFAWrA
}
// ループルーチンは永遠に何度も繰り返し実行されます。
void loop() {
pushButton();
int potValue =analogRead(POT_PIN);
int speedPercent = map(potValue, 0, 1023, 0, 100);
if(motorState ==RUN)
{
motorControl(speedPercent);
}else{
stopMotor();
}
delay(500);
// Robojax XY-GMOS MOSFETモータドライバコード
// 動画の指示 https://youtu.be/eqXaqRFAWrA
} // ループ終了
/*
* モーター制御(int s)
* @brief 値 s でモーターを制御します
* @param 戻り値はありません
* @param "type" は文字です
* 2020年5月8日 02:36にカナダ、オンタリオ州アジャックスで
*/
void motorControl(int s)
{
// Robojax LR7843 MOSFETモータードライバーコード
// 動画の指示 https://youtu.be/eqXaqRFAWrA
int k = map(s, SPEED_MIN, SPEED_MAX, 0, 255);
Serial.print("Speed: "); Serial.print(s);Serial.println("%");
analogWrite(MOTOR_OUT_PIN, k);
} // モーター制御
/*
* motorを停止します()
* @brief モーターを停止します
* @param 戻り値はありません
* @param
* 2020年5月8日02:36、カナダ・オンタリオ州アジャックスにて
*/
void stopMotor(){
// Robojax XY-GMOS MOSFETモータドライバコード
// 動画の指示 https://youtu.be/eqXaqRFAWrA
analogWrite( MOTOR_OUT_PIN, 0);
Serial.println("STOPPED");
} // 停止モーター()
/*
* pushButton()
* @brief プッシュボタンを読み取ります
* @param 何も返しません
* @param
* 2020年5月8日 02:36 カナダ、オンタリオ州アジャックスにて
*/
void pushButton()
{
// Robojax XY-GMOS MOSFETモータドライバコード
// 動画の指示 https://youtu.be/eqXaqRFAWrA
if(digitalRead(START_STOP_PIN) ==LOW)
{
motorState =!motorState;
delay(100);
}
} // プッシュボタン()
必要かもしれないもの
-
アマゾンAmazonでHW-532を購入してください。amzn.to
-
イーベイeBayからFR120Nモータードライバーを購入するebay.us
-
アリエクスプレスAliExpressからFR120Nモータードライバーを購入するs.click.aliexpress.com
リソースと参考文献
まだリソースはありません。
ファイル📁
データシート(pdf)
-
インフィニオン-IRLR7843 LR7843 MOSFET データシート
infineon-irlr7843-datasheet-en.pdf0.37 MB
フリッツィングファイル
-
HW-532B モスフォットモジュール
HW-532B.fzpz0.01 MB
他のファイル
-
infineon-irfr120n-datasheet-en
infineon-irfr120n-datasheet-en.pdf0.39 MB -
alpha-and-Omega-AOD4184A_datasheet
alpha-and-Omega-AOD4184A_datasheet.pdf0.43 MB