亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

带云台和倾斜头的 DIY 相机滑块 - 基于 Arduino 的项目

在本教程中,我们将学习如何制作带有平移和倾斜头的电动相机滑块。这个基于 Arduino 的项目是 100% DIY 的,采用 MDF 和胶合板等廉价材料建造,并使用 Arduino、三个步进电机、一些按钮和连接在定制设计 PCB 上的操纵杆进行控制。尽管如此,最终的结果还是令人印象深刻,超流畅的摄像机移动使我们能够获得具有专业水准的电影镜头。

您可以观看以下视频或阅读下面的书面教程。

概览

使用控制器,我们可以手动移动相机,也可以设置起点和终点,然后相机会自动从一个位置移动到另一个位置。同样使用支撑臂,我们甚至可以将滑块安装在较小的三脚架上,以我们想要的任何角度,仍然可以获得稳定的运动。

首先,我使用 3D 建模软件设计了滑块。

您可以找到并下载此 3D 模型并从下面的 3D 模型中获取所有尺寸,也可以在 Thangs 上的浏览​​器中进行探索。

从 Thangs 下载装配 3D 模型。

3D打印GT2滑轮连杆:

 Thingiverse

构建相机滑块

所以我开始制作使用 22 毫米刻度铜管的滑轨。我决定制作 1 米长的滑块,所以我将两片切成 1 米长。铜管很容易氧化,因此我们需要用金属抛光剂对其进行抛光。就我而言,我没有牙膏,所以我为此使用了牙膏。

这不是一个完美的解决方案,但我仍然可以注意到不同之处并且让管道更清洁。

然后我继续制作将连接两个管道的木制底座,它还将用于将滑块安装到三脚架上。我使用圆锯切割了两块 21 毫米的刻度胶合板并将它们粘在一起以获得一个单独的自动收报机。然后使用实木制作了我的三脚架安装板的复制品,并使用木胶和螺丝将其连接到胶合板上。现在滑块底座可以很方便地安装在三脚架上。

我将使用 8 毫米螺纹杆将滑块导轨安装到底座上,因此我在底座上打了两个孔,并插入了 138 毫米长的杆,我之前将它们切割成合适的尺寸。接下来我必须在管道上钻 8 毫米的刻度孔,这实际上有点棘手。

为此,我制作了一个简单的夹具,将铅笔提升到 11 毫米的高度,或者是管道直径的一半。然后我将管道固定在平坦的表面上,并使用夹具从两侧标记管道。这使得能够从两侧获得精确的孔。所以我先用锋利的螺丝尖标记钻孔点,然后用 2、4、6 和 8mm 钻头逐步钻孔。

之后,我将导轨穿过螺纹杆并使用一些垫圈和螺母将它们固定到滑块底座上。以类似的方式,我使用一块胶合板和一根螺纹杆固定了导轨的末端。

接下来是滑动平台。我再次使用圆锯将 8mm 刻度 MDF 板切割成根据 3D 模型的尺寸。我还为要安装轴承的螺纹杆制作了一些 8 毫米的孔。为了组装平台,我使用了木胶和一些螺丝。使用无绳电钻,首先,我制作了导向孔,然后制作了沉头并将 3mm 螺丝拧到位。

固定面板后,我继续组装轴承系统。我用的轴承是608Z,外径22mm。两个轴承之间的两个垫圈和一个螺母使它们之间有足够的距离,从而能够与 22mm 导轨良好接触。

为了使平台在倾斜使用滑块时更安全,我以类似的方式在平台的底部插入了另外两组轴承。最后,滑动平台完美运行。

在这里我们可以注意到,现在在我的小型非重型三脚架上沿着滑块移动平台时,云台无法承受平台的重量,因此我必须制作一个支撑臂以稳定滑块。所以我用两块木头和一些螺母和螺栓做了一个简单的夹子,可以固定在三脚架的一个腿上。

夹具有一个螺栓,支撑臂可以固定在该螺栓上。接下来,我必须在支撑臂上制作一个槽,以便能够将滑块定位在不同的角度。我通过简单地钻许多彼此靠近的 6mm 孔来制作槽,然后使用锉刀制作出细直线。这个支持系统最终完美运行。

我继续这个构建,在滑块上添加腿,以防你不想或不需要使用三脚架。我用 8 毫米 MDF 制成。使用手锯和锉刀,我很容易得到所需的腿形状。然后用一些小胶水和两个螺母将它们固定在滑块的末端。

下一阶段是构建平移和倾斜系统,该系统将安装在滑动平台的顶部。使用圆锯,我切割了所有需要的部分,尺寸取自 3D 模型。当滑块设置成一定角度时,我使用了几块胶合板来制作相机调平平台的铰链机构,以及一些 MDF 板上我为电机和平移系统的轴承制作了适当的孔。

我继续安装步进电机和滑动平台的同步带。在平台的一侧,我用一块 MDF 板和一些螺钉和螺栓固定了步进电机。在滑块的另一侧,我固定了一个惰轮,所以现在我可以安装正时皮带了。使用两个螺栓和束线带,我轻松地将同步带固定在滑动平台上。

至此,滑动机构就完成了。

我继续制作平移和倾斜系统的上部。根据 3D 模型,我为步进电机和轴承制作了所有合适的孔,并将所有东西粘在一起并拧在一起。

我的一个朋友为我 3D 打印了 2 个 80 齿滑轮。这样相对于安装在步进电机上的 16 齿皮带轮,我得到了 5 倍的减速。

现在我需要根据我的设置制作一个闭环同步带,所以我测量了我需要多长的皮带,剪下它,然后简单地用 CA 胶粘上它,并在上面加一条胶带。 CA 胶水与橡胶配合得很好,因此闭环带可以毫无问题地工作。

接下来,我开始了云台系统的最终组装。首先,我使用一些螺栓固定倾斜电机,然后将两个轴承添加到位,同时用一些环氧树脂将它们固定在插槽中。然后我用一些 8mm 螺栓将倾斜平台固定在水平平台上,同时将 80 齿皮带轮与同步带一起固定在上面。

在这里,我注意到皮带有点松,但我在步进电机螺栓的位置添加了一个小轴承,用作皮带张紧器。这件事成功了,所以现在皮带有足够的张力来正常工作了。

接下来,我固定了平移电机并在调平平台的顶部和底部添加了轴承。然后我将螺栓穿过它们,添加止推轴承、80 齿皮带轮和同步带,并在它们顶部添加先前组装的倾斜头。最后我用螺栓把它固定好了,到这一步就完成了滑块的搭建。

电路图

好的,接下来是有趣的部分或安装电子元件。这是这个DIY相机滑块项目的电路图。

因此,三个 NEMA 17 步进电机通过三个 A4988 步进驱动器进行控制。为了控制滑块移动,我们使用连接到 Arduino 模拟输入的电位器,为了控制云台,我们使用实际上由两个电位器组成的操纵杆模块,因此它连接到两个模拟输入。还有另一个电位器用于设置从进出位置自动移动的速度。这些进出位置是在按钮的帮助下设置的。这个按钮有一个上拉电阻,它连接到 Arduino 板的数字引脚。还有一个复位按钮、一个电源开关和一个电源插孔,以及一个用于滑块的限位开关和两个用于指示进出状态的 LED。我们可以用 9V 或 12V 为这个项目供电。

您可以从以下链接获取此项目所需的组件:

  • 步进电机(NEMA17)……。
  • A4988 步进驱动器……………….
  • 12V 2A 适配器……………………..…….
  • 操纵杆……………………………………
  • 电源插孔……………….………….……
  • Arduino 板…………………………

PCB设计

接下来,根据电路图,我设计了一个定制的 PCB,以保持电子元件的井井有条。

我使用 EasyEDA 免费在线电路设计软件做到了这一点。电路有很多连接,所以我同时使用了顶层和底层,并设法获得功能和美观的 PCB。完成此步骤后,我生成了制造 PCB 所需的 Gerber 文件。然后我从JLCPCB订购了PCB,这实际上是本教程的赞助商。

在这里,我们可以简单地上传 Gerber 文件,上传后我们可以再次在 Gerber 查看器中查看我们的 PCB。如果一切正常,那么我们可以继续,为我们的 PCB 选择我们想要的属性,然后我们可以以合理的价格订购我们的 PCB。请注意,如果这是您从 JLCPCB 订购的第一个订单,您只需 2 美元即可获得多达 10 个 PCB。

然而,一周后多氯联苯已经到货了。 PCB 的质量非常好,我必须承认自己制造的 PCB 设计非常令人满意。

组装电子产品

好的,接下来我继续组装电子元件。我从焊接排针 PCB 开始。这使得在需要时更容易连接和断开组件。实际上,除了直接焊接在 PCB 上的电容器和电阻器之外,我对所有东西都使用了排针。因此,我继续将跳线焊接到所有电子元件上。

通过这种方式,我可以轻松地将组件安装在控制器外壳上,同时将它们连接到 PCB。

至于控制器外壳,我决定用 4 毫米刻度透明亚克力制作它,因为我希望所有电子元件的美感都可见。我用圆锯切割面板以调整尺寸。然后使用钻头和 Forstner 钻头,我在前面板上为按钮、电位器、电源开关和操纵杆做了开口。之后使用 5 分钟环氧树脂组装外壳,至于顶部,我插入并粘上两个螺栓,前面板可以通过它们插入并使用顶部的螺母固定。

最后,我开始通过将 Arduino 板和 A4988 步进驱动器插入 PCB 来组装电子设备。然后我继续插入并固定前面板上的按钮和其他组件。

将它们固定好后,我将组件连接到 PCB 上适当的排针。在机箱的侧面板上,我添加了电源插孔,然后将 PCB 插入机箱。在同一面板上还有一个孔,我通过该孔放置用于连接驱动器和步进电机的跳线,以及我将其放置在滑块末端的限位开关。

我用一些热缩管整理了从控制器外壳出来的跳线,最后剩下要做的就是将控制器与三个步进电机和限位开关连接起来。

至于为滑块供电,我使用了三个串联的 3.7V 锂离子电池,产生大约 11V 的电压。就是这样,滑块已经完成并且可以完美运行。

DIY 相机滑块 Arduino 代码

现在本教程剩下的就是看一下 Arduino 代码并解释程序是如何工作的。由于代码有点长,为了更好的理解,我将把程序的源代码分节贴出来,每个节都有说明。并且在文末我会贴出完整的源码。

该程序基于 Mike McCauley 的 AccelStepper 库。这是一个令人难以置信的库,可以同时轻松控制多个步进电机。因此,一旦我们包含了这个库和作为其中一部分的 MultiStepper.h 库,我们需要定义所有要使用的 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)

在设置部分,我们设置步进器的初始速度值,定义一些引脚模式,并将三个步进器添加到名为“StepperControl”的多步进器控制实例中。使用 while 循环,我们将滑块移动到初始位置,或者它移动直到按下限位开关,然后向后移动 200 步以释放限位开关。

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)

在循环部分,我们首先检查滑块是否已到达极限位置,或者是极限开关或另一侧的80cm。

// 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 语句中,每次按下操纵杆开关,我们都会增加 Pan 和 Tilt 速度。

// If Joystick pressed increase the Pan and Tilt speeds
  if (digitalRead(JoySwitch) == 0) {
    currentSpeed = currentSpeed + 50;
    delay(200);
  }Code language: Arduino (arduino)

然后我们检查我们是否按下了设置按钮,该按钮用于设置 IN 和 OUT 位置。第一次按下按钮,我们存储步进电机的 IN 位置,同时点亮 IN LED。

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)

同理,第二次按下我们存储 OUT 位置并点亮 OUT LED。

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)

然后下一次按下按钮,我们读取自动速度电位器的值,该电位器用于设置电机的最大速度。此外,我们将 IN 位置放入“gotoposition”数组中,该数组用于 moveTo() 函数,该函数分别计算所有步进器所需的速度。然后使用 runSpeedToPosition() 函数滑块自动移动到 In 位置。

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)

以完全相同的方式,在 3 号或再次按下按钮的情况下,我们将滑块移动到 OUT 位置。

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)

如果我们按住 Set 按钮超过半秒,将执行第 4 个 case 语句,这会重置 IN 和 OUT 位置,以便我们设置新的。

接下来是操纵杆平移和倾斜控制。我们从摇杆获得的模拟值是从 0 到 1024,或者当它停在中间时,值是 500 左右。所以如果我们将摇杆向左移动并且模拟值大于 600,我们将设置速度将特定电机设置为正,相反,我们将操纵杆向右移动,我们将电机的速度设置为负,这意味着它将以相反的方式旋转。

// 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)

如果它停留在中间,则速度设置为 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);
  }Code language: Arduino (arduino)

最后,我们为三个步进电机中的每一个调用 runSpeed() 函数,并执行上述命令,或者适当地旋转电机。

// 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)

这就是全部,我希望你喜欢这个 Arduino 项目并学到新的东西。随时在下面的评论部分提出任何问题,并查看我的 Arduino 项目收藏。


制造工艺

  1. Arduino 蓝牙控制电动相机滑块
  2. 使用 Arduino 制作流光溢彩监视器
  3. 使用 Arduino 和 RFID 和 Python 的考勤系统
  4. 使用 Arduino 和智能手机的 DIY 电压表
  5. DIY 电压表与 Arduino 和诺基亚 5110 显示器
  6. 基于 Arduino 和 OLED 的元胞自动机
  7. 基于 Arduino 的 RPM 计数器,采用更快的新算法
  8. 使用 Arduino 和 RDA8057M 的 FM 收音机
  9. 基于Arduino和谷歌电子表格的考勤系统
  10. 如何用 Arduino 制作音乐
  11. 基于Arduino的智能能量监测器
  12. 使用 Arduino、Python 和 Keras 的 DIY 降雨预测