1 怎样用Arduino和操纵杆控制伺服电机-德赢Vwin官网 网

怎样用Arduino和操纵杆控制伺服电机

电子说

1.3w人已加入

描述

电路图

这个项目的硬件部分非常容易制作。首先,将操纵杆模块与Arduino连接。操纵杆模块和Arduino的连接如下:

将操纵杆模块上的VCC与Arduino上的5V引脚连接

将操纵杆模块上的GND引脚与Arduino上的GND连接

将操纵杆模块上的VER引脚与Arduino上的A0连接

将操纵杆模块上的HOR引脚与Arduino上的A1连接

然后,将伺服电机与Arduino连接。使用Arduino的伺服电机的连接如下:

将两个伺服电机上的黑线连接到Arduino上的GND

将两个伺服电机上的红线连接到Arduino上的5V引脚

将第一个电机上的黄色线连接到Arduino上的引脚8

将第二个电机上的黄色线连接到Arduino上的引脚9

它是如何工作的?

当操纵杆模块在水平或垂直方向上移动,它给出0到1023之间的值。因此我们可以在代码中应用一个条件,如果该值小于300或大于700,则伺服器将移动。

当操纵杆沿水平方向移动时,第一个伺服器将向右或向左移动,并在移动乐趣时移动在垂直方向上打勾,第二个伺服将向右或向左移动。

Arduino代码

#include

Servo servo1;

Servo servo2;

int x_key = A1;

int y_key = A0;

int x_pos;

int y_pos;

int servo1_pin = 8;

int servo2_pin = 9;

int initial_position = 90;

int initial_position1 = 90;

void setup ( ) {

Serial.begin (9600) ;

servo1.attach (servo1_pin ) ;

servo2.attach (servo2_pin ) ;

servo1.write (initial_position);

servo2.write (initial_position1);

pinMode (x_key, INPUT) ;

pinMode (y_key, INPUT) ;

}

void loop ( ) {

x_pos = analogRead (x_key) ;

y_pos = analogRead (y_key) ;

if (x_pos 《 300){

if (initial_position 《 10) { } else{ initial_position = initial_position - 20; servo1.write ( initial_position ) ; delay (100) ; } } if (x_pos 》 700){

if (initial_position 》 180)

{

}

else{

initial_position = initial_position + 20;

servo1.write ( initial_position ) ;

delay (100) ;

}

}

if (y_pos 《 300){

if (initial_position1 《 10) { } else{ initial_position1 = initial_position1 - 20; servo2.write ( initial_position1 ) ; delay (100) ; } } if (y_pos 》 700){

if (initial_position1 》 180)

{

}

else{

initial_position1 = initial_position1 + 20;

servo2.write ( initial_position1 ) ;

delay (100) ;

}

}

}

代码说明

首先,我们加入了伺服电机库,这将有助于我们简化代码。然后,我们初始化了两个变量,一个用于两个伺服电机中的每一个,这将有助于我们使用库函数。

#include

Servo servo1;

Servo servo2;

然后,我们将引脚初始化我们连接了操纵杆模块上的垂直和水平引脚以及伺服系统上的信号引脚。

int x_key = A1;

int y_key = A0;

int x_pos;

int y_pos;

int servo1_pin = 8;

int servo2_pin = 9;

int initial_position = 90;

int initial_position1 = 90;

然后我们告诉Arduino我们连接了伺服引脚并移动了伺服电机在初始位置,即90度。之后,我们将操纵杆模块上的垂直和水平引脚都声明为输入引脚。

servo1.attach (servo1_pin ) ;

servo2.attach (servo2_pin ) ;

servo1.write (initial_position);

servo2.write (initial_position1);

pinMode (x_key, INPUT) ;

pinMode (y_key, INPUT) ;

在循环函数中,我们从操纵杆模块中读取水平和垂直位置的值并将这些保存在变量中。然后我们应用了一个条件,如果水平位置的值小于300,那么第一个伺服将向右移动。

x_pos = analogRead (x_key) ;

y_pos = analogRead (y_key) ;

if (x_pos 《 300){

if (initial_position 《 10)

{

}

else{

initial_position = initial_position - 20;

servo1.write ( initial_position ) ;

delay (100) ;

}

}

如果水平位置的值大于700 ,然后伺服将向左移动。类似地,对于操纵杆模块的垂直位置,如果该值小于300,则第二伺服将向左移动,如果该值大于700,则第二伺服将向右移动。

if (x_pos 》 700){

if (initial_position 》 180)

{

}

else{

initial_position = initial_position + 20;

servo1.write ( initial_position ) ;

delay (100) ;

}

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分