基于STM32单片机的温湿度采集循迹避障APP小车
基于STM32单片机的温湿度采集循迹避障APP小车设计
1、功能介绍
本系统是一款基于 STM32单片机 的智能小车,集成了 温湿度采集、蓝牙通信、OLED显示、循迹、避障、手机APP远程控制以及阈值报警 等功能。通过 L298N电机驱动模块 控制小车前进、后退、左转、右转;利用 DHT11传感器 实时采集温湿度数据;通过 OLED液晶 显示相关信息;借助 蓝牙模块 将数据上传至手机APP,并接收来自手机端的指令;在软件层面引入 PID控制算法,提升小车运行的稳定性与灵敏度。
系统的主要功能总结如下:
- 温湿度检测与显示:STM32通过DHT11采集温湿度数据,并在OLED屏幕上实时显示。
- 蓝牙通信:温湿度数据通过蓝牙模块上传至手机APP,实现远程实时监控。
- PID小车控制:支持自动和手动两种运行模式,PID算法提升循迹和避障性能。
- 循迹与避障:小车可根据红外循迹传感器沿黑线行驶,遇到障碍物自动停车,提升智能性。
- 阈值报警:手机APP可设置温湿度阈值,当实际数据超限时,蓝牙发送报警信息至手机端。
- APP远程控制:通过蓝牙APP发送指令控制小车的运行方向(前进、后退、左转、右转),并可动态调整阈值。
该系统既是一个 智能小车实验平台,又是一个 环境数据采集与报警系统,可应用于智能家居、安防、教育实验等领域。
2、电路设计
本系统的电路设计主要包括 STM32最小系统、L298N电机驱动电路、DHT11温湿度传感器电路、OLED显示电路、蓝牙通信电路、循迹与避障电路、电源电路。
2.1 STM32最小系统电路
STM32F103C8T6作为主控,负责数据采集、运算处理和外设控制。最小系统包括:
- 电源电路:通过AMS1117-5.0与AMS1117-3.3稳压芯片提供5V与3.3V电源。
- 时钟电路:采用8MHz晶振与内部PLL倍频,保证系统时钟精度。
- 复位电路:上电复位与按键复位电路保证程序正常启动。
2.2 L298N电机驱动电路
小车的前进、后退与转向通过 直流电机 实现,采用L298N模块作为驱动:
- 输入端口 接STM32的GPIO控制方向信号。
- PWM端口 接STM32的定时器输出,用于调节电机转速。
- 输出端口 连接电机,实现动力输出。
该模块可驱动双路直流电机,电压范围广,适合小车应用。
2.3 DHT11温湿度传感器电路
DHT11通过单总线协议与STM32通信,定时采集温湿度数据。其特性包括:
- 温度测量范围:0~50℃,精度±2℃
- 湿度测量范围:20~90%RH,精度±5%RH
- 数据线接入STM32的一个GPIO口,通过程序解析温湿度信息。
2.4 OLED显示电路
采用 0.96寸I2C接口OLED屏幕,通过SCL与SDA与STM32通信。主要用于:
- 实时显示温湿度数据
- 显示当前阈值
- 显示小车运行模式(自动/手动)
OLED显示具有低功耗、高对比度的优点,适合小车应用。
2.5 蓝牙通信电路
采用 HC-05蓝牙模块,通过USART接口与STM32通信:
- STM32发送温湿度数据至手机APP
- 接收手机指令并解析,实现远程控制与参数设置
波特率一般设置为9600,保证数据稳定传输。
2.6 循迹与避障电路
小车循迹与避障功能依赖于 红外对管与超声波传感器:
- 红外循迹传感器:检测黑白线路,实现循迹控制。
- 超声波模块HC-SR04:检测障碍物距离,当小于设定阈值时自动停车。
2.7 电源电路
系统电源由 可充电锂电池组 提供,经过稳压模块输出5V与3.3V电压,分别供给电机驱动模块与控制电路。
3、程序设计
程序采用 模块化结构,包含主程序、温湿度采集模块、OLED显示模块、蓝牙通信模块、PID控制模块、循迹与避障模块、电机驱动模块等。
3.1 主程序流程
主程序负责初始化各模块并进入循环运行:
- 温湿度采集与显示
- 蓝牙通信与指令解析
- 循迹与避障判断
- PID计算并输出PWM信号
- 阈值报警判断
#include "stm32f10x.h"
#include "dht11.h"
#include "oled.h"
#include "bluetooth.h"
#include "motor.h"
#include "pid.h"float temperature, humidity;
float temp_threshold = 30;
float hum_threshold = 70;int main(void) {SystemInit();OLED_Init();DHT11_Init();Bluetooth_Init(9600);Motor_Init();PID_Init();while(1) {// 温湿度采集DHT11_Read(&temperature, &humidity);// 显示OLED_ShowData(temperature, humidity, temp_threshold, hum_threshold);// 蓝牙上传Bluetooth_SendData(temperature, humidity);// 指令解析Bluetooth_CommandProcess(&temp_threshold, &hum_threshold);// 阈值报警if(temperature > temp_threshold || humidity > hum_threshold) {Bluetooth_SendAlarm("Warning: Threshold Exceeded!");}// 循迹与避障Car_AutoRun();}
}
3.2 温湿度采集模块
void DHT11_Read(float *temp, float *hum) {uint8_t data[5] = {0};if(DHT11_GetData(data)) {*hum = data[0] + data[1] * 0.1;*temp = data[2] + data[3] * 0.1;}
}
3.3 OLED显示模块
void OLED_ShowData(float temp, float hum, float t_set, float h_set) {OLED_Clear();OLED_ShowString(0,0,"Temp:");OLED_ShowNum(40,0,temp,2,16);OLED_ShowString(70,0,"C");OLED_ShowString(0,2,"Humi:");OLED_ShowNum(40,2,hum,2,16);OLED_ShowString(70,2,"%");OLED_ShowString(0,4,"T_Set:");OLED_ShowNum(60,4,t_set,2,16);OLED_ShowString(0,6,"H_Set:");OLED_ShowNum(60,6,h_set,2,16);
}
3.4 蓝牙通信模块
void Bluetooth_CommandProcess(float *t_set, float *h_set) {char cmd[20];if(Bluetooth_Receive(cmd)) {if(strcmp(cmd,"temp add")==0) *t_set += 1;else if(strcmp(cmd,"temp down")==0) *t_set -= 1;else if(strcmp(cmd,"dh add")==0) *h_set += 5;else if(strcmp(cmd,"dh down")==0) *h_set -= 5;else if(strcmp(cmd,"forward")==0) Car_Forward();else if(strcmp(cmd,"back")==0) Car_Back();else if(strcmp(cmd,"left")==0) Car_Left();else if(strcmp(cmd,"right")==0) Car_Right();else if(strcmp(cmd,"stop")==0) Car_Stop();}
}
3.5 PID控制模块
float PID_Control(float target, float current) {static float last_error = 0, integral = 0;float Kp=1.0, Ki=0.1, Kd=0.05;float error = target - current;integral += error;float derivative = error - last_error;last_error = error;return Kp*error + Ki*integral + Kd*derivative;
}
PID算法用于调整左右电机速度差,提高循迹精度与运行稳定性。
3.6 循迹与避障模块
void Car_AutoRun(void) {if(Obstacle_Detected()) {Car_Stop();} else {int track_status = Track_Read();if(track_status == LEFT) Car_Left();else if(track_status == RIGHT) Car_Right();else Car_Forward();}
}
3.7 电机驱动模块
void Car_Forward(void) {Motor_SetSpeed(200,200);
}
void Car_Back(void) {Motor_SetSpeed(-200,-200);
}
void Car_Left(void) {Motor_SetSpeed(-150,150);
}
void Car_Right(void) {Motor_SetSpeed(150,-150);
}
void Car_Stop(void) {Motor_SetSpeed(0,0);
}
4、总结
本系统以 STM32F103单片机 为核心,整合了 温湿度采集、OLED显示、蓝牙通信、PID小车控制、循迹与避障、阈值报警 等功能,实现了一个多功能智能小车平台。系统的特点包括:
- 功能全面:不仅能实现小车运动控制,还能完成温湿度采集与报警,兼顾环境监测与运动控制。
- 模块化设计:硬件电路与软件程序均采用模块化思路,便于调试和扩展。
- 人机交互友好:手机APP作为交互终端,用户可灵活控制小车并实时获取数据。
- 控制精度高:PID算法保证了小车循迹与避障过程的稳定性与准确性。
- 应用前景广阔:可应用于智能家居、环境监测、智能小车竞赛、教育实验等场景。
通过该设计,不仅展示了 STM32单片机在智能小车控制领域的应用价值,同时也体现了 物联网与嵌入式系统融合的优势,是一款具有教学、科研与实际应用价值的综合性项目。