シリアルダイアログによって制御されるステッパーベースの回転スタンド
コンポーネントと消耗品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 |
必要なツールとマシン
| ||||
|
このプロジェクトについて
全文はこちら:http://www.cesarebrizio.it/Arduino/Turntable.html
このプロジェクトは、ステッピングモーターをベースにした回転プラットフォームに関するものです。
ステッピングモデルは28BYJ48で、通常ステッピングと一緒に購入されるX113647ステッピングモータードライバー(ULN2003A ICに基づく)を介して制御されます。
プラットフォームは両方向に回転でき、シリアルモニターまたはTeraTermを介して制御されます。
次のコマンドが実装されています:
- R =時計回りに連続的に回転します(つまり、数回転します)
- r =360度回転します。時計回り
- L =反時計回りに連続的に回転します(つまり、数回転します)
- l =360度回転します。反時計回り
- S =回転を停止
機械的な観点から、組み立ては非常に簡単です。ベーステーブルには、約15cmx15cmのサイズの合板または同様の材料の正方形だけが必要です。
テーブルの中心は対角線の交差点にあります。その位置に6mmの穴が正確に開けられます。
ステッパーハブは中心から外れています。ハブを6mmの穴に差し込むことで、ステッパーの輪郭を鉛筆で描くことができます。
次に、ステッパーの輪郭の周りにできるだけきつい丸い穴をフレットソーで切り、ステッパーの2つの固定穴がテーブルの木にしっかりと固定されるようにして、ステッパーをテーブルに固定するために使用できるようにします。テーブル。
必要なクリアランスを確保するには、高さ10mmのゴム製パッドが必要です(ステッパーはテーブルの下に少しくっつきます)。
5mmシャフト用のPololuユニバーサルアルミニウム取り付けハブのおかげで、回転プレートはステッパーに固定されます。
情報源:
小さなステッパーコントロール:http://arduino-info.wikispaces.com/SmallSteppers
<図>
<図>
実は4本のピンを使ってみましたが、下の回路図は接続を正確に再現しています。上の写真を見てください(Arduinoの赤いワイヤーが「ピンク」の代わりになります):
#define motorPin1 4 //青-28BYJ-48ピン1#define motorPin2 5 //ピンク-28BYJ-48ピン2#define motorPin3 6 //黄色-28BYJ-48ピン3#define motorPin4 7 / /オレンジ-28BYJ-48ピン4 //赤-28BYJ-48ピン5(VCC)//青-28BYJ-48ピンGND #define STEPS_PER_TURN 2048 // 360度のステップ数;
<図>
コード
- Arduinoの完全なスケッチ
Arduinoの完全なスケッチ Arduino
コメント付きのソフトウェアの完全な説明/ *シリアルダイアログによって制御されるステッパーベースの回転スタンド回路とコメント:http://www.cesarebrizio.it/Arduino/Turntable.htmlを参照してください回路はここに示されているとおりです:https:// www.tdegypt.com/wp-content/uploads/2017/08/stepper-motor-wiring.png唯一の例外は、スケッチがデジタル出力4-5-6-7を使用しているのに対し、2017年12月23日に作成されたフリッツ図は変更された--- --by Cesare Brizioこのサンプルコードはパブリックドメインにあります。このスケッチは、ステッピングモーターに基づいて回転プラットフォームを制御します。ステッピングモデルは28BYJ48で、通常ステッピングと一緒に購入されるX113647ステッピングモータードライバー(ULN2003A ICに基づく)を介して制御されます。プラットフォームは両方向に回転でき、SerialMonitorまたはTeraTermを介して制御されます。次のコマンドが実装されています。R=時計回りに連続的に回転(意味:数回転)r =360度回転。時計回りL =反時計回りに連続的に回転します(意味:数回転)l =360度回転します。反時計回りS =回転を停止する情報源:小さなステッパーコントロール:http://arduino-info.wikispaces.com/SmallSteppers * // * -----(必要なライブラリをインポートする)----- * /#include/ * -----(定数とピン番号を宣言します)----- * // *絶対に入れないでください; #defineステートメントの後!!!! * ///モーターピン#definemotorPin1 4 //青-28BYJ-48ピン1#define motorPin2 5 //ピンク-28BYJ-48ピン2#define motorPin3 6 //黄色-28BYJ-48ピン3#define motorPin4 7 / /オレンジ-28BYJ-48ピン4 //赤-28BYJ-48ピン5(VCC)//青-28BYJ-48ピンGND #define STEPS_PER_TURN 2048 // 360度のステップ数; intmotorSpeed =500; //高速(800以上)は28BYJで不安定な動作を引き起こす可能性があります-48int motorAccel =400; //上記のように:極端な加速を回避する方がよいint myPos =0; // 360度の開始点を定義するために使用されます。 rotationsint LeftTurnUp =0; //回転方向を決定するためのいくつかのフラグintRightTurnDown =0; //回転方向を決定するためのいくつかのフラグintContinuous =0; //以下で単一回転コマンドを区別するために使用されますintincomingByte =0; //着信シリアルデータ用/ * -----(ステッパー制御用オブジェクト)----- * ///ピン4、5、6、7で4線バイポーラとしてステッパーを設定します//注:シーケンス1-3-2-4は、28BYJ48AccelStepper stepper(4、motorPin1、motorPin3、motorPin2、motorPin4)の適切なシーケンスに必要です。 void setup(){Serial.begin(9600); stepper.setMinPulseWidth(20); // Arduinoからのパルスが速すぎてデコードできないようにするための推奨設定stepper.setMaxSpeed(motorSpeed); stepper.setSpeed(motorSpeed); stepper.setAcceleration(motorAccel); //次の2行は、「ステップゼロ」を現在の位置にリセットしますstepper.setCurrentPosition(stepper.currentPosition()); stepper.runToPosition(); Serial.println( "使用可能なコマンド:"); Serial.println( "R =時計回りの連続回転"); Serial.println( "r =360度;時計回りの回転"); Serial.println( "L =反時計回りの連続回転"); Serial.println( "l =360度;反時計回りの回転"); Serial.println( "S =回転停止");} void loop(){if(Serial.available()> 0){incomingByte =Serial.read(); {if(incomingByte =='R'){Serial.println( "received«R»-時計回りの連続回転をアクティブ化"); //次の2行では、任意の順序でコマンドを送信できます。//実行前に、クイックストップが実行されますstepper.stop(); //できるだけ早く停止します:新しいターゲットを設定しますstepper.runToPosition(); //クイックストップ後に停止しました//次のいくつかのフラグは、回転方向を決定しますLeftTurnUp =1; RightTurnDown =0;連続=1; //以下で単一回転コマンドを区別するために使用されますstepper.setCurrentPosition(stepper.currentPosition()); //ステップ0を「ここ」に設定stepper.setSpeed(motorSpeed); //以前のコマンドは速度をリセットしました} if(incomingByte =='L'){Serial.println( "received«L»-連続的な反時計回りの回転をアクティブにします"); //次の2行では、任意の順序でコマンドを送信できます。//実行前に、クイックストップが実行されますstepper.stop(); //できるだけ早く停止します:新しいターゲットを設定しますstepper.runToPosition(); //クイックストップ後に停止しました//次のいくつかのフラグは、回転方向を決定しますRightTurnDown =1; LeftTurnUp =0;連続=1; //以下で単一回転コマンドを区別するために使用されますstepper.setCurrentPosition(stepper.currentPosition()); //ステップ0を「ここ」に設定stepper.setSpeed(motorSpeed); //以前のコマンドは速度をリセットしました} if(incomingByte =='r'){Serial.println( "received«r»-時計回りに1回転をアクティブにする"); //次の2行では、任意の順序でコマンドを送信できます。//実行前に、クイックストップが実行されますstepper.stop(); //できるだけ早く停止します:新しいターゲットを設定しますstepper.runToPosition(); //クイックストップ後に停止しました//次のいくつかのフラグは、回転方向を決定しますLeftTurnUp =1; RightTurnDown =0;連続=0; //以下で単一回転コマンドを区別するために使用されますstepper.setCurrentPosition(stepper.currentPosition()); //ステップ0を「ここ」に設定stepper.setSpeed(motorSpeed); //前のコマンドで速度がリセットされました// 2047ステップ進む必要があるため、現在の位置を//回転の開始点として保存しますmyPos =stepper.currentPosition(); } if(incomingByte =='l'){Serial.println( "received«l»-反時計回りの単一回転をアクティブ化"); //次の2行では、任意の順序でコマンドを送信できます。//実行前に、クイックストップが実行されますstepper.stop(); //できるだけ早く停止します:新しいターゲットを設定しますstepper.runToPosition(); //クイックストップ後に停止しました//次のいくつかのフラグは、回転方向を決定しますRightTurnDown =1; LeftTurnUp =0;連続=0; //以下で単一回転コマンドを区別するために使用されますstepper.setCurrentPosition(stepper.currentPosition()); //ステップ0を「ここ」に設定stepper.setSpeed(motorSpeed); //以前のコマンドで速度がリセットされました// 2047ステップ後退する必要があるため、現在の位置を//回転の開始点として保存しますmyPos =stepper.currentPosition(); } if(incomingByte =='S'){Serial.println( "received«S»-回転の停止"); //回転方向を決定するフラグをリセットしますLeftTurnUp =0; RightTurnDown =0; stepper.stop(); //できるだけ早く停止します:新しいターゲットを設定しますstepper.runToPosition(); //クイックストップ後に停止}}} if(Continuous ==1)//連続回転{if(LeftTurnUp ==1)//左折{stepper.moveTo(10000); //多くのステップを移動します-機械的に必要です} if(RightTurnDown ==1)//右折{stepper.moveTo(-10000); //多くのステップを移動します-機械的に必要なもの以上} stepper.run(); } if(Continuous ==0)//連続回転{if(LeftTurnUp ==1)//左折{stepper.moveTo(myPos + STEPS_PER_TURN); // 1ターン=2048ステップ} if(RightTurnDown ==1)//右ターン{stepper.moveTo(myPos-STEPS_PER_TURN); // 1ターン=2048ステップ}} stepper.run();}
回路図
フリッツィングで作られた完全な回路 製造プロセス