検索コード

レッスン52-1:基本コード:Arduinoを使用してリレーでDCモーターを制御する

レッスン52-1:基本コード:Arduinoを使用してリレーでDCモーターを制御する

このレッスンでは、2つのリレーとArduinoを使用してDCモーターの方向を制御する方法を学びます。モーターに供給される電圧の極性を変えることで、その方向を逆転させることができます。このプロジェクトは簡単で、Arduinoによるリレー制御を理解したい初心者に最適です。追加の洞察やデモンストレーションについては、動画(00:00の動画)を必ずご覧ください。

このチュートリアルでは、2つのリレーを使用してモーターへの電源の極性を切り替えます。1つのリレーがアクティブになると、電流が一方向に流れ、モーターがその方向に回転します。もう1つのリレーがアクティブになると、電流の流れが逆転し、モーターが反対方向に回転します。リレーはArduinoによって制御されるスイッチの役割を果たします。

2チャンネルリレーモジュール
2チャンネルリレーモジュール
5Vハイレベルトリガーリレーモジュール
5V ハイレベルトリガーリレーモジュール

ハードウェアの説明

このプロジェクトの主要なコンポーネントには、Arduinoボード、2つのリレー、DCモーター、および電源が含まれます。Arduinoボードは操作の頭脳であり、モーターの方向を制御するためにリレーに信号を送ります。各リレーには3つの端子があります:共通(COM)、通常閉じ(NC)、および通常開(NO)です。起動されると、リレーはCOM端子をNCまたはNO端子のいずれかに接続し、回路を効果的に切り替えます。

モーター-バッテリー-配線-反時計回り

上の画像は、モーターの配線をバッテリーに接続する方法を示しており、モーターはたとえば反時計回り(CCW)に回転します。

モーター・バッテリー・配線・CW

上の画像は、+ と - の配線をモーターの異なる端子に接続すると、例えば時計回り (CW) に回転することを示しています。

モーター-バッテリー-配線-2

Arduino、ESP32、またはRaspberry Piボードにリレーを直接接続することはできません。モーターの動作には非常に高い電流が必要だからです。

モーター・バッテリー・配線・3

Arduinoとモーターの間にモータードライバーが必要です。

リレーは重要です。なぜなら、Arduinoがモーターのような高出力デバイスを直接接続することなく制御できるからです。これは、Arduinoの出力ピンが限られた電流しか扱えないため、非常に重要です。リレーを使用することで、Arduinoから安全にモーターの動作を制御することができます。

モーターバッテリーワイヤリング5

上記のように二つのリレーを接続して、モーターの回転方向を制御できます。リレー1がONで、リレー2がOFFの場合、モーターは時計回りに回転します。

モーター-バッテリー-配線-6

上の画像は電流の流れを示しています。

モーター-バッテリー-配線-7

モーターの回転方向を制御するために、上に示されたように2つのリレーを接続できます。リレー1がOFFでリレー2がONの場合、モーターは反時計回り(CCW)に回転します。モーターの上にある矢印を見てください。

モーター・バッテリー・配線・8

上の画像は電流の経路を示しています。

データシートの詳細

製造業者 ソングル
部品番号 SRD-05VDC-SL-C
コイル電圧 5 V (DC)
接触定格値 10 A / 250 VAC
交流電 15 A 最大
切替電圧 30 V DC / 250 V AC
接触抵抗 ≤ 100 mΩ
絶縁抵抗 ≥ 1000 MΩ
動作温度 -40から+70 °C
パッケージ 2つのリレーを搭載したリレーモジュール

  • リレーがモーターの電圧と電流に適合していることを確認してください。
  • Arduinoとリレーモジュールの間に共通のグラウンドを使用してください。
  • 必要に応じて適切なフライバックダイオードを使用して、Arduinoを逆起電力から保護してください。
  • 配線の長さを短く保ち、抵抗と干渉を最小限に抑えてください。
  • システムの電源を入れる前にリレー接続を再確認してください。
  • モーターにフルパワーを適用する前に、低い電圧で回路をテストしてください。
  • トラブルシューティング中に簡単に識別できるようにワイヤーにラベルを付けてください。

配線指示

dual_relay_motor_wrring_bb
single_relay_motor_wrring_bb

コード例とウォークスルー

コードでは、リレー用に2つのピンを定義します。int relay1 = 2;int relay2 = 3;これらのピンはリレーの動作を制御します。setup()この関数はこれらのピンを出力として初期化し、両方のリレーを高に設定することでモーターをオフのままにします。

void setup() {
    pinMode(relay1, OUTPUT); // set pin as output for relay 1
    pinMode(relay2, OUTPUT); // set pin as output for relay 2
    digitalWrite(relay1, HIGH); 
    digitalWrite(relay2, HIGH); 
}

In theloop()モーターの方向を制御します。モーターを反時計回り(CCW)に回転させるために、設定します。relay1低くてrelay2高すぎます。これにより、電流は一方向に流れることができます。

digitalWrite(relay1, LOW); // turn relay 1 ON
digitalWrite(relay2, HIGH); // turn relay 2 OFF  
Serial.println("Rotating in CCW");  
delay(3000); // wait for 3 seconds

モーターを停止させるために、両方のリレーを再び高に設定してオフにします。その後、リレーの状態を切り替えて方向を反転させ、モーターを時計回り(CW)に回転させます。

digitalWrite(relay1, HIGH); // turn relay 1 OFF
digitalWrite(relay2, LOW); // turn relay 2 ON 
Serial.println("Rotating in CW");  
delay(3000); // wait for 3 seconds

この記事の下にこのプロジェクトの完全なコードが読み込まれています。コードの詳細な説明のために動画(00:00の動画)を必ずご覧ください。

デモンストレーション / 期待すること

セットアップが完了し、コードがアップロードされると、モーターは最初に3秒間反時計回りに回転し、その後2秒間停止し、次にさらに3秒間時計回りに回転し、最後に再び停止します。このサイクルは継続的に繰り返されます。一般的な落とし穴には、リレーの配線が不正確であることや、モーターを直接Arduinoに接続することが含まれ、これによりボードが損傷する可能性があります。期待される動作の視覚的確認については、ビデオを参照してください(ビデオは00:00にあります)。

ビデオのタイムスタンプ

  • 00:00 はじめに
  • 04:27 どのように機能しますか
  • 08:05 配線の説明
  • 11:45 基本コードの説明
  • 15:25 高度なコードの説明
  • 18:40 シングルリレー2つによるデモンストレーション
  • 19:43 デュアルリレー・モジュールを使用したデモンストレーション

画像

5V HIGH-level trigger relay module
5V HIGH-level trigger relay module
2 chanel relay module
2 chanel relay module
dual_relay_motor_wrring_bb
dual_relay_motor_wrring_bb
motor-battery-wiring-8
motor-battery-wiring-8
motor-battery-wiring-7
motor-battery-wiring-7
motor-battery-wiring-6
motor-battery-wiring-6
motor-battery-wiring-5
motor-battery-wiring-5
motor-battery-wiring-4
motor-battery-wiring-4
motor-battery-wiring-3
motor-battery-wiring-3
motor-battery-wiring-2
motor-battery-wiring-2
motor-battery-wiring-CW
motor-battery-wiring-CW
motor-battery-wiring-CCW
motor-battery-wiring-CCW
single_relay_motor_wrring_bb
single_relay_motor_wrring_bb
492-Lesson 52: Control a DC motor with a relay using Arduino (two projects)
言語: C++
++
/*
* Lesson 52: Control a DC motor with Relay using Arduino | Arduino Step By Step Course
Basic code
 * Arduino code to change the direction of rotation 
 * of a DC motor with 2 relays.
 
 * 
 * This is basic code. I have advanced code which can be used in both 
 * for Low-level trigger and High-level trigger relay with clean code.
Please watch video explaining this code: https://youtu.be/2n0vUa0cZOI

 * 
 * Written by Ahmad Shamshiri for Robojax.com on 
 * Sunday, August 18, 2019 
 * at 20:22 in Ajax, Ontario, Canada
 * 

This code is available at http://robojax.com/course1/?vid=lecture52
 
with over 100 lectures free on YouTube. Watch it here: http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339  


or make a donation using PayPal: http://robojax.com/L/?id=64
* 
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


int relay1 = 2;
int relay2 = 3;


void setup() {

    pinMode(relay1, OUTPUT);// set pin as output for relay 1
    pinMode(relay2, OUTPUT);// set pin as output for relay 2


    // keep the motor off by keeping both HIGH
    digitalWrite(relay1, HIGH); 
    digitalWrite(relay2, HIGH); 

 
  
  Serial.begin(9600);// initialize serial monitor with 9600 baud
  Serial.println("Robojax Motor Direction of Rotation");
  Serial.println("Using 2 Relays");  
  delay(2000);
}

void loop() {

 // Rotate in CCW direction
  digitalWrite(relay1, LOW);// turn relay 1 ON
  digitalWrite(relay2, HIGH);// turn relay 2 OFF  
  Serial.println("Rotating in CCW");  
  delay(3000);// wait for 3 seconds

 // stop the motor
  digitalWrite(relay1, HIGH);// turn relay 1 OFF
  digitalWrite(relay2, HIGH);// turn relay 2 OFF
  Serial.println("Stopped");  
  delay(2000);// stop for 2 seconds
  
 // Rotate in CW direction
  digitalWrite(relay1, HIGH);// turn relay 1 OFF
  digitalWrite(relay2, LOW);// turn relay 2 ON 
  Serial.println("Rotating in CW");  
  delay(3000);// wait for 3 seconds

 // stop the motor
  digitalWrite(relay1, HIGH);// turn relay 1 OFF
  digitalWrite(relay2, HIGH);// turn relay 2 OFF
  Serial.println("Stopped");  
  delay(2000);// stop for 2 seconds 
  
 Serial.println("===============");

          
}// loop end

必要かもしれないもの

ファイル📁

ファイルは利用できません。