余超颖又一个WordPress站点

浏览: 501

【视频】+ arduino舵机下位机的设计 舵机上位机源码设计-大鸟科创空间大家好燃情克利夫兰,这里是大鸟科创空间,我是小朱,从事单片机软硬件开发了


【视频】+ arduino舵机下位机的设计 舵机上位机源码设计-大鸟科创空间
大家好燃情克利夫兰,这里是大鸟科创空间,我是小朱,从事单片机软硬件开发了一段时间,积累了一点点的经验来给大家分享。我们会陆陆续续为大家推送一些相关的设计实例供大家参考黑帮的家法 ,很大一部分免费开源哦。
如果大家感兴趣,可以关注我们的微信公众号:大鸟科创空间 我们会将最新的实例开源到公众号中,希望和大家共同进步。
言归正传,舵机对于开发单片机的各位来说都很熟悉(如果有朋友没有了解过这方面,可以先百度一下相关知识,这里就不再介绍舵机的基本原理了),现在对于初学者来说,一般都会入手一块舵机控制板,厂家会配上一个舵机上位机,就像下图一样:

舵机控制板连接好舵机和电脑,配上电源过后,拖动滑条,就可以控制舵机转动了,而且根据这个上位机可以编程动作,设计程序。
但是一般来说,这个上位机的源代码是不会开源的,舵机控制板的源代码一般商家也不会给,就只是给大家使用而已,这就对需要灵活控制舵机或者深度融合进系统的朋友来说,造成了不便。
下面我们就来一步步讲讲,如何自己编写一个舵机上位机和相应的舵机控制板程序异世真君,实现图形化界面操作舵机:(这里需要朋友们有一定的C语言基础哦)
首先,需要准备一些环境:
1、windows的电脑上需要安装visual stusio :我安装的是2013版本,当然其他版本也可以,因为这里我们要用到winform编程,开发语言是C# (这个语言和C语言没什么两样,会C就基本会这个)。

2、arduino开发环境:为了通俗易懂,我们的舵机控制板就采用arduino来开发(当然用stm32或者其他单片机也是一样的原理),先要在电脑上安装arduino的ide:

3、单片机系统:我们这里为了方便,采用兼容arduino uno的X0控制板,这个控制板是我们自己搞的(集成了大电流驱动,不用外加稳压就可控制多路舵机),当然这里不是在打广告哈爱部落轻日记,朋友们用一块arduino UNO外加一个大电流稳压当然也是可以的,(当然其他板子一样的原理),我这里只是为了方便,下图就是X0控制板:

4、剩下的就是舵机、USB线,电源等了,我这里用7.4V锂电池作为电源金莲花分散片,采用常用的996金属舵机(当然小的9g舵机也可以,还不用那么大的电流)。

下面我们开始设计:(屏幕截图有点小,各位可以放大点开看图片)
首先打开visual studio,建立一个winform工程:

winform工程就是windows forms application,选择好地址,设置好工程名称就可以电机OK了:

这样环境就会自动生成一个winform窗口(就是我们一般程序的窗口),我们将会在这个窗口里面添加需要的控件。

首先,我们在左侧工具箱(toolbox)里面,孙艺兴拖出一个组(groupBox)


然后选中这个控件,在右下角属性框中,把Text属性填上字符“舵机一”

接着,我们在工具箱中拖出一个滑条(trackbar)雍梦婷,放在刚才的groupBox上面:



如上图所示,把滑条(trackbar1)的属性的最大值,最小值和初始值分别改成:2000,1000和1500;这是因为,一般舵机的转动PWM脉宽在1000us到2000us之间(对应0度到180度),我们上位机就是将脉宽信息发送给舵机控制板来控制舵机的。
然后我们再拖一个textBox到groupBox里面来仙崛 ,用于后面显示我们的脉宽:


这样我们第一个舵机的控制部分就做好了,把groupBox1选中,CRTL+C 然后CRTL+V,复制出一个一样的控件组永康广电网,然后组的名字改成舵机二,这样我们就有了两个舵机的控制部分(这里用于演示我就只做两个了,朋友们想控制更多路的舵机依葫芦画瓢即可)

接着,我们再拖入一个组groupBox3,改显示Text为串口设置,这个组里面我们放关于串口的设置信息:

依次在这个groupBox中,
1、添加两个label(标签)--Text属性改为“端口号:”和“波特率:”
2、再添加两个textBox用于用户填入相关信息
3、然后再加入一个panel控件(大小调整合适),这个控件可以改变颜色,用于显示串口状态;
4、添加一个button控件,这是按钮,Text属性改为“打开串口”,用于控制串口的打开和关闭。

这样在界面上面就差不多了,我们接着向我们的winform添加一个串口控件和一个定时器控件:
同样在左侧toolbox工具栏中,找到serialport(串口)控件笠头螈,在左侧上方的搜索索引中输入控件名称的几个字母如:ser,控件索引就会帮助我们筛选控件:

把serialport拖到界面然后放开:我们的winform窗体下方就多出一个serialPort1控件,选中它在右下方的属性栏中可以看它的属性,这里我们不需要改动。

然后同样的方法,我们再拖一个定时器控件timer1到工程中来:并把它的Interval属性的值改为1,意思是1ms中断一次(就是我们上位机向控制板发送信号的频率)

这样我们所有的控件都放置齐全了,然后我们再完善一下界面:
1、把主窗体(Form1)的text改成我们想要的名字,这里是“舵机图形化操作软件”
2、把波特率后面的textbox的text改为115200(这是我们对控制板通信的波特率,当然你想设置为9600或者4800或者其他的波特率都行,这里主要看个人习惯啦)
3、把舵机一和舵机二两个组在下面的textBox的text属性改为1500(初始化显示舵机中尉脉宽)
4、panel的颜色属性改为红色(初始化为关闭端口状态--红色)

这个是在panel的backcolor属性里面选择:

界面部分我们就设计完了,下面我们来设计代码:
双击打开按钮按键:

弹出控件button1的点击事件函数:
我们在下面写入如下代码:

下面好好来解释一下这段代码:
buttonstatus是我们定义在函数前面的一个布尔类型的变量:

它用来表示串口状态是打开还是关闭。(false:关闭 true:打开)
整个过程用try -- catch来处理,这是为了出现异常过后不至于程序挂掉
下面的主要看程序注释:
try
{
if(buttonstatus == false)
{
serialPort1.PortName = textBox3.Text.ToString();//设置端口号
serialPort1.BaudRate = Convert.ToInt32(textBox4.Text);//设置波特率
serialPort1.Open(); //打开串口
//前面这一段设置串口的波特率和端口号,至于其他属性灵药妙仙 ,用默认的就可以
buttonstatus = true;//关闭状态点击按键过后,串口变为打开状态
panel1.BackColor = Color.Blue;//串口打开后,panel1颜色变为蓝色
timer1.Enabled = true;//打开定时器(这里定时器用来不间断地向控制板发出信号)
button1.Text = "关闭串口";//打开过后,按键上面的字就变成了“关闭串口”
}
Else//如果串口本身就是打开状态,则下面就做关闭串口的处理
{
serialPort1.Close(); //打开串口
buttonstatus = false;
panel1.BackColor = Color.Red;
timer1.Enabled = false;
button1.Text = "打开串口";
}
}
Catch// 如果打开过程中出现异常则弹出提示
{
MessageBox.Show("串口打开出错");
}

然后双击定时器

弹出定时器处理函数,我们写入如下代码:


下面注释讲解一下:
privatevoidtimer1_Tick(objectsender, EventArgse)
{
serialPort1.Write("#2"+ " 00"+ trackBar1.Value.ToString() + " ");
serialPort1.Write("#3"+ " 00"+ trackBar2.Value.ToString() + " ");
//定时器每隔1ms,串口一调用函数serialPort1.Write()向控制板发送字符串:
"#2"+ " 00"+ trackBar1.Value.ToString() + " "
"#3"+ " 00"+ trackBar2.Value.ToString() + " "
这个信息是我们自定义的:
“#”后面代表舵机号,我们这里暂且用2和3(因为arduino的0和1口是串口本溪高中吧,我们这里要用到串口,为了不产生干扰狮王教育,我们就用2号口和3号口来控制)
“ 00”这三个字符,一个空格“ ”和两个“0”,用来隔开舵机号和后面的滑条trackbar的值,而后面trackbar.Value.ToString()是将对应滑条控件trackbar的值转化为字符类型,发送给下位机,当arduino收到这一串内容过后,就可以根据我们的定义秘密的校园,解码出trackbar的值。至于“ ”是空格字符郭志辰 ,这里无特殊意义。
textBox1.Text = trackBar1.Value.ToString();
textBox2.Text = trackBar2.Value.ToString();
//这一段应该好理解,就是将trackbar控件的值value反应到对应的textbox显示
}
到此,恭喜大家我们的上位机就设计完成了!
此项目工程代码可在关注我们微信公众号 大鸟科创空间 后,发送关键字:“舵机上位机源码”获得网盘下载链接,谢谢大家。
后面我们将带着大家设计对应的arduino代码,感兴趣的朋友,请关注我们的 微信公众号:大鸟科创空间
我们会将最新的实例开源到公众号中,希望和大家共同进步。
全文详见:https://www.6596.org/11438.html

TOP