Arduino 4自由度舵机速度控制带吸盘

在这里插入图片描述

所有演示视频和代码以及手册教程都在百度网盘里

链接:https://pan.baidu.com/s/1k9UJWfhEfWjrqWdjG0r9Mw
提取码:454h

板子的淘宝卖家链接 这里只是方便大家选购 选购时候报我名字 打。。。腿打折!我不认识卖家 这是链接
https://item.taobao.com/item.htm?spm=a1z0d.6639537.1997196601.57.f7527484Er1QTY&id=575509740369

卖家提供的源代码 速度过快,太暴力了 这里只是小小修改一下 超级简单 看看就会了

修改后舵机有所减速的源码

#include <Servo.h>

Servo myservo2,myservo3,myservo4,myservo5,myservo6,myservo7; 
int pos = 0;   

void setup()
{  

  
  myservo2.attach(2);  
  myservo3.attach(3);
  myservo4.attach(4);
  myservo5.attach(5);  
  myservo6.attach(6);
  myservo7.attach(7);
  
  myservo2.write(90);      
  myservo3.write(90);      
  myservo4.write(90);      
  myservo5.write(90);      
  myservo6.write(0);      
  myservo7.write(0);     
 
   Serial.begin(9600);
  Serial.println("Please input serial data.");
  
}

void loop() 
{
  if (Serial.available()) 
  {  
    
    char servoName = Serial.read();   
 
    Serial.print("servoName = ");
    Serial.print(servoName);    
    Serial.print(" , ");      
    
    int data = Serial.parseInt();   
    
      switch(servoName)
 {  
    case 'b':      
    for (pos =90 ; pos <= 120; pos ++) 
  { 
    
    myservo2.write(pos);            
    delay(40);                       
  }   
  
   for (pos =90 ; pos >= 70; pos --) 
  { 
    myservo4.write(pos);             
    delay(40);                    
  }   
  
    for (pos = 90; pos <= 110; pos ++)   
  { 
    myservo3.write(pos);     
    delay(40);    
       
  } 
   myservo6.write(180);
   myservo7.write(0); 
   delay(2500);
   myservo6.write(0);
   myservo7.write(0); 
  
    for (pos = 110; pos >= 90; pos --) 
  {   
     myservo3.write(pos);            
    delay(40);                      
  }  
  delay(1500);
  
    for (pos =70 ; pos <= 90; pos ++) 
  { 
    myservo4.write(pos);             
    delay(40);                    
  }     
  delay(1500);
  
  for (pos = 120; pos >= 90; pos --) 
  { 
  
    myservo2.write(pos);          
    delay(40);                       
  } 
    delay(1500);

   for (pos =90 ; pos >= 30; pos --) 
  { 
    myservo4.write(pos);             
    delay(40);                    
  }   
  
 delay(1500);
 
     for (pos =30 ; pos <= 90; pos ++) 
  { 
      myservo4.write(pos); 
      myservo6.write(0);
      myservo7.write(180);
     
    delay(40);                    
  }
    delay(2500);

 }
}
}

链接失效以及其它问题 okjokull@gmail.com

我们提供的程序和上位机每个动作组里规定只能储存255个动作,超过这个限制的动作不会运行。 如果想要增加动作请按照以下步骤执行。 1、将要编写的动作分成多个动作组编写,如当一个动作组编了255个动作时,保存文件,然后在新的动作组里开始继续编写,如此类推。 2、打开程序源码,在App.C源码里找到如下代码处 这里的意思是当我们把编写好的动作下到100号动作组里,然后按控制板上的按键1就会执行这个动作,这个100参数我们可以进行修改,如果修改了记得下载的时候需要把动作下载到修改后的动作组里,这样按按键时才会执行。 3、当我们完成了上一步的修改后,我们还需要在另外一个地方进行修改,如下图 我们在此处增加了一个判断当100号(如果我们上一步修改了100这个数值,此处也要修改)动作组执行完后,继续执行101号动作组,这个101也可以进行修改,同样的我们需要把动作组下到101号里,如果进行修改了就下到修改后的动作组里。到这里大家应该明白了增加动作的方法,按照这个方法我们可以再往下添加动作,如 规律大家应该看明白了就是前面执行的动作组是下一个将要执行动作组的判断条件,客户修改的时候一定要注意。 4、到此我们就完成了对动作的增加操作,最后我们还需要对程序进行编译 我们点击上图中的红框图标,等编译完 如果编译完没有错误就表明程序可以运行了。
### 实现二自由度舵机云台控制的教程 #### 1. 系统概述 Arduino 控制自由度舵机云台是一种常见的硬件控制系统,通常用于目标跟踪、头部稳定等功能。该系统的核心在于通过串口或其他方式接收外部指令,并将其转化为具体的舵机动作[^1]。 #### 2. 所需材料 以下是构建此系统的必要组件: - **Arduino 板**(推荐使用 Arduino Uno 或 Nano) - **SG90 舵机** × 2 (分别负责水平和垂直方向运动) - **电源模块** - **二自由度云台底座** #### 3. 接线说明 接线过程较为简单,主要涉及将两路舵机信号接入 Arduino 的 PWM 引脚。具体接法如下: - 将第一个舵机的数据线接到 Arduino 的 `D9` 引脚。 - 将第二个舵机的数据线接到 Arduino 的 `D10` 引脚。 - 舵机的地线统一接到 Arduino 地线上,供电则由独立电源提供。 #### 4. 示例代码 以下是一个简单的示例代码,展示如何通过 Arduino 控制两个舵机完成基本的二维移动: ```cpp #include <Servo.h> // 定义舵机对象 Servo servoX; // 水平方向舵机 Servo servoY; // 垂直方向舵机 void setup() { // 初始化舵机 servoX.attach(9); // X 方向舵机连接到 D9 servoY.attach(10); // Y 方向舵机连接到 D10 // 设置初始角度 servoX.write(90); servoY.write(90); } void loop() { int angleX, angleY; // 获取目标角度(此处假设从串口读取) while (Serial.available()) { String command = Serial.readStringUntil('\n'); if (command.length() > 0) { sscanf(command.c_str(), "%d,%d", &angleX, &angleY); // 更新舵机角度 servoX.write(angleX); servoY.write(angleY); delay(50); // 防止抖动 } } } ``` 上述代码实现了通过串口输入指定的角度值来驱动舵机的功能。如果需要更复杂的逻辑(如 PID 控制),可以根据实际需求扩展代码结构[^2]。 #### 5. 添加 PID 控制 为了提高云台的稳定性,可以在原有基础上加入 PID 控制算法。PID 参数可以通过实验方法调优,确保系统响应快速且无明显振荡。 修改后的核心部分如下所示: ```cpp double Setpoint_X = 90; double Input_X = 90; double Output_X; double Setpoint_Y = 90; double Input_Y = 90; double Output_Y; PID pidX(&Input_X, &Output_X, &Setpoint_X, 2, 5, 1, DIRECT); PID pidY(&Input_Y, &Output_Y, &Setpoint_Y, 2, 5, 1, DIRECT); void setup() { // 初始化 PID 控制器 pidX.SetMode(AUTOMATIC); pidY.SetMode(AUTOMATIC); // 继续初始化其他内容... } void loop() { // 计算误差并更新输出 double errorX = TargetAngleX - CurrentAngleX; double errorY = TargetAngleY - CurrentAngleY; Input_X = CurrentAngleX; Input_Y = CurrentAngleY; pidX.Compute(); pidY.Compute(); // 应用输出至舵机 servoX.write(Output_X); servoY.write(Output_Y); } ``` 以上代码片段引入了经典的 PID 控制框架,能够显著提升系统的动态性能。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大马猴_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值