当前位置:网站首页>最简单DIY基于蓝牙、51单片机和舵机的钢铁爱国者机关枪控制器
最简单DIY基于蓝牙、51单片机和舵机的钢铁爱国者机关枪控制器
2022-06-23 10:35:00 【daodanjishui】
51单片机物联网智能小车系列文章目录
第一篇:最简单DIY的51蓝牙遥控小车设计方案
第二篇:最简单DIY串口蓝牙硬件实现方案
第三篇:最简单DIY蓝牙PS2遥控器控制蓝牙智能小车
第四篇:最简单DIY基于51单片机的舵机控制器
第五篇:最简单DIY基于蓝牙、51单片机和舵机的钢铁爱国者机关枪控制器
文章目录
前言
daodanjishui物联网核心原创技术之最简单DIY基于蓝牙、51单片机和舵机的钢铁爱国者机关枪控制器。
市面上有各种开源智能舵机控制器,但是有复杂的有简单的,如果想快速入门基于51单片机的舵机二自由度云台控制器搭配到智能小车上面,这个方案会给你一个快捷高效的方案。
一、最简单DIY基于蓝牙、51单片机和舵机的钢铁爱国者机关枪控制器是什么?
在第四篇完成了51单片机单个舵机控制的设计,读者好奇当时为什么不写控制多个舵机的PWM波的代码呢?那是因为学习是一个循序渐进的过程,掌握基本的技能才能去举一反三。到现在来看是为我第五篇博文是第四篇博文的升级版,可以同时控制两个舵机,并且互相不受影响,共同使用一个定时器,代码相当精妙,纯粹是自己的原创代码,如果不好好专研深入思考,是不可能写出这样的代码的。
虽然市面上也有不少开源的舵机二位度云台控器方案,但是全部由一个寄存器配置完成控制双路PWM波输出的代码却很少,现在用文字的形式记录下来,这个代码是在郭天祥出的51单片机的书籍上代码的改造,是我原创的!这次源码进行了大幅度的升级,用52单片机定时器0输出两路PWM波来控制两个自由度的舵机,用定时器1组成波特率发生器控制串口蓝牙,加上镭射激光模块,代码写得非常精简和奇妙,最终研制成功了钢铁爱国者机关枪控制器,这个控制器可以搭配到智能小车上,构成多功能智能小车,读者也可以根据代码的思路编写多路PWM波,达到举一反三的效果,现在用文字的形式记录下来,对自己童年时代深刻地回忆和对未来技术的展望。“闭门造枪”虽然有点痛苦,但是当你看到自己亲手做的机关枪模型在地上通过自制的遥控器遥控动起来的时候,你会发现一切的付出都是值得的!全家福如下图所示:
作品测试优酷视频地址:https://v.youku.com/v_show/id_XNDk2MDgxNzk3Ng==.html?spm=a2hbt.13141534.app.55!25!2555!255!25!25!255!28A
直接观看
51钢铁侠爱国者机关枪控制器
功能描述:手机蓝牙调试助手发送指令通过蓝牙无线传输到串口蓝牙模块(跟第一篇的智能小车控制方式一模一样),模块将控制信息通过串口返回给单片机,单片机解析控制指令,最后控制二自由度舵机转动,最终控制激光点打到目标,可玩性相当高,其实除了可以用蓝牙调试助手控制之外,也可以用有线的串口调试助手来控制,只不过无线变成有线了而已,串口蓝牙的功能无非就是让有线串口变成无线串口而已。
二、制作步骤
1.准备硬件
1.1购买2个sg90舵机(180度舵机)如下图所示:
1.2购买激光模块;
1.3购买舵机驱动电源模块:
1.4购买舵机云台,比较难找,给一个链接和参考来购买。
1.4购买单片机最小核心板和HC-05串口蓝牙模块。

2.修改代码
这个51单片机的代码是第四篇代码的修改,思路完全是根据自己的单片机寄存器的理解原创的,相比arduino的控制程序,这个代码值钱多了!后期我会推出STM32版本的舵机控制程序。源码工程截图:
重写串口中断服务器程序代码:
void receive() interrupt 4 //串口中断服务程序
{
if(RI==1){
RI=0; //重新清0等待接收
a=SBUF;//接收电脑传输过来的数据
//SBUF=a;//单片机把接收到的数据返回给电脑
//这里可以放置舵机中断服务程序需要处理的逻辑
//下面加入智能小车指令解析
AA[i++]=a;
if((AA[i-1]=='\n')&&(AA[i-2]=='\r')){
//判断是否遇到了"\r\n"
AA[i-2]='\0'; //用"\0"替代了"\r"的字符变量
if((strstr(AA,"FFF")!=0)){
//使用了字符串查找函数,这是第二种方法
send(AA);
front();//前进
}else if((strstr(AA,"BBB")!=0)){
//使用了字符串查找函数,这是第二种方法
send(AA);
back();//后退
}else if((strstr(AA,"LLL")!=0)){
//使用了字符串查找函数,这是第二种方法
send(AA);
left();//左转?
}else if((strstr(AA,"RRR")!=0)){
//使用了字符串查找函数,这是第二种方法
send(AA);
right();//右转
}else {
send(AA);
stop();//停止
}
i=0;
for(j=0;j<20;j++){
AA[j]='\0';
}
//逻辑结束
flag=1;//接收标志位置1
TI=0; //清除发送中断标志位
}
}
}
完善舵机转动控制函数和激光控制函数:
void stop(void){
//停止
laser=~laser;//开启激光或者是关闭激光
}
void front(void){
//摄像头仰视
jd2--;
if(jd2<5)
jd2=5;
}
void back(void){
//摄像头俯视
jd2++;
if(jd2>25)
jd2=25;
}
void left(void){
//摄像头左转
jd1++;
if(jd1>25)
jd1=25;
}
void right(void){
//摄像头右转
jd1--;
if(jd1<5)
jd1=5;
}
最关键的是定时器中断函数,关键的地方就是修改定时器寄存器TL0和count变量。详情请到博文最后去下载,尊重原创技术从你我做起。
3.舵机原理分析
根据工作原理,舵机的具体控制方法就是需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms2.5ms范围内的角度控制脉冲部分。脉冲宽度从0.5ms2.5ms,相对应舵盘的位置为0~180度,呈线性变化。一般舵机脉冲宽度20ms,高电平宽度与角度对应关系
0.5ms————0度;
1.0ms————45度;
1.5ms————90度;
2.0ms————135度;
2.5ms————180度;
根据上面的原理,我们知道单片机只要产生20ms的脉冲信号,通过改变高电平时间从0.5ms到2.5ms变化,就能使舵机转动到对应的角度。最后程序的功能就是按下增加按键,舵机从0度到180 ,按10次;舵机从180到0也需要按10次减少按钮。
三、仿真与调试
1. 准备好硬件,上电。
硬件连线都比较简单。
2. 操控舵机
还是需要用到手机蓝牙调试助手
(1)发送十六进制指令,因为控制器接收指令 要加\r\n作为结束符号,所以指令后面要加上十六进制0d 0a
比如FFF\r\n是仰头,指令转化为十六进制是 4646460d0a
(2)下面是低头:BBB\r\n
(3)下面是左转: LLL\r\n
(4)最后是右转: RRR\r\n
(5)控制激光的指令是:SSS\r\n
舵机从0度到180 ,发送10次指令;舵机从180到0也需要发送10次减少指令。每次可以转18度。
注意:串口蓝牙的波特率是9600,所以用串口调试助手测试的时候也要把波特率设为9600,指令再也不需要转化为16进制,勾选默认打算回车和换行符号即可。把蓝牙模块拆除接上USB转ttl线,TX端接P3.0,RX端接P3.1

发送FFF 看到舵机抬头
发送SSS 看到激光点发生变化
总结
如果用stm32来控制舵机,一般人都觉得没有问题,因为有现成的库函数可以调用,但是用51单片机定时器0通过两个IO口同时输出两路不相互干扰的PWM波来控制舵机就不是那么容易了,同时又要使用定时器1作为波特率发生器实现串口蓝牙通信。原来的开源舵机程序0到180度一共有五档,现在有10档,也就是最小翻转角度达到18度,那是因为修改了定时器中断。本次设计绝对是单片机串口编程和PWM编程最好的学习资料。
下一篇设计开源安卓手机app来控制舵机,该开源app留到下一篇博文,敬请期待!这里可以给出一个app的截图作为宣传。
代码工程下载链接:https://www.cirmall.com/circuit/21238/
点我直接跳转
边栏推荐
- 2021-05-07 constructor
- NOI OJ 1.4 01:判断数正负 C语言
- Description of directory files of TLBB series of Tianlong Babu - netbill server [ultra detailed]
- 智慧园区效果不满意?请收下ThingJS这份秘籍
- Noi OJ 1.4 04: odd even ASCII value judgment C language
- 解决audio自动播放无效问题
- Unity technical manual - shape sub module - Sprite, spriterenderer and velocity over lifetime
- What is a good quick development framework like?
- Numerical calculation method
- Google Earth Engine(GEE)——GEDI L2A Vector Canopy Top Height (Ver
猜你喜欢

图片存储--引用

Explain in detail the method of judging the size end

Why does the pointer not change the corresponding value as a formal parameter

Analysis of LinkedList source code

Experience of using thread pool in project

What is a good quick development framework like?

Solve the problem that Preview PDF cannot be downloaded

Personal blog system graduation project opening report

JVM简单入门-01

Golang 快速上手 (1)
随机推荐
个人博客系统毕业设计开题报告
Spring recruitment interview experience summary (technical post)
JVM easy start-01
NOI OJ 1.4 03:奇偶数判断 C语言
Noi OJ 1.4 05: integer size comparison C language
How to solve the problem that easycvr does not display the interface when RTMP streaming is used?
Noi OJ 1.3 09: circle related computing C language
R and rstudio download and install detailed steps
【软件与系统安全】堆溢出
Solve the problem of invalid audio autoplay
Solve the problem that Preview PDF cannot be downloaded
2021-04-16数组
2021-05-12 interface definition and Implementation
六张图详解LinkedList 源码解析
OpenCloudOS使用snap安装.NET 6
2021-05-11 abstract class
NOI OJ 1.4 04:奇偶ASCII值判断 C语言
UWA上新|真人真机测试新增海外机型专区
2021-05-12 internal class
2021-04-16 array