盛辉SG90舵机 51单片机PWM控制程序 手机屏幕触控

前阵子刷手游,一直要点击屏幕,刚好手上有个sg90舵机,就简单做一个触控手机屏幕的小制作。

效果如图:


因为之前没用过舵机,上网搜索了一下,发现文章比较少,参考了这博客,写了个最简单的来回摆角程序。

http://blog.csdn.net/zxnsirius/article/details/51002580


一、先看舵机和接线

盛辉SG90舵机 51单片机PWM控制程序 手机屏幕触控_第1张图片 盛辉SG90舵机 51单片机PWM控制程序 手机屏幕触控_第2张图片


二、关于PWM的知识这里不多说

占空比 = t / T 相关参数如下:

t = 0.5ms——————-舵机会转动 0 ° 
t = 1.0ms——————-舵机会转动 45°
t = 1.5ms——————-舵机会转动 90°
t = 2.0ms——————-舵机会转动 135°
t = 2.5ms——————-舵机会转动180

单片机程序要做的就是,使用定时器0定时周期T = 20ms;I/O管脚输出高电平,时间t在0.5ms-2.5ms之间的一个方波。

#include 

sbit SEV_PWM = P1^4;  //设定PWM输出的I/O端口
unsigned char count = 0;
unsigned char SEV_conut =8;
sbit K6=P1^5;//设置两个按键,代表抬起和按下。根据实际硬件资源编写。
sbit K7=P1^6;

sbit LED=P0^7;


	/*延时程序*/
void Delay(unsigned int s)
{
	unsigned int i;
	for(i=0; i= 200) //T = 20ms清零
	{ 
		count = 0; 
	}
	TR0 = 1; //开启T0
}
void main()
{
	Com_Init();
	while(1)
	{
		if(K6==0)
		{
			SEV_conut =5;//5代表0.5ms
			count=0;
		}
		if(K7==0)
		{
			SEV_conut =8;
			count=0;
		}
		SEV_conut =5;//舵机恢复到0°的位置
		count=0;//让定时器重新计数
		Delay(100000);//约延时2s
		SEV_conut =8;//8这个值是作者调试的角度,得到现象是触控笔向下按压屏幕
		count=0;
		Delay(100000);//延时函数写得不好,读者可改写。
	}
}

 实际测试发现,有时定时器计数不够准确,要精确调节特定角度,需要结合自身的单片机和舵机,调试上述程序中SEV_count的参数,确定舵机实际转了多少度。

 gif中演示只是触控效果,要达到精确跳一跳,要加入算法,可以是图像识别,或是图案距离检测。

日后有时间再搞搞,有问题可交流。吐槽CSDN的编写博客页面好麻烦,写作体验极差(┬_┬)





你可能感兴趣的:(盛辉SG90舵机 51单片机PWM控制程序 手机屏幕触控)