基于STC89C52单片机的智能车控制系统设计

张开发
2026/6/10 15:59:11 15 分钟阅读
基于STC89C52单片机的智能车控制系统设计
目 录1系统概述 11.1设计目的和意义 11.2设计思路 21.3系统需求分析 21.3.1市场需求 21.3.2实现功能 21.4开发环境 31.5运行环境 32总体设计 42.1系统结构 42.1.1硬件电路设计 42.1.2软件程序设计 52.2模块功能设计 72.2.1驱动电源灯的电路设计 72.2.2蓝牙控制模块的电路设计 82.2.3人体传感器的电路设计 92.2.4数据传输模块的电路设计 102.2.5串口通信的电路设计 113运行设计 133.1 蓝牙无线通信程序设计 133.1.1蓝牙网络的建立 143.1.2网络设备组成与路由器程序 143.2核心传感器设计 163.3运行代码 184系统测试 224.1功能测试 224.1.1 蓝牙无线通信模块测试 224.1.2人体传感器的测试 224.1.3障碍电阻的测试 224.2稳定性测试 224.3安全性测试 23参考文献 241.2 设计思路基于STC89C52单片机控制的智能车控制系统设计是一种以汽车电子为背景涵盖智能控制、模式识别、传感技术、电子电气、计算机、机械等多学科的科技创意性设计通过安装在小车内的各个传感器节点、红外感应、蓝牙控制模块等能够实时的控制小车的智能控制、自动往返与避障等功能。设计主要功能小车在各个传感器节点、红外感应等配合下在通过蓝牙控制模块实行对小车的实时控制可以对其指定行驶方向和快慢达到人们的意愿行驶同时保证安全有效。1.3 系统需求分析1.3.1市场需求过去的智能车控制系统给予过现代家庭许多美好的想象但它的市场始终不如人意其中的原因是多方面的功能华而不实且价格高昂是它没有广泛市场的一个重要原因其中交互性好的控制终端更是大大增加了成本随着4G甚至5G网络在我国的迅速推广使得随时随地的数据传输变成了一件方便快捷的事情同时带动了智能终端的迅速普及使得智能车控制系统的市场大大增加。智能策划控制系统由多重传感器、光敏电阻、模式识别、WiFi、控制设备、STC89C52单片机芯片、计算机控制系统软件、基于蓝牙控制模块的智能手机等组成。通过手动、自动等方式对智能车控制系统的自主、实施有效进行控制调节智能车控制系统中的速度开关自动往返通过蓝牙控制模块技术实现对智能小车的控制。1.3.2实现功能1实时控制对智能车进行任意时间和任意地点的控制当人们无法操控小车而需要小车行进时则可设置实时控制模式起到实时控制的功能。2感应控制对狭窄空间、路面不平及交通拥堵等区域感应实时情况实现借助传感器识别路面环境由单片机控制行进实现初步的无人控制。3蓝牙控制将具有智能控制功能的传感器组合在一起根据不同时间、不同场景及应用者喜好轻松实现各种控制运行并对智能车的速度和方向进行控制既方便操作又能随时达到想去的地方满足智能车蓝牙控制需求。4保护控制当遇到特殊路段或者特殊材料以及障碍物等等小车控制系统能借助传感器识别路面环境综合运用单片机技术、检测技术等使小车避开或者停下等待。1.4 开发环境本系统采用STC89C52单片机进行软硬件总体设计。采用Keil C软件进行计算机对小车的主要编程。Keil C提供了包括编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案通过一个集成开发环境将这些部份组合在一起。 Keil C工具包分别是C51 for Windows和for IOS的集成开发环境可以完成编辑、编译、连接、调试、仿真等整个开发流程。进入Keil C软件共分为三部分上方的菜单栏和工具栏中间的代码编辑器以及下方的调试信息栏和状态栏。本文转载自http://www.biyezuopin.vip/onews.asp?id14689菜单栏包含了Keil C的全部功能选项。File菜单用于文件操作如新建Sketch或打开实例Edit菜单包含文本编辑和查找等功能Sketch菜单包括编译和导入函数库选项Tools菜单用于对目标板类型、编程器和串口进行选择和操作。1.5 运行环境硬件环境硬件STC89C52单片机各类传感器蓝牙控制模块WiFi模块手机处理器Intel Pentium4 1.7GHZ2)软件环境内存 128M硬盘空间40G操作系统Windows 10Android网络协议WiFiTCP/IP软件Keil CSTC-ISP3.3 运行代码 人体传感器核心代码如下 int psensorA5;//指定P模拟端口A5 int LED4;//指定LED端口4 int val0;//存储获取到的P数值 void setup() { // put your setup code here, to run once: pinMode(psensor,INPUT);//设置p模拟端口为输入模式 pinMode(LED,OUTPUT);//设置端口4为输出模式 Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: valanalogRead(psensor);//读取A5的电压值并赋值到val Serial.println(val);//串口发送val值 if(val150)//判断P数值是否大于150 { digitalWrite(LED,HIGH); } else { digitalWrite(LED,LOW); } } 障碍传感器核心代码如下 int potpin0;//定义模拟接口0 连接障碍电阻 int ledpin3;//定义数字接口3 输出PWM调节驱动灯亮度 int vall0;//定义变量val void setup() { pinMode(ledpin,OUTPUT);//定义数字接口3为输出 Serial.begin(9600);//设置波特率为9600 } void loop() { vallanalogRead(potpin);//读取传感器的模拟值并赋值给val Serial.println(vall);//显示val 变量数值 analogWrite(ledpin,vall);// 打开驱动灯并设置电流PWM 输出最大值255 delay(10);//延时0.01 秒 } 蓝牙模块通信核心代码如下 String comdata ; // 字符串缓冲区 #include SoftwareSerial.h SoftwareSerial Serial1(7, 8); unsigned long lastDebounceTime 0; int led 2; void setup() { // put your setup code here, to run once: Serial.begin(115200); Serial1.begin(9600); pinMode(led, OUTPUT);} void loop() { // put your main code here, to run repeatedly: Serial1.println(F(AT)); if (Serial1.find(OK)) //healthy response { Serial.println(AT is OK); // return true; } else { Serial.println(AT is failed); //return false; } // Serial1.println(F(ATUART9600,8,1,0,0)); // if (Serial1.find(OK)) //healthy response // { // Serial.println(ATUART9600,8,1,0,0 is OK); // // return true; // } // else // { // Serial.println(ATUART9600,8,1,0,0 is failed); // //return false; // } //Serial1.begin(9600); delay(100); Serial1.print(ATCWSAP\dofly_wifi\,\\,1,0,4,0\r\n); delay(1000); if (Serial1.find(OK)) //healthy response { Serial.println(name config is OK); //return true; } else { Serial.println(name config is failed); // return false; } Serial1.println(F(ATCIPMUX1)); if (Serial1.find(OK)) //healthy response { Serial.println(ATCIPMUX1 is OK); //return true; } else { Serial.println(ATCIPMUX1 is failed); // return false; } Serial1.println(F(ATCIPSERVER1,8086)); delay(2); if (Serial1.find(OK)) //healthy response { Serial.println(ATCIPSERVER1,8086 is OK); //return true; } else { Serial.println(ATCIPSERVER1,8086 is failed); // return false; } while (1) { if (Serial1.available()) { while (Serial1.available() 0) { comdata char(Serial1.read()); delay(2); } Serial.println(comdata); if (comdata.startsWith(power_on, 11)) { Serial.println(ON); digitalWrite(led, HIGH); } else if (comdata.startsWith(power_off, 11)) { Serial.println(OFF); digitalWrite(led, LOW); } comdata ; } } }

更多文章