基于STM32单片机的温湿度采集循迹避障APP小车
1 系统功能介绍
本设计为 基于STM32单片机的温湿度采集循迹避障APP小车,通过传感器采集、蓝牙无线通信、OLED数据显示和电机驱动等多种功能模块的结合,实现了小车的智能化控制与环境数据实时监测。与传统循迹小车不同,本系统不仅具备循迹与避障的基本功能,还融合了 温湿度实时采集、手机APP交互、阈值报警、自动/手动模式切换 等功能,扩展了小车在智能家居和物联网应用中的实际价值。
主要功能如下:
- 环境数据采集与显示:小车通过 DHT11 传感器采集环境温湿度数据,STM32 将数据处理后实时显示在 OLED 屏幕上。
- 数据传输与报警:采集到的温湿度数据通过 HC-05 蓝牙模块发送到手机 APP,在手机端实时显示;当超过阈值时,自动通过蓝牙向手机报警。
- 智能循迹与避障:小车能够在循迹模式下自动沿预设路径运行,同时在遇到障碍物时自动停车,保障运行安全。
- 双模式运行:支持自动运行(循迹+避障)和手动模式(通过 APP 控制前后左右移动)。
- PID 控制算法:通过 PID 算法对小车电机进行闭环控制,保证小车循迹的稳定性和精度。
- 手机 APP 控制与设置:APP 可手动发送指令控制小车移动,并通过指令
temp add
、temp down
、dh add
、dh down
设置温湿度阈值。
综上所述,该系统不仅仅是一辆普通的循迹小车,更是一个具备 环境感知、远程控制和智能决策能力 的综合性智能平台。
2 系统电路设计
2.1 STM32 最小系统电路
-
核心芯片:STM32F103C8T6
-
功能:作为主控核心,负责温湿度采集、数据处理、蓝牙通信、电机控制、OLED 显示等任务。
-
电路组成:
- 时钟电路:外接 8MHz 晶振与内部 PLL 倍频,保证系统运行速度;
- 复位电路:上电复位、手动复位电路,保证运行可靠;
- 电源电路:提供稳定的 3.3V 电源。
2.2 DHT11 温湿度采集电路
- 传感器:DHT11
- 接口:单总线通信,与 STM32 的 GPIO 相连。
- 功能:周期性采集环境温度与湿度,传输给单片机进行显示与蓝牙发送。
2.3 OLED 显示电路
- 显示屏:0.96 寸 OLED(I2C 接口)。
- 功能:实时显示当前温湿度、模式状态、电机运行状态等信息。
- 通信方式:I2C 两线通信,SDA、SCL 接至 STM32。
2.4 蓝牙通信电路
- 模块:HC-05 蓝牙模块。
- 功能:实现与手机 APP 的双向通信,支持数据上传(温湿度、报警信息)与指令下发(小车控制、阈值设置)。
- 接口:通过 USART1 与 STM32 通信。
2.5 电机驱动电路
- 驱动芯片:L298N
- 功能:驱动小车两侧直流电机,实现前进、后退、左右转向。
- 控制方式:PWM 控制电机速度,逻辑引脚控制电机转向。
2.6 循迹与避障传感器电路
- 循迹传感器:红外反射式传感器,检测黑线位置用于循迹。
- 避障传感器:超声波模块 HC-SR04,用于检测前方障碍物。
- 功能:结合 PID 算法调整小车行驶路径,避免碰撞。
2.7 电源电路
- 电池:7.4V 锂电池。
- 稳压:DC-DC 降压模块,输出 5V 给 L298N,3.3V 给 STM32、OLED、DHT11、蓝牙模块。
3 程序设计
3.1 温湿度采集程序
#include "dht11.h"int temperature = 0;
int humidity = 0;void DHT11_Read(void)
{DHT11_ReadData(&temperature, &humidity);OLED_ShowString(0,0,"Temp:");OLED_ShowNum(40,0,temperature,2,16);OLED_ShowString(0,2,"Humi:");OLED_ShowNum(40,2,humidity,2,16);
}
该程序负责读取 DHT11 数据,并在 OLED 上实时显示。
3.2 蓝牙通信程序
char rxBuffer[20];
int temp_threshold = 30;
int humi_threshold = 60;void Bluetooth_Send(char *data)
{HAL_UART_Transmit(&huart1,(uint8_t*)data,strlen(data),1000);
}void Bluetooth_Receive(void)
{HAL_UART_Receive(&huart1,(uint8_t*)rxBuffer,20,1000);if(strstr(rxBuffer,"temp add")) temp_threshold++;if(strstr(rxBuffer,"temp down")) temp_threshold--;if(strstr(rxBuffer,"dh add")) humi_threshold++;if(strstr(rxBuffer,"dh down")) humi_threshold--;if(strstr(rxBuffer,"forward")) Motor_Forward();if(strstr(rxBuffer,"backward")) Motor_Backward();if(strstr(rxBuffer,"left")) Motor_Left();if(strstr(rxBuffer,"right")) Motor_Right();if(strstr(rxBuffer,"stop")) Motor_Stop();
}
程序支持双向通信,APP 可发送控制指令与阈值设置,小车将数据与报警上传至手机。
3.3 电机驱动与 PID 控制程序
int error, last_error, pwm_left, pwm_right;
float Kp=1.0, Ki=0.1, Kd=0.5;void PID_Control(int target, int current)
{error = target - current;int derivative = error - last_error;int output = Kp*error + Ki*error + Kd*derivative;pwm_left = 500 + output;pwm_right = 500 - output;__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,pwm_left);__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,pwm_right);last_error = error;
}
利用 PID 算法保证循迹时小车运行平稳。
3.4 循迹与避障程序
void Track_Obstacle(void)
{int left = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);int right = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1);int distance = HCSR04_Read();if(distance < 20){Motor_Stop(); // 避障}else if(left==0 && right==1){Motor_Left();}else if(left==1 && right==0){Motor_Right();}else{Motor_Forward();}
}
结合红外循迹传感器与超声波模块,实现循迹与避障功能。
3.5 温湿度阈值报警程序
void Threshold_Alarm(void)
{if(temperature > temp_threshold)Bluetooth_Send("Temp Alarm!\r\n");if(humidity > humi_threshold)Bluetooth_Send("Humi Alarm!\r\n");
}
当温湿度超过阈值,系统通过蓝牙向手机报警。
3.6 主程序
int main(void)
{HAL_Init();SystemClock_Config();OLED_Init();DHT11_Init();Bluetooth_Send("System Start\r\n");while(1){DHT11_Read();Bluetooth_Receive();Track_Obstacle();Threshold_Alarm();}
}
主循环中持续执行数据采集、蓝牙通信、循迹避障和阈值报警任务。
4 总结
本文设计了一种 基于STM32单片机的温湿度采集循迹避障APP小车,其特点与优势总结如下:
- 多功能集成:不仅具备循迹与避障功能,还融合了温湿度实时采集与 APP 通信功能。
- 智能化控制:通过 PID 算法控制电机,保证循迹过程中的稳定性与灵敏性。
- 人机交互友好:通过蓝牙模块与手机 APP 建立通信,用户可以实时查看数据并发送指令控制。
- 安全性与扩展性:温湿度报警功能保障了环境监测应用的可用性,同时系统接口丰富,易于扩展更多功能模块。
该系统可作为嵌入式课程设计、智能小车竞赛及物联网应用的综合性实践平台,具有较强的实用价值与推广意义。