検索コード

ULN2003ドライバーとArduinoを使用した28BYJ-48ステッパーモーター

ULN2003ドライバーとArduinoを使用した28BYJ-48ステッパーモーター

このチュートリアルでは、Arduinoを使用してULN2003ドライバーで28BYJ-48ステッパーモーターを制御する方法を学びます。このセットアップにより、モーターの位置と速度を正確に制御できます。このプロジェクトの終わりまでには、モーターを両方向に回転させ、ステップを効果的に制御できるようになります。

私たちは、低コストで使いやすいため、さまざまなロボティクスや自動化プロジェクトに人気のある28BYJ-48ステッパーモーターを使用します。ULN2003ドライバーボードは、ステッパーモーターとArduinoを接続し、モーターの動きを制御するステップ信号を送信できるようにします。このチュートリアルでは、モーターを回転させるために必要な配線とコードを案内します。

さらなる明確化のために、このチュートリアルに関連するビデオを参照してください(ビデオの0:45で)。

ハードウェアの解説

このプロジェクトの主要なコンポーネントには、28BYJ-48ステッピングモーターとULN2003ドライバーボードが含まれています。ステッピングモーターは、特定の順序で励磁されるいくつかのコイルで構成されており、回転を生み出します。ULN2003ドライバーはスイッチとして機能し、Arduinoが各コイルに供給される電力を制御できるようにします。

ULN2003ドライバーは、ステッピングモーターに必要な高い電流を処理するためにダーリントン・トランジスタ・アレイを使用しています。ArduinoのピンがHIGH信号を出力すると、モーターの対応するコイルに電流が流れ、モーターが動きます。これにより、モーターの回転角度と速度を正確に制御することができます。

データシートの詳細

製造業者ULN2003
部品番号ULN2003
ロジック/IO電圧5 V
供給電圧5-30 V (最大)
出力電流(チャネルごと)最大500 mA
ピーク電流(チャネルごと)2 A 最大
PWM周波数ガイダンスN/A
入力ロジック閾値0.8 V(低)、2.4 V(高)
電圧降下 / RDS(on)/ 飽和度1.5 V 最大
熱的制限最大70 °C
パッケージDIP-16
ノート / バリアント一般的に5Vステッパーモーターと一緒に使用されます。

  • ドライバーがあなたのモーターの現在の要件に対応できることを確認してください。
  • 必要に応じて、熱限界を管理するためにヒートシンクを使用してください。
  • すべての接続が確実であることを確認し、浮遊入力を避けてください。
  • モーターをテストするために、より大きなプロジェクトに統合する前に、シンプルなステップシーケンスを実行してください。
  • モーターに適切な供給電圧を供給することを確認してください。

配線指示

28BYJ-48ステッピングモーターをULN2003ドライバーとArduinoに接続するには、次の手順に従ってください:

まず、モーターをULN2003ドライバーに接続します。モーターには通常、オレンジ、黄色、ピンク、青の4本のワイヤーがあります。これらのワイヤーをULN2003ドライバーの対応する出力ピンに接続します。接続は次のようになります:

  • OrangeワイヤーへOUT1
  • YellowワイヤーへOUT2
  • PinkワイヤーへOUT3
  • BlueワイヤーへOUT4

次に、ULN2003ドライバーをArduinoに接続します。ドライバーの入力ピンは、Arduinoの4つのデジタルピンに対応しています。例えば:

  • IN1Pin 10
  • IN2Pin 11
  • IN3Pin 12
  • IN4Pin 13

最後に、ULN2003ドライバーの電源ピンとグラウンドピンをArduinoに接続します。接続するVCCArduinoの5V出力にピンを接続し、GNDArduinoのグラウンドにピンを接続します。システムの電源を入れる前に、すべての接続が確実であることを確認してください。

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

Arduinoコードのセットアップセクションでは、ULN2003ドライバーに接続されているピンを定義します。

int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 

ここでは、4つの整数変数を宣言します:Pin1,Pin2,Pin3, とPin4Arduinoのデジタルピンに対応するこれらのピンは、ステッパーモーターの動きを制御します。

中でsetup()関数では、これらのピンを出力として設定します:

void setup() { 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 

このセットアップにより、ArduinoはULN2003ドライバーに信号を送信してモーターを制御できるようになります。pinMode関数は各ピンをOUTPUTモードに設定し、信号を送信できるようにします。

最後に、メインループでは、変数に基づいてモーターのステップを制御するためのスイッチケースを作成します。_step:

switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   // Additional cases follow
}

この抜粋では、私たちは使用しますdigitalWrite各ピンに現在の状態に基づいてHIGHまたはLOW信号を送信するために_stepこの制御は、どのコイルが励磁されるかを決定し、モーターが回転することを可能にします。これらのスニペットを統合した完全なコードは、記事の下に読み込まれます。

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

すべてが正しく配線され、コードがアップロードされると、ステッパーモーターはArduinoからの信号に応じて回転するはずです。ループ内の遅延を変更したり、ステップを変更したりして、モーターの反応をテストできます。モーターが正しく電源供給されていない場合、動かないか、異常な動作をする可能性があることに注意してください。

  • イントロダクション - 0:00
  • ハードウェアの説明 - 1:30
  • 配線指示 - 3:15
  • コード例とウォークスルー - 5:00
  • デモンストレーション / 期待すること - 7:45
6-The source code for stepper motor 28BYJ-48 with ULN2003 for Arduino
言語: C++
/*
 * 原文のソースは http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino です。  
 * RoboJax.com のために Ahmad Shamshiri によって更新されました。  
 * 2017年3月27日にカナダのオンタリオ州アジャックスで公開されました。  
 * 
 * このコードの配線図が必要です: https://youtu.be/0glBk917HPg  
 * 私のArduinoコースをUdemy.comで購入してください http://robojax.com/L/?id=62  
 * 
 * このコードや他のArduinoコードをRoboJax.comから取得してください。  
 * すべての資料、配線図、ライブラリが一つの場所で揃った構造的なコースでArduinoを一歩ずつ学びましょう。  
 * 私のコースをUdemy.comで購入してください http://robojax.com/L/?id=62  
 * 
 * このチュートリアルが役立ったと思われたら、私がこのようなコンテンツを作り続けるためにサポートしてください。  
 * 
 * またはPayPalを使用して寄付をしてください http://robojax.com/L/?id=64  
 * 
 * このコードは「現状のまま」であり、保証や責任はありません。このメモをそのまま保持する限り、自由に使用できます。  
 * このコードはRoboJax.comからダウンロードされました。  
 * このプログラムはフリーソフトウェアです:あなたはこれを再配布または修正することができます。  
 * これはGNU一般公衆ライセンスの条件の下で刊行されており、ライセンスのバージョン3または(あなたの選択により)それ以降のバージョンです。  
 * 
 * このプログラムは役立つことを期待して配布されていますが、保証は一切ありません。  
 * 商品性または特定の目的への適合性の暗黙の保証すらありません。詳細についてはGNU一般公衆ライセンスを参照してください。  
 * 
 * あなたはこのプログラムと共にGNU一般公衆ライセンスのコピーを受け取るべきです。  
 * もし受け取っていない場合は、<https://www.gnu.org/licenses/>を参照してください。
 */
int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13;
int _step = 0;
boolean dir = true; // 偽=時計回り、真=反時計回り
int count=0;
void setup()
{
 pinMode(Pin1, OUTPUT);
 pinMode(Pin2, OUTPUT);
 pinMode(Pin3, OUTPUT);
 pinMode(Pin4, OUTPUT);
}
 void loop()
{
 switch(_step){
   case 0:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, HIGH);
   break;
   case 1:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, HIGH);
     digitalWrite(Pin4, HIGH);
   break;
   case 2:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, HIGH);
     digitalWrite(Pin4, LOW);
   break;
   case 3:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, HIGH);
     digitalWrite(Pin3, HIGH);
     digitalWrite(Pin4, LOW);
   break;
   case 4:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, HIGH);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
   case 5:
     digitalWrite(Pin1, HIGH);
     digitalWrite(Pin2, HIGH);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
     case 6:
     digitalWrite(Pin1, HIGH);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
   case 7:
     digitalWrite(Pin1, HIGH);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, HIGH);
   break;
   default:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
 }
 if(dir){
   _step++;
 }else{
   _step--;
 }
 if(_step>7){
   _step=0;
 }
 if(_step<0){
   _step=7;
 }
 delay(1);

}

ファイル📁

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