15-基于STM32的蓝牙音响避障、超声波测距、温湿度检测小车(OLED、距离报警、DHT11、HCSR04)proteus、源代码、仿真工程
功能描述:
使用STM32F103系列单片机对蓝牙小车进行模拟,实现了温度、湿度、距离的环境参数监测并显示在OLED显示器中。通过串口模拟出将参数传输至手机APP中的功能,也可以模拟其他串口设备。设置距离检测报警阈值,当超过设定阈值则红色LED灯亮起,反之不亮起。可以手动调节报警阈值,更加人性化。 通过按键模拟避障光电传感器检测到的电平信号。可以实现小车前进、后退、左避障、右避障、停止的功能。
1、小车前进、后退、左避障、右避障、停止
2、串口传输(可模拟蓝牙、WIFI、RS485)
3、温湿度检测
4、超声波距离检测
5、OLED环境参数显示
6、距离报警
7、自定义距离报警阈值调节
有哪些资料:
1、源代码KEIL4
2、仿真工程文件
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"
#include "OLED.h"
#include "PWM.h"
#include "Motor.h"
#include "Car.h"
#include "Usart.h"
#include "bsp_dht11.h"
#include "TIM2.h"
#include "UltrasonicWave.h"
uint8_t KeyNum;
uint8_t RxData;
uint16_t temp_dat;//温度变量
uint16_t hum_dat;//湿度变量
int main(void)
{
DHT11_Data_TypeDef DHT11_Data;
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
//Serial_Init();
uart_init(9600); //串口初始化为115200
OLED_Init();
Key_Init();
Car_Init();
SysTick_Init();
LED_Init();
DHT11_Init();
TIM2_Configuration();
UltrasonicWave_Configuration();
dht11_delay_ms(100);
OLED_ShowNum(1,1,10,3);
OLED_ShowString(1,1,"Distance:");
OLED_ShowString(2,1,"temp: C");
OLED_ShowString(3,1,"humi: %");
//UltrasonicWave_StartMeasure();
// OLED_ShowNum(2,6,23,2);
// OLED_ShowNum(2,13,20,2);
int a = 10;
int ul;
while (1)
{
ul = UltrasonicWave_StartMeasure();
//调用DHT11_Read_TempAndHumidity读取温湿度,若成功则输出该信息
if( DHT11_Read_TempAndHumidity ( & DHT11_Data ) == SUCCESS)
{
printf("\r\n湿度为%d.%d %RH ,温度为 %d.%d℃ \r\n",DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci);
}
else
{
printf("Read DHT11 ERROR!\r\n");
}
Delay_ms(100);
dht11_delay_ms(100);
OLED_ShowNum(2, 6, DHT11_Data.temp_int , 2);
OLED_ShowNum(3, 6, DHT11_Data.humi_int , 2);
// if (Serial_GetRxFlag() == 1)
// {
// RxData = Serial_GetRxData();
// // Serial_SendByte(RxData);
// OLED_ShowNum(1, 1, RxData, 2);
// }
// int a=2;
// Serial_Printf("%d",a); //打印函数
//
KeyNum=Key_GetNum();
if(KeyNum == 1)
{
Go_Ahead();
printf("前方无障碍物,前进!\r\n");
}
if(KeyNum == 2)
{
Go_Back();
printf("前方有障碍物,后退!\r\n");
}
if(KeyNum == 3)
{
Turn_Left();
printf("开始左转!\r\n");
}
if(KeyNum == 4)
{
Turn_Right();
printf("开始右转!\r\n");
}
if(KeyNum == 5)
{
Car_Stop();
printf("车辆停止!\r\n");
}
if(KeyNum == 6)
{
a++;
printf("距离阈值为:%d\r\n" ,a);
}
if(KeyNum == 7)
{
a--;
printf("距离阈值为:%d\r\n" ,a);
}
if(ul<a)
{
LED_ON();
Delay_ms(100);
}
if(ul>=a)
{
LED_OFF();
}
}
}