Tony在这里,我是整个arduino世界的新人。
首先是我的项目,我的设备,为什么我决定使用arduino,我正在尝试做什么,以及我正在使用的代码。
我的项目相对简单;能够平移和倾斜2个重量为0.06盎司的相机。摄像机正用于记录天气。下面的编程工作,但我遇到的问题是当我释放操纵杆时伺服器返回到零(或者我们称之为90°位置)。我使用的操纵杆与Playstation 2游戏手柄中使用的操纵杆相同。它们允许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 ("----------------");
}
感谢您抽出宝贵时间来帮助我。我很感激。
答案 0 :(得分:0)
对于初学者来说,我并不熟悉Arduino,但是..如果你想在操纵杆处于中立位置时不要移动相机,那么你需要在循环中添加一些逻辑。您可以在IF语句中包装LOOP中的所有内容 - 如果(操纵杆不是中性),则{运行您的代码}。这是一个快速的脏解决方案,可能不是首选的方法,但它应该工作。祝你好运!
答案 1 :(得分:0)
对我来说,最简单的解决方案就是修改伺服系统以进行连续旋转(移除内部伺服电位器)。如果我理解你的话,这将使伺服按照你想要的方式行动吗?
你想稍微移动操纵杆,摄像机会慢慢开始向那个方向跟踪,然后当你向那个方向移动操纵杆时,摄像机的速度会更快,然后当你让操纵杆返回时中间,你想让相机停在哪里,是吗?
如果是这样,我们正在讨论连续伺服旋转行为。这可以使用插在伺服和伺服信号之间的小型设备进行模拟。我真的很想找到制作我自己版本的代码..
抱歉,我不能再提供任何帮助了
干杯
安迪