パンとチルトヘッドを備えたDIYカメラスライダー–Arduinoベースのプロジェクト
このチュートリアルでは、パンとチルトヘッドを備えた電動カメラスライダーの作り方を学びます。このArduinoベースのプロジェクトは100%DIYで、MDFや合板などの安価な素材で構築され、Arduino、3つのステッピングモーター、いくつかのボタン、カスタムデザインのPCBに取り付けられたジョイスティックを使用して制御されます。それにもかかわらず、最終結果は非常に印象的で、非常にスムーズなカメラの動きにより、プロ並みの映画のようなショットを撮ることができます。
次のビデオを見るか、以下のチュートリアルを読むことができます。
コントローラを使用して、カメラを手動で移動するか、開始点と終了点を設定すると、カメラが自動的に一方の位置からもう一方の位置に移動します。また、サポートアームを使用すると、小さな三脚にもスライダーを好きな角度で取り付けることができ、安定した動きを得ることができます。
まず、3Dモデリングソフトウェアを使用してスライダーを設計しました。
この3Dモデルを見つけてダウンロードし、以下の3Dモデルからすべての寸法を取得したり、Thangsのブラウザで調べたりすることができます。
Thangsからアセンブリの3Dモデルをダウンロードします。
3DプリントGT2プーリーリンク:
Thingiverse
そこで、22mmティック銅パイプを使用したスライダーレールの製作から始めました。スライダーの長さを1メートルにすることにしたので、2枚を1メートルの長さにカットしました。銅パイプは酸化しやすいので、金属研磨で研磨する必要があります。私の場合、持っていなかったので、その目的で歯磨き粉を使いました。
これは完璧な解決策ではありませんでしたが、違いに気づき、パイプを少しきれいにしました。
次に、2本のパイプを取り付ける木製のベースを作成しました。これは、スライダーを三脚に取り付けるためにも使用されます。丸鋸を使用して、21mmのティック合板を2枚カットし、それらを接着して1枚のティッカーピースを作成しました。次に、無垢材を使用して、三脚取り付けプレートのレプリカを作成し、木工用ボンドとネジを使用して合板に取り付けました。これで、スライダーベースを三脚に簡単に取り付けることができます。
スライダーレールを8mmのネジ山付きロッドを使用してベースに取り付けるので、ベースに2つの穴を開け、以前にサイズに合わせてカットした138mmの長さのロッドを挿入しました。次に、パイプに8mmの目盛り穴を開ける必要がありましたが、これは実際には少し注意が必要です。
そのために、鉛筆を11mmの高さ、つまりパイプの直径の半分まで持ち上げる簡単なジグを作成しました。次に、パイプを平らな面に固定し、ジグを使用してパイプの両側からマークを付けました。これにより、両側から正確に降りる穴を得ることができます。そこで、最初に鋭いネジ先でドリルポイントに印を付け、次に2、4、6、8mmのドリルビットを使用して徐々にドリルしました。
その後、レールをねじ山ロッドに挿入し、ワッシャーとナットを使用して、それらをスライダーベースに固定しました。同様の方法で、合板とネジ山ボルトを使用して、レールの端を固定しました。
次はスライディングプラットフォームです。ここでも、3Dモデルに応じたサイズに8mmティックMDFボードを切断するために丸鋸を使用しました。また、ベアリングを取り付けるネジ棒用に8mmの穴を開けました。プラットフォームを組み立てるために、私は木工用ボンドといくつかのネジを使用しました。コードレスドリルを使用して、最初に下穴を開け、次にカウンターシンクを作り、3mmのネジを所定の位置にねじ込みました。
パネルが固定されたら、ベアリングシステムの組み立てを続けました。私が使用しているベアリングは外径22mmの608Zです。 2つのワッシャーと2つのベアリング間のナットにより、それらの間に十分な距離ができ、22mmレールとの良好な接触が可能になります。
スライダーを斜めに使用する際にプラットフォームをより安全にするために、同様に、プラットフォームの下側にさらに2セットのベアリングを挿入しました。最終的に、スライディングプラットフォームは完全に機能することが判明しました。
ここで、頑丈ではない小型の三脚のスライダーに沿ってプラットフォームを動かすと、ヘッドがプラットフォームの重量を支えることができないため、スライダーを安定させるためにサポートアームを作成する必要がありました。そこで、2枚の木といくつかのナットとボルトを使用して、三脚の脚の1つに固定できる簡単なクランプを作成しました。
クランプには、支持アームを固定できるボルトが付いています。次に、スライダーを別の角度に配置できるようにするために、サポートアームにスロットを作成する必要がありました。 6mmの穴をたくさん開けて、ラスプを使って細い直線を作ってスロットを作りました。このサポートシステムは最終的に完全に機能しました。
三脚を使用したくない、または使用する必要がない場合に備えて、スライダーに脚を追加してこのビルドを続けました。私はそれらを8mmMDFで作りました。手のこぎりとラスプを使用して、簡単に希望の脚の形を得ることができました。次に、小さな接着剤と2つのナットを使用して、スライダーの端に固定しました。
次の段階は、スライディングプラットフォームの上部に取り付けられるパンとチルトのシステムを構築することです。丸鋸を使用して、3Dモデルから取得した寸法を使用して、必要なすべてのピースをカットしました。スライダーを斜めにセットしたときのカメラのレベリングプラットフォームのヒンジ機構を作るために数枚の合板を使用し、モーターとパンシステム用のベアリングに適切な穴を開けたいくつかのMDFボードを使用しました。
ステッピングモーターとスライディングプラットフォームのタイミングベルトの取り付けに移りました。プラットフォームの片側で、MDFボードといくつかのネジとボルトでステッピングモーターを固定しました。そしてスライダーの反対側にアイドラープーリーを固定したので、タイミングベルトを取り付けることができます。 2本のボルトと結束バンドを使用して、タイミングベルトをスライド式プラットフォームに簡単に固定しました。
このステップで、スライド機構は完全に完成しました。
パンとチルトシステムの上部を作り続けました。 3Dモデルによると、ステッピングモーターとベアリングに適切な穴をすべて開け、すべてを接着してねじ込みました。
私の友人は私のために2つの80歯の滑車を3D印刷しました。このようにして、ステッピングモーターに取り付けられた16歯のプーリーに比べて5倍の速度低下が得られました。
セットアップに応じて閉ループタイミングベルトを作成する必要があったので、必要なベルトの長さを測定し、カットしてから、CA接着剤で接着し、その上にテープを追加しました。 CA接着剤はゴムとの相性が良いので、閉ループベルトは問題なく機能します。
次に、パンとチルトシステムの最終組み立てを開始しました。最初にいくつかのボルトを使用してチルトモーターを固定し、次にエポキシでスロットに固定しながら2つのベアリングを所定の位置に追加しました。次に、8mmのボルトを使用して傾斜プラットフォームをパンプラットフォームに固定し、同時にタイミングベルトと一緒に80歯のプーリーを取り付けました。
ここでベルトが少し緩んでいることに気づきましたが、ステッピングモーターのボルトがベルトテンショナーとして機能する場所に小さなベアリングを追加しました。これはうまくいったので、ベルトは適切に機能するのに十分な張力がありました。
次に、パンモーターを固定し、レベリングプラットフォームの上面と下面にベアリングを追加しました。次に、それらにボルトを挿入し、スラストベアリング、80歯のプーリー、およびタイミングベルトを追加し、それらの上に、前に組み立てたチルトヘッドを追加します。最後にボルトで固定しました。これでスライダーの組み立てが完了しました。
さて、次は楽しい部分または電子部品の取り付けです。これがこのDIYカメラスライダープロジェクトの回路図です。
したがって、3つのNEMA 17ステッピングモーターは、3つのA4988ステッピングドライバーを介して制御されます。スライダーの動きを制御するために、Arduinoのアナログ入力に接続されたポテンショメーターを使用し、パンとチルトヘッドを制御するために、実際には2つのポテンショメーターで構成されるジョイスティックモジュールを使用するため、2つのアナログ入力に接続されます。また、イン位置とアウト位置からの自動移動の速度を設定するために使用される別のポテンショメータもあります。これらのインとアウトの位置は、プッシュボタンを使用して設定されます。このプッシュボタンにはプルアップ抵抗があり、Arduinoボードのデジタルピンに接続されています。リセットプッシュボタン、電源スイッチ、電源ジャック、スライダー用のリミットスイッチ、インとアウトの状態を示す2つのLEDもあります。このプロジェクトには9Vまたは12Vのいずれかで電力を供給できます。
このプロジェクトに必要なコンポーネントは、以下のリンクから入手できます。
次に、回路図に従って、電子部品を整理しておくためにカスタムPCBを設計しました。
EasyEDAの無料オンライン回路設計ソフトウェアを使用してそれを行いました。回路にはかなりの数の接続があったので、私は最上層と最下層の両方を使用し、機能的で見栄えの良いPCBを得ることができました。このステップが終了したら、PCBを製造するために必要なガーバーファイルを生成しました。次に、実際にこのチュートリアルのスポンサーであるJLCPCBにPCBを注文しました。
ここでは、ガーバーファイルをアップロードするだけで、アップロードしたら、ガーバービューアでPCBを再度確認できます。すべてが順調であれば、先に進み、PCBに必要なプロパティを選択してから、PCBをリーズナブルな価格で注文できます。 JLCPCBからの最初の注文の場合、わずか2ドルで最大10個のPCBを入手できることに注意してください。
それにもかかわらず、1週間後にPCBが到着しました。 PCBの品質は素晴らしく、独自のPCBデザインを製造することは非常に満足のいくものであることを認めなければなりません。
では、次に電子部品の組み立てに移りました。ピンヘッダーPCBをはんだ付けすることから始めました。これにより、必要なときにコンポーネントを簡単に接続および切断できます。実際には、PCBに直接はんだ付けしたコンデンサと抵抗を除くすべてにピンヘッダーを使用しました。そのため、すべての電子部品にジャンパー線をはんだ付けし続けました。
このようにして、コンポーネントをコントローラーケースに簡単に取り付けると同時に、PCBに接続することができます。
コントローラーケースは、電子部品の美しさをすべて見せたかったので、4mmティックの透明アクリルで作ることにしました。丸鋸を使用して、ケースのパネルをサイズに合わせてカットしました。次に、ドリルとForstnerビットを使用して、フロントパネルにボタン、ポテンショメータ、電源スイッチ、ジョイスティック用の開口部を作成しました。その後、5分間のエポキシを使用してケースを組み立て、上部には2つのボルトを挿入して接着しました。このボルトを通して、フロントパネルを挿入し、上部のナットを使用して固定できます。
最後に、ArduinoボードとA4988ステッパードライバーをPCBに挿入して、電子機器の組み立てを開始しました。次に、フロントパネルのボタンやその他のコンポーネントの挿入と固定を続けました。
それらを固定したら、コンポーネントをPCBの適切なピンヘッダーに接続しました。ケースのサイドパネルに電源ジャックを追加し、PCBをケースに挿入しました。同じパネルには、ドライバーとステッピングモーターを接続するためのジャンパー線を挿入するための穴と、スライダーの端に配置したリミットスイッチもあります。
いくつかの熱収縮チューブを使用して、コントローラーケースから出てくるジャンパー線を整理し、最後に、コントローラーを3つのステッピングモーターとリミットスイッチに接続するだけで済みました。
スライダーへの電力供給に関しては、直列に接続された3つの3.7Vリチウムイオン電池を使用して約11Vを生成しました。これで、スライダーが完成し、完全に機能します。
このチュートリアルに残っているのは、Arduinoコードを見て、プログラムがどのように機能するかを説明することです。コードが少し長いので、理解を深めるために、プログラムのソースコードを各セクションの説明とともにセクションに投稿します。そして、この記事の最後に、完全なソースコードを投稿します。
このプログラムは、MikeMcCauleyによるAccelStepperライブラリに基づいています。これは、複数のステッピングモーターを同時に簡単に制御できる素晴らしいライブラリです。したがって、このライブラリとその一部であるMultiStepper.hライブラリを含めると、使用するすべてのArduinoピンを定義し、ステッパーのインスタンスを定義し、以下のプログラムに必要ないくつかの変数を定義する必要があります。
セットアップセクションでは、ステッパーの初速度値を設定し、いくつかのピンモードを定義し、「StepperControl」と呼ばれるマルチステッパー制御インスタンスに3つのステッパーを追加します。 whileループを使用して、スライダーを初期位置に移動するか、リミットスイッチを押すまでスライダーを動かしてから、リミットスイッチを解除するために200ステップ戻ります。
ループセクションでは、スライダーがリミット位置に到達したかどうか、またはそれがリミットスイッチまたはその反対側の80cmに到達したかどうかを確認することから始めます。
次のifステートメントでは、ジョイスティックスイッチを押すたびにパンとチルトの速度を上げます。
次に、INとOUTの位置を設定するためのSetボタンを押したかどうかを確認します。ボタンを最初に押すだけで、ステッピングモーターのIN位置が保存され、INLEDも点灯します。
同様に、2回目のプッシュで、OUT位置を保存し、OUTLEDを点灯します。
次にボタンを押すと、モーターの最高速度を設定するために使用される自動速度ポテンショメーターの値が読み取られます。また、IN位置を「gotoposition」配列に配置します。この配列は、すべてのステッパーに必要な速度を個別に計算するmoveTo()関数で使用されます。次に、runSpeedToPosition()関数を使用して、スライダーが自動的にイン位置に移動します。
まったく同じように、ケース番号3の場合、またはボタンをもう一度押すと、スライダーがOUTの位置に移動します。
Setボタンを0.5秒以上押し続けると、4番目のcaseステートメントが実行され、INとOUTの位置がリセットされ、新しい位置を設定できるようになります。
次は、ジョイスティックのパンとチルトのコントロールです。ジョイスティックから取得するアナログ値は0〜1024、または中央にある場合の値は約500です。したがって、ジョイスティックを左に移動し、アナログ値が600より大きい場合は、速度を設定します。特定のモーターを正に、反対に、ジョイスティックを右に動かすと、モーターの速度を負に設定します。これは、モーターが反対方向に回転することを意味します。
中央に留まる場合は、速度を0に設定します。この方法は、ジョイスティックの軸とスライダーポテンショメーターの両方に使用されます。実際、ポテンショメータの場合、そのアナログ値を使用して、ポテンショメータをさらに回転させたときにモーターの速度も上げます。
最後に、3つのステッピングモーターのそれぞれに対してrunSpeed()関数を呼び出し、上記のコマンドを実行するか、モーターを適切に回転させます。
完全なソースコードは次のとおりです。
以上で、このArduinoプロジェクトを楽しんで、何か新しいことを学んだことを願っています。以下のコメントセクションで質問をして、Arduinoプロジェクトコレクションを確認してください。
PCBデザイン
DIYカメラスライダーArduinoコード
#include <AccelStepper.h>
#include <MultiStepper.h>
#define JoyX A0 // Joystick X pin
#define JoyY A1 // Joystick Y pin
#define slider A2 // Slider potentiometer
#define inOutPot A3 // In and Out speed potentiometer
#define JoySwitch 10 // Joystick switch connected
#define InOutSet 12 // Set Button
#define limitSwitch 11
#define inLED 8
#define outLED 9
// Define the stepper motors and the pins the will use
AccelStepper stepper1(1, 7, 6); // (Type:driver, STEP, DIR)
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);
MultiStepper StepperControl; // Create instance of MultiStepper
long gotoposition[3]; // An array to store the In or Out position for each stepper motor
int JoyXPos = 0;
int JoyYPos = 0;
int sliderPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;
int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;
Code language: Arduino (arduino)void setup() {
// Set initial seed values for the steppers
stepper1.setMaxSpeed(3000);
stepper1.setSpeed(200);
stepper2.setMaxSpeed(3000);
stepper2.setSpeed(200);
stepper3.setMaxSpeed(3000);
stepper3.setSpeed(200);
pinMode(JoySwitch, INPUT_PULLUP);
pinMode(InOutSet, INPUT_PULLUP);
pinMode(limitSwitch, INPUT_PULLUP);
pinMode(inLED, OUTPUT);
pinMode(outLED, OUTPUT);
// Create instances for MultiStepper - Adding the 3 steppers to the StepperControl instance for multi control
StepperControl.addStepper(stepper1);
StepperControl.addStepper(stepper2);
StepperControl.addStepper(stepper3);
// Move the slider to the initial position - homing
while (digitalRead(limitSwitch) != 0) {
stepper1.setSpeed(3000);
stepper1.runSpeed();
stepper1.setCurrentPosition(0); // When limit switch pressed set position to 0 steps
}
delay(20);
// Move 200 steps back from the limit switch
while (stepper1.currentPosition() != -200) {
stepper1.setSpeed(-3000);
stepper1.run();
}
}
Code language: Arduino (arduino)// Limiting the movement - Do nothing if limit switch pressed or distance traveled in other direction greater then 80cm
while (digitalRead(limitSwitch) == 0 || stepper1.currentPosition() < -64800) {}
Code language: Arduino (arduino)// If Joystick pressed increase the Pan and Tilt speeds
if (digitalRead(JoySwitch) == 0) {
currentSpeed = currentSpeed + 50;
delay(200);
}
Code language: Arduino (arduino)switch (InandOut) {
case 0: // Set IN position
InandOut = 1;
XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
digitalWrite(inLED, HIGH); // Light up inLed
break;
Code language: Arduino (arduino)case 1: // Set OUT position
InandOut = 2;
XOutPoint = stepper1.currentPosition(); // Set the OUT Points for both steppers
YOutPoint = stepper2.currentPosition();
ZOutPoint = stepper3.currentPosition();
digitalWrite(outLED, HIGH);
break;
Code language: Arduino (arduino)case 2: // Move to IN position / go to case 3
InandOut = 3;
inOutSpeed = analogRead(inOutPot); // Auto speed potentiometer
// Place the IN position into the Array
gotoposition[0] = XInPoint;
gotoposition[1] = YInPoint;
gotoposition[2] = ZInPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
StepperControl.runSpeedToPosition(); // Blocks until all steppers are in position
delay(200);
break;
Code language: Arduino (arduino)case 3: // Move to OUT position / go back to case 2
InandOut = 2;
inOutSpeed = analogRead(inOutPot);
// Place the OUT position into the Array
gotoposition[0] = XOutPoint;
gotoposition[1] = YOutPoint;
gotoposition[2] = ZOutPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
StepperControl.runSpeedToPosition(); // Blocks until all are in position
delay(200);
break;
Code language: Arduino (arduino)// Joystick X - Pan movement
JoyXPos = analogRead(JoyX);
// if Joystick is moved left, move stepper 2 or pan to left
if (JoyXPos > 600) {
stepper2.setSpeed(currentSpeed);
}
// if Joystick is moved right, move stepper 2 or pan to right
else if (JoyXPos < 400) {
stepper2.setSpeed(-currentSpeed);
}
// if Joystick stays in middle, no movement
else {
stepper2.setSpeed(0);
}
Code language: Arduino (arduino)// Slider potentiometer
sliderPos = analogRead(slider);
// If potentiometer is turned left, move slider left
if (sliderPos > 600) {
sliderPos = map(sliderPos, 600, 1024, 0, 3000);
stepper1.setSpeed(sliderPos); // Increase speed as turning
}
// If potentiometer is turned right, move slider right
else if (sliderPos < 400 ) {
sliderPos = map(sliderPos, 400, 0, 0, 3000);
stepper1.setSpeed(-sliderPos); // Increase speed as turning
}
// If potentiometer in middle, no movement
else {
stepper1.setSpeed(0);
}
Code language: Arduino (arduino)// Execute the above commands - run the stepper motors
stepper1.runSpeed();
stepper2.runSpeed();
stepper3.runSpeed();
Code language: Arduino (arduino)/*
DIY Camera Slider with Pan and Tilt Head
by Dejan Nedelkovski
www.HowToMechatronics.com
Library - AccelStepper by Mike McCauley:
http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
*/
#include <AccelStepper.h>
#include <MultiStepper.h>
#define JoyX A0 // Joystick X pin
#define JoyY A1 // Joystick Y pin
#define slider A2 // Slider potentiometer
#define inOutPot A3 // In and Out speed potentiometer
#define JoySwitch 10 // Joystick switch connected
#define InOutSet 12 // Set Button
#define limitSwitch 11
#define inLED 8
#define outLED 9
// Define the stepper motors and the pins the will use
AccelStepper stepper1(1, 7, 6); // (Type:driver, STEP, DIR)
AccelStepper stepper2(1, 5, 4);
AccelStepper stepper3(1, 3, 2);
MultiStepper StepperControl; // Create instance of MultiStepper
long gotoposition[3]; // An array to store the In or Out position for each stepper motor
int JoyXPos = 0;
int JoyYPos = 0;
int sliderPos = 0;
int currentSpeed = 100;
int inOutSpeed = 100;
int XInPoint = 0;
int YInPoint = 0;
int ZInPoint = 0;
int XOutPoint = 0;
int YOutPoint = 0;
int ZOutPoint = 0;
int InandOut = 0;
void setup() {
// Set initial seed values for the steppers
stepper1.setMaxSpeed(3000);
stepper1.setSpeed(200);
stepper2.setMaxSpeed(3000);
stepper2.setSpeed(200);
stepper3.setMaxSpeed(3000);
stepper3.setSpeed(200);
pinMode(JoySwitch, INPUT_PULLUP);
pinMode(InOutSet, INPUT_PULLUP);
pinMode(limitSwitch, INPUT_PULLUP);
pinMode(inLED, OUTPUT);
pinMode(outLED, OUTPUT);
// Create instances for MultiStepper - Adding the 3 steppers to the StepperControl instance for multi control
StepperControl.addStepper(stepper1);
StepperControl.addStepper(stepper2);
StepperControl.addStepper(stepper3);
// Move the slider to the initial position - homing
while (digitalRead(limitSwitch) != 0) {
stepper1.setSpeed(3000);
stepper1.runSpeed();
stepper1.setCurrentPosition(0); // When limit switch pressed set position to 0 steps
}
delay(20);
// Move 200 steps back from the limit switch
while (stepper1.currentPosition() != -200) {
stepper1.setSpeed(-3000);
stepper1.run();
}
}
void loop() {
// Limiting the movement - Do nothing if limit switch pressed or distance traveled in other direction greater then 80cm
while (digitalRead(limitSwitch) == 0 || stepper1.currentPosition() < -64800) {}
// If Joystick pressed increase the Pan and Tilt speeds
if (digitalRead(JoySwitch) == 0) {
currentSpeed = currentSpeed + 50;
delay(200);
}
// If Set button is pressed - toggle between the switch cases
if (digitalRead(InOutSet) == 0) {
delay(500);
// If we hold set button pressed longer then half a second, reset the in and out positions
if (digitalRead(InOutSet) == 0) {
InandOut = 4;
}
switch (InandOut) {
case 0: // Set IN position
InandOut = 1;
XInPoint = stepper1.currentPosition(); // Set the IN position for steppers 1
YInPoint = stepper2.currentPosition(); // Set the IN position for steppers 2
ZInPoint = stepper3.currentPosition(); // Set the IN position for steppers 3
digitalWrite(inLED, HIGH); // Light up inLed
break;
case 1: // Set OUT position
InandOut = 2;
XOutPoint = stepper1.currentPosition(); // Set the OUT Points for both steppers
YOutPoint = stepper2.currentPosition();
ZOutPoint = stepper3.currentPosition();
digitalWrite(outLED, HIGH);
break;
case 2: // Move to IN position / go to case 3
InandOut = 3;
inOutSpeed = analogRead(inOutPot); // Auto speed potentiometer
// Place the IN position into the Array
gotoposition[0] = XInPoint;
gotoposition[1] = YInPoint;
gotoposition[2] = ZInPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
StepperControl.runSpeedToPosition(); // Blocks until all steppers are in position
delay(200);
break;
case 3: // Move to OUT position / go back to case 2
InandOut = 2;
inOutSpeed = analogRead(inOutPot);
// Place the OUT position into the Array
gotoposition[0] = XOutPoint;
gotoposition[1] = YOutPoint;
gotoposition[2] = ZOutPoint;
stepper1.setMaxSpeed(inOutSpeed);
stepper2.setMaxSpeed(inOutSpeed);
stepper3.setMaxSpeed(inOutSpeed);
StepperControl.moveTo(gotoposition); // Calculates the required speed for all motors
StepperControl.runSpeedToPosition(); // Blocks until all are in position
delay(200);
break;
case 4: // If Set button is held longer then half a second go back to case 0
InandOut = 0;
digitalWrite(inLED, LOW);
digitalWrite(outLED, LOW);
delay(1000);
break;
}
}
// Joystick X - Pan movement
JoyXPos = analogRead(JoyX);
// if Joystick is moved left, move stepper 2 or pan to left
if (JoyXPos > 600) {
stepper2.setSpeed(currentSpeed);
}
// if Joystick is moved right, move stepper 2 or pan to right
else if (JoyXPos < 400) {
stepper2.setSpeed(-currentSpeed);
}
// if Joystick stays in middle, no movement
else {
stepper2.setSpeed(0);
}
//Joystick Y - Tilt movement
JoyYPos = analogRead(JoyY);
if (JoyYPos > 600) {
stepper3.setSpeed(currentSpeed);
}
else if (JoyYPos < 400) {
stepper3.setSpeed(-currentSpeed);
}
else {
stepper3.setSpeed(0);
}
// Slider potentiometer
sliderPos = analogRead(slider);
// If potentiometer is turned left, move slider left
if (sliderPos > 600) {
sliderPos = map(sliderPos, 600, 1024, 0, 3000);
stepper1.setSpeed(sliderPos); // Increase speed as turning
}
// If potentiometer is turned right, move slider right
else if (sliderPos < 400 ) {
sliderPos = map(sliderPos, 400, 0, 0, 3000);
stepper1.setSpeed(-sliderPos); // Increase speed as turning
}
// If potentiometer in middle, no movement
else {
stepper1.setSpeed(0);
}
// Execute the above commands - run the stepper motors
stepper1.runSpeed();
stepper2.runSpeed();
stepper3.runSpeed();
}
Code language: Arduino (arduino)
製造プロセス
- ArduinoBluetooth制御の電動カメラスライダー
- Arduinoを使用してモニターをAmbilightにする
- PythonでArduinoとRFIDを使用した出席システム
- Arduinoとスマートフォンを使用したDIY電圧計
- ArduinoとNokia5110ディスプレイを備えたDIY電圧計
- ArduinoおよびOLEDベースのセルオートマトン
- 新しい高速アルゴリズムを備えたArduinoベースのRPMカウンター
- ArduinoとRDA8057Mを使用したFMラジオ
- ArduinoとGoogleスプレッドシートに基づく出席システム
- Arduinoで音楽を作る方法
- Arduinoに基づくスマートエネルギーモニター