很简单,我根据从其他地方读取的一些数据来控制伺服系统(9g 微型伺服系统)。一切正常,只是伺服系统会不断“摇晃”。也就是说,它们会以非常细微的运动(间歇性运动 1/2 -> 1cm 左右)向后振动。
我尝试通过执行以下操作在软件中纠正此问题:
do{
delay(DTIME);
positionServo();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("X position: ");
lcd.print(xRead);
lcd.setCursor(0,1);
lcd.print("Y position: ");
lcd.print(yRead);
}while( readChange() ); //while there has been change
在需要执行的情况下,初始化存储映射伺服值的变量(使用 arduino 伺服库。)
readChange() 函数定义为:
int readChange(){
int x_Temp, y_Temp;
x_Temp = map(analogRead(x_axisReadPin), 0, 1023, 0, 179);
y_Temp = map(analogRead(y_axisReadPin), 0, 1023, 0, 179);
if( abs(x_Temp - xRead) < DEG && abs(y_Temp - yRead) < DEG ) return 0; // no change
else return 1; //change
}
其中 xRead 是初始化的值(第一个映射的伺服输出。)
这确实不是一个好方法。它要求两个值都不能改变 DEG 系数(在我的情况下约为 10 度,或 ~0.28V。)如果我编写函数使得 OR 小于 DEG,那么如果我只改变一个呢一次伺服?所以有一个界限。
这仅仅是伺服系统的属性(也许是便宜的?)还是有解决方法?
包含一个粘贴链接会简单得多。这是完整的代码。
我已经将两个伺服系统与一个激光指示器连接在一起,以允许两个自由度(X,Y)。根据几个按钮的状态,可以选择以各种方式控制伺服系统。第一个是“运动”,我有两个光敏电阻,根据曝光量,影响伺服系统的位置。我还没有实现通过 Xbox 控制器控制伺服系统的代码。第三种选择只是随机运动。