寻迹pid算法 c语言,基于STC12C5A60S2单片机及PID控制算法的气味循迹车设计
气味源的循迹是目前的研究热点之一,在以后的日常生活以及生产方面有着较为广泛的运用。本文介绍了一种基于 STC12C5A60S2单片机设计的简便智能气味循迹小车。采用两个气味传感器,根据浓度差判断气味流向,并通过PID算法控制舵机打出偏角,使小车循着气味行走。整个硬件模块的设计结构简单灵活,通过实验仿真,在室内时变气流场的环境下,该小车能达到气味循迹要求。
气味循迹可以从事寻找有毒有害气体泄漏源、寻找爆炸源等相关工作,受到科研人员高度关注,发展十分迅速。同时,随着人们日常生活智能化程度的增强,具有智能控制系统的小车、机器人层出不穷,而这些智能体将在未来工业生产和日常生活中扮演更重要的角色。智能车,是一种能感知环境和自动有目的地行驶的综合系统。我们也可以这样认为,智能车也是智能机器人的一种形式,它的双腿我们用轮子代替,因而更加简单实现和控制。
耗时长、跟随性能差是当下智能气味循迹车在循迹过程中普遍存在着的情况。本文介绍的智能气味循迹车的控制核心是STC12单片机,能自动感知附近特定的气味,并应用
PID算法调节舵机,控制方向遵循气味来向前行,实验结果显示能有效缩短循迹时间,改善智能车的跟随性能。
1 硬件系统及其工作原理
1.1 硬件系统设计
智能车的系统(图1)的组成模块有:电源模块(变压稳压)、控制处理模块、传感器模块(探寻气味)、转向控制模块、电机驱动模块和状态显示模块等。控制处理模块为STC12 C5A单片机,由ULN2003APC驱动电机,采用后轮驱动,舵机由单片机直接控制,而舵机控制前轮转向。部分电路图(图2)和电路板实物图(图3)如下。
1.2 工作原理简介
本设计中,智能小车先由气味传感器感知两个方向的气味浓度,传送给单片机的AD口,由单片机进行判断,判断两个方向的浓度高低,然后通过PID算法,控制舵机打出偏角,跟随轨迹前行。
2 芯片配置及其功能
2.1 单片机STC12C5A60S2介绍
STC12C5A60S2引脚图如图4所示。
此单片机具有如下配置:RAM拥有1 280字节,具备40个通用I/O口,复位后为准双向口/弱上拉。具有EEPROM、看门狗功能。5.0 V单片机为:11~17 MHz,3.3 V单片机为:8~12 MHz。Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCPO/P1.3,CCPO/P1.3。
双串口,RxD2/P1.2,TxD2/P1.3。
气味传感器是气味循迹小车的关键模块,气体感应的准确性关系着小车最终能否寻找到气味源。本实验采用一个MS5100传感器。MS5100通电后,圆圈内的金属化合物能感知特定气味,其电阻随气味浓度升高而降低,则增大,输送给单片机的AD口,因为单片机能判断此气味传感器所处位置的气味浓度。(电路图如图5)
2.2 舵机模块
本设计中舵机(图2中舵机部分)采用PWM信号(脉宽调制信号)作为控制信号,控制周期为20 ms,拥有0.5~2.5 ms的脉冲宽度,以及0~180度的舵盘偏移角度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。
2.3 电机驱动模块
由于单片机提供的电流无法直接驱动小车上的直流电机,故本设计采用外接驱动芯片达林顿管,即ULN2003作为电机驱动(图2中电机驱动部分),控制电机转动。此芯片能承受较高的工作电压和电流,采用编程产生有序的PWM波,对电机进行控制,能达到速度可调的效果。
2.4 指示灯显示模块
本设计中采用发光二极管,将将传感器的采集结果直接输出,可直观了解到各个传感器的工作情况。通过对观察传感器工作情况与的行驶小车状态,可判断小车是否正常工作。
2.5 电源模块
本设计中单片机、电机驱动等元器件的正常工作均需要稳定的电压,因此采用LM7805和LM7806并配上稳压滤波电路分别将干电池的电源直接变压成5 V和6 V的直流电源,来提供单片机、舵机、电机等元件工作所需电源。
3 实验
智能车追踪气味源的关键在于快速地分析气味的流向,并迅速准确地控制舵机打出偏角。然而在连续转弯时,由于曲率变化过大,加上小车具有一定的速度,舵机响应又需要一定的时间,所以在实际中经常出现小车来不及掉头而随意冲撞的情况。本设计中采用PID算法来控制舵机转向,在智能车对气味的跟随性能上有明显改善,能实现快速准确地控制(图8)。PID算法公式:
其中:Kp为比例控制参数;
KI为积分控制参数;
KD为微分控制参数。
C语言是实验的主要编程语言,上述PID算法代码可用下面语句实现:
PID_out=(servo_P*error_history[2]//比例
+servo_I*error_sum/10//积分
+servo_D*(error_history[2]-error_history[1])//微分
)/10;//这里的能将小数计算转换成整数计算,以减轻单片机的负担
4 结束语
本设计系统的主控模块采用的STC12C5A60S2单片机,可以将气味传感器输入的模拟量通过AD转换转换成数字量从而使运算更加简便,加上合适的 PID运算,能对舵机进行较为准确的控制,从而能够达到智能车跟随气味行走的目的。本方案系统设计合理有序。不足的地方就在于传感器的灵敏度,本设计需要传感器能较为准确地判断比较两个传感器所处位置的浓度差,而一般的传感器不能很好的达到这一要求。本实验最终的结果实现了智能小车对气味的感知,并能寻找高浓度的方向。通过对智能气味循迹车添加PID算法控制的实验证明:添加算法后,小车循迹更加迅速准确,有较强的适应能力。
寻迹pid算法 c语言,基于STC12C5A60S2单片机及PID控制算法的气味循迹车设计相关推荐
- 热电偶单片机代码c语言,基于STC12C5A60S2单片机的恒温箱设计-LCD1602-热电偶(电路图+程序源码)...
https://v.youku.com/v_show/id_XNDc2NzY1MDY2NA==.html?spm=a2hzp.8253869.0.0 2017-468.STC12C5A60S2恒温箱设 ...
- 基于51单片机的多功能智能语音循迹避障小车
目录 一.功能介绍及硬件准备 二.电机控制及调速 三.小车循迹方案 四.跟随功能实现 五.测速功能实现 六.OLED显示车速 七.摇头避障功能实现 八.SU-03T语音模块介绍 九.语音切换小车模式+ ...
- pid控制器c51语言编程,51单片机电机pid控制系统程序
51单片机电机pid控制系统程序 本程序来源网上,小编进行了简单修改,还未验证. /************************* 应用背景:直流电机的额定功率12V,额定转速3000rpm,光码 ...
- 51单片机dds信号发生器 扫频 c语言,基于AT89C51单片机和DDS器件实现频率特征测试仪的设计...
1. 引 言 频率特性是一个系统(或元件)对不同频率正弦输入信号的响应特性.如图1所示,被测系统输入幅值为Ar.角频率为ω的正弦信号,如果该系统是线性的,则其稳态输出也是正弦信号,频率ω不变,幅值为A ...
- 红外寻迹小车基于K128单片机的红外对管飞思卡尔智能车(5个对管)程序部分
红外寻迹小车基于K128单片机的红外对管飞思卡尔智能车(5个对管)软件部分包括: 出库 直行模块 大,小弯道 环岛 s弯 停车 #include "headfile.h" #inc ...
- 51单片机电机测速程序c语言,基于51单片机光电编码器测速.doc
基于51单片机光电编码器测速 PAGE PAGE 2 课程设计报告 课程名称: 微机原理课程设计 题 目: 基于51单片机的光电编码器测速 摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器 ...
- 【038】基于51单片机的土壤湿度自动浇花系统Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的土壤湿度自动浇花系统proteus仿真设计一份: (2).基于51单片机的土壤湿度自动浇花系统proteus仿真设计keli源代码一份: (3).基于51单 ...
- java克鲁斯卡尔算法_Java语言基于无向有权图实现克鲁斯卡尔算法代码示例
所谓有权图,就是图中的每一条边上都会有相应的一个或一组值.通常情况下,这个值只是一个数字 如:在交通运输网中,边上的权值可能表示的是路程,也可能表示的是运输费用(显然二者都是数字).不过,边上的权值也 ...
- pid温度控制c语言程序及仿真,温度控制PID算法的C语言程序实例代码
//PID算法温控C语言 #include #include #include #include struct PID { unsigned int SetPoint; // 设定目标 Desired ...
- C语言 | 基于51单片机实现MPU6050的卡尔曼滤波算法(代码类2)
github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 之前写过一个博客(代码分享:单片机开发 | ...
最新文章
- JVM 垃圾回收机制和常见算法
- 数据存储之 SQLite 数据库操作(一)
- python设计自定义函数_我可以为内置Python类型添加自定义方法/属性吗?
- OJ1043: 最大值(C语言)
- 使用 docker 创建自己的镜像
- 云更新可以装在个人计算机上吗,云更新服务器安装
- ASP.NET URL重写浅析
- linux内核sysfs详解【转】
- Python 快速入门实战教程
- 我为什么放弃百词斩?
- 对生成对抗网络GANs原理、实现过程、应用场景的理解(附代码),另附:深度学习大神文章列表
- Verilog中$finish、$stop的使用与区别
- BAT齐聚阿里安全-ASRC生态大会:呼吁联合共建网络安全白色产业链
- 信驰达微信iBeacon摇一摇周边方案ibeacon蓝牙设备
- 完结撒花!吴恩达DeepLearning.ai《深度学习》课程笔记目录总集
- 06 java GUI 网络编程:图形界面聊天室
- 字符串转utf8编码
- 扫地机器人的配件能自制么_米家扫地机器人,第三方配件耗材靠谱吗?
- matlab 二元微分方程组,求助,matlab求解二元二阶的常微分方程组
- sa8155 qnx开发笔记之一设备共享