摘要
本文设计了一种基于STM32单片机的探测小车控制系统。该系统集成了多种传感器,包括DS18B20温度传感器、BMP180气压传感器、火焰传感器、震动传感器、超声波测距传感器、MQ-135有害气体传感器以及红外光电传感器。系统能够实时测量环境参数,通过4G模块将关键数据远程发送到手机端,并允许手机端远程遥控小车。本文详细阐述了系统的总体设计、硬件选型、软件实现以及测试与验证。
关键词:STM32单片机;探测小车;传感器;4G模块;远程控制
一、引言
随着物联网技术的快速发展,智能探测小车在环境监测、灾害预警等领域的应用日益广泛。本文设计的探测小车控制系统能够实时感知环境参数,并通过4G模块将数据远程发送到手机端,实现了环境信息的远程监控和实时反馈。同时,手机端还具备遥控小车的能力,增强了系统的灵活性和实用性。
二、系统总体设计
本系统以STM32单片机为核心控制器,通过连接各种传感器和执行机构,实现对环境参数的测量、分析和控制。系统主要由传感器模块、控制模块、通信模块和执行机构组成。传感器模块负责采集环境参数,包括温度、气压、火焰、震动、距离、有害气体和红外信号等。控制模块负责接收传感器数据,根据预设的算法进行处理,并控制执行机构的动作。通信模块通过4G网络将数据发送到手机端,并接收手机端的控制指令。执行机构包括小车的电机、舵机等,用于实现小车的移动和转向。
三、硬件设计
-
STM32单片机:选用STM32F103系列单片机作为核心控制器,该单片机具有丰富的外设接口和强大的计算能力,能够满足系统的需求。
-
传感器模块:
- DS18B20温度传感器:用于测量环境温度。
- BMP180气压传感器:用于检测大气压。
- 火焰传感器:用于检测火灾。
- 震动传感器:用于检测塌方等地震动事件。
- 超声波测距传感器:用于测量小车前方距离。
- MQ-135有害气体传感器:用于检测有害气体浓度。
- 红外光电传感器:用于自动避障。
-
执行机构:包括直流电机、舵机等,用于实现小车的移动和转向。
-
4G模块:选用支持4G网络的通信模块,用于将数据发送到手机端,并接收手机端的控制指令。
四、软件设计
-
主程序设计:系统初始化后,进入主程序循环。在主程序中,首先读取各传感器数据,然后根据数据进行处理和分析。如果检测到火灾或塌方等异常情况,则通过4G模块发送提示信息到手机端。同时,根据手机端的控制指令,控制小车的移动和转向。
-
传感器数据读取:编写各传感器的数据读取程序,确保能够准确获取传感器数据。
-
数据处理与分析:根据获取的传感器数据,编写相应的数据处理和分析程序。例如,根据温度、气压等参数判断环境状况;根据超声波测距数据判断前方障碍物距离;根据火焰、震动传感器数据判断是否发生异常情况等。
-
4G通信程序:编写4G模块的通信程序,实现与手机端的数据传输和指令接收。
-
电机控制程序:根据手机端的控制指令或自动避障等需求,编写电机控制程序,实现小车的移动和转向。
五、测试与验证
在完成硬件和软件设计后,对系统进行测试与验证。首先进行硬件测试,确保各传感器和执行机构工作正常;然后进行软件测试,验证传感器数据读取、数据处理与分析、4G通信和电机控制等程序是否正确。最后进行整体测试,模拟各种环境条件和异常情况,测试系统的稳定性和可靠性。
六、结论与展望
本文设计了一种基于STM32单片机的探测小车控制系统。该系统通过集成多种传感器和执行机构,实现了对环境参数的实时测量、分析和控制。同时,通过4G模块将数据远程发送到手机端,并允许手机端远程遥控小车,提高了系统的灵活性和实用性。测试结果表明,该系统具有较高的稳定性和可靠性,能够满足环境监测和灾害预警等领域的需求。未来可以进一步优化算法和硬件设计,提高系统的性能和可靠性;同时拓展更多应用场景和功能模块,使系统更加智能化和多样化。
*******监测函数
*****/
void Monitor_function(void)
{
if(time_num % 10 == 0)
{
BMP_UncompemstatedToTrue(); //获取大气压
temp_value = DS18B20_Get_Temp(); //读取温度
distance_value = Hcsr04_GetDistance(temp_value/10); //获取距离值
if(MQ135 == 0)
gas_value = 90*((Get_Adc_Average(0,3)/4096.0)*3.3); //获取气体值
else
gas_value = 0;
}
AIR724_GetData(); //获取阿里云下发的数据,从而控制小车
}
/****
*******处理函数
*****/
void Manage_function(void)
{
if(flag_direction == 1) //前进状态下,检测到障碍物,左转自动避开障碍物
{
if(GD == 0)
{
flag_direction = 3;
Delay_ms(50);
flag_direction = 1;
}
}
if(flag_2s == 1) //2s上报一次数据
{
AIR724_SendData();
flag_2s = 0;
}
}