我是托尼,对整个阿杜伊诺世界来说,我是一个全新的人。
首先是我的项目,我的设备,为什么我决定使用arduino,我试图做什么,以及我正在使用的代码。
我的项目相对简单;能够平移和倾斜2个重量为.06盎司的相机。这些照相机正被用来记录天气。下面的程序工作正常,但我遇到的问题是,当我松开操纵杆时,伺服系统返回到零(或者我们称之为90°位置)。我使用的操纵杆和PlayStation2游戏板中使用的是同一类型。它们允许Z轴,对我来说,我想用它来保持相机指向我上次定位的方向,直到我想要将它平移或倾斜到不同的轴。我希望我已经解释清楚了。
最后,我不想使用无线,我希望将它硬连线,因为我相信它会对我所在地区的其他无线电频率造成较少的干扰。
我的设备或部件如下:
Arduino UNO board
Bread board
Circuit board
2 Joysticks (Playstation 2 style with X, Y and Z axis)
4 TowerPro servo motors SG5010我决定使用arduino,因为它是计算机/电子商店的人员推荐给我的。我没有编码arduino或任何其他类型的编程的先验知识。然而,我能够对1个操纵杆和2个伺服进行编码,并将其扩展为包括一个额外的操纵杆和2个额外的伺服。所以如上所述,我有4个伺服和2个操纵杆的编码,我只是不能也不明白我需要做什么才能使Z轴能够做我上面提到的事情。
我向那些更有经验的人道歉,我把这个带到这里,但我真的需要帮助。
编码:
#include <Servo.h>
const int servo1 = 3; // first servo
const int servo2 = 11; // second servo
const int servo3 = 6; // third servo
const int servo4 = 10; // fourth servo
const int joyH = 3; // L/R Parallax Thumbstick
const int joyV = 4; // U/D Parallax Thumbstick
const int joyI = 1; // L/R Parallax Thumbstick
const int joyW = 2; // U/D Parallax Thumbstick
int servoVal; // variable to read the value from the analog pin
Servo myservo1; // create servo object to control a servo
Servo myservo2; // create servo object to control a servo
Servo myservo3; // create servo object to control a servo
Servo myservo4; // create servo object to control a servo
void setup() {
// Servo
myservo1.attach(servo1); // attaches the servo
myservo2.attach(servo2); // attaches the servo
myservo3.attach(servo3); // attaches the servo
myservo4.attach(servo4); // attaches the servo
// Inizialize Serial
Serial.begin(9600);
}
void loop(){
// Display Joystick values using the serial monitor
outputJoystick();
// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyH);
servoVal = map(servoVal, 0, 1023, 0, 179); // scale it to use it with the servo (result between 0 and 179 to keep from being jittery)
myservo2.write(servoVal); // sets the servo position according to the scaled value
// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyV);
servoVal = map(servoVal, 0, 1023, 0, 179); // scale it to use it with the servo (result between 0 and 179 to keep from being jittery)
myservo4.write(servoVal); // sets the servo position according to the scaled value
// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyI);
servoVal = map(servoVal, 0, 1023, 0, 179); // scale it to use it with the servo (result between 0 and 179 to keep from being jittery)
myservo1.write(servoVal); // sets the servo position according to the scaled value
// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyW);
servoVal = map(servoVal, 0, 1023, 0, 179); // scale it to use it with the servo (result between 0 and 179 to keep from being jittery)
myservo3.write(servoVal); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
/**
* Display joystick values
*/
void outputJoystick(){
Serial.print(analogRead(joyH));
Serial.print ("---");
Serial.print(analogRead(joyV));
Serial.println ("----------------");
Serial.print(analogRead(joyI));
Serial.print ("---");
Serial.print(analogRead(joyW));
Serial.println ("----------------");
}谢谢你抽出时间来帮助我。我真的很感激。
发布于 2013-04-30 22:32:08
首先,我对Arduino不是很熟悉,但是..如果你想让相机在操纵杆处于空档位置时不移动,那么你需要在你的循环中添加一些逻辑。您可以将循环中的所有内容包装在一个IF语句中-if(操纵杆不是中性的) then {运行您的代码}。这是一个快速而棘手的解决方案,可能不是首选的方法,但它应该可以工作。祝好运!
发布于 2014-01-15 02:18:20
这听起来像是最简单的解决方案是修改伺服系统为连续旋转(删除内部伺服罐)。如果我没理解错的话,这会让伺服系统按你想要的方式运行?
你想稍微移动一下操纵杆,摄像头就会慢慢地开始跟踪,然后当你在那个方向上移动操纵杆更多的时候,相机会跟踪得更快,然后当你让操纵杆回到中间时,你想让相机停在他们所在的地方吗?
如果是这样,我们讨论的是连续伺服旋转行为..这可以用一个插入在伺服和伺服信号之间的小装置来模拟。我真的很想找到代码来制作我自己的版本..
抱歉,我不能再帮你了
干杯
安迪
https://stackoverflow.com/questions/16302134
复制相似问题