树莓派中sg90舵机模块应用

参考:http://www.elecfans.com/d/687167.html (介绍c语言代码的操作)
参考:http://www.wodefanwen.com/lhd_5xtsq7jr1e0088t3wpu3_1.html
(介绍单片机的操作)
树莓派中sg90舵机模块应用_第1张图片
调用下面代码可以实现90度旋转:
#include
#include
#include “ljt.h”
#define PWMPIN 1
float dis;
void sg90(){
wiringPiSetup();
//pinMode(PWMPIN,OUTPUT);
if(dis>0&&dis<20){
softPwmCreate(PWMPIN,15,200);
softPwmWrite(PWMPIN,25);
delay(1000);
softPwmWrite(PWMPIN,10);
delay(1000);
}else{
return;
}
}

上面代码实现功能:用超声波模块发送过来的距离,判断是否启动舵机。

第一:首先,我已经知道了舵机的pwm周期为20ms,然后是这样的
0.5ms--------------0度;1.0ms------------45度;1.5ms------------90度;
2.0ms-----------135度;2.5ms-----------180度;
也就是说给它1.5ms的高电平,19.5ms的低电平转向0度位置。这里需要注意,是0度位置,不是舵机转0度,当然如果舵机怎么正好处于0度位置,当然也不转。这里可能就有人要问了,那啥位置算是0度位置呢?根据我对舵机的理解(180度的舵机),就是你向一个方向用手转动舵机,到一个你无法转动的地方,这个位置不是0度位置,就是180度位置。然后你用下面的代码运行一下就知道了。

树莓派中sg90舵机模块应用_第2张图片
我这里就这样来模仿pwm的。这个代码一运行,舵机就自动到了0度位置。
同理,想转到45度位置,90度位置,135度位置,180度位置的代码如下:
树莓派中sg90舵机模块应用_第3张图片
树莓派中sg90舵机模块应用_第4张图片
如果想实现精准的的度数旋转可以参考:
#include
#include
#define PWMPIN 1
void init();
int main()

{

init();

int angle=0;

scanf(“%d”,&angle);

int i=0;

float x=0;

int k=180;//180次循环的时间够了

while(k–)

{

x=11.11*i;

digitalWrite(PWMPIN,HIGH);

delayMicroseconds(500+x);

digitalWrite(PWMPIN,LOW);

delayMicroseconds(19500-x);

if(i==angle)

break;

i++;

}

return0;

}

void init()

{

wiringPiSetup();
  pinMode(PWMPIN,OUTPUT);
}

你可能感兴趣的:(树莓派中sg90舵机模块应用)