文章目录
一、智能垃圾桶
1.题目要求
- 使用超声波测距模块HC-SR04模块进行检测垃圾桶容量,检测到垃圾桶容量满载后进行报警提示,此时需要处理垃圾;
- 红外传感器HCSR501检测有人或者无人,有人时垃圾桶盖自动打开,无人时自动合上(用舵机模拟翻盖动作);
- 光敏传感器检测周围光照环境控制Led灯的亮灭;
- DHT11温湿度传感器检测环境的温度,湿度;
- MQ-135空气质量传感器检测空气质量;
- OLED显示屏显示温湿度,空气质量,有人/无人信息;
- 模拟Wifi功能,自动接收温湿度,光照强度,空气质量,垃圾桶容量等信息。
2.思路
由上面的功能需求,我们可知需要一个主控选51或者32都行,然后超声波测距模块HC-SR04,声光报警,红外传感器HCSR501,舵机,光敏电阻,Led灯,DHT11传感器,MQ-135空气质量传感器,OLED显示屏,WIfi模块等。
单片机STM32F103C8T6:
超声波测距模块:
声光报警:
红外传感器:
舵机:
光敏电阻和灯:
温湿度传感器DHT11:
MQ-135 空气质量传感器:
OLED显示屏:
模拟Wifi模块:
3.电路仿真
3.1 未仿真
3.2 开始仿真,显示屏显示环境温度等,虚拟终端打印信息
3.3 红外检测到人。模拟垃圾桶盖翻盖
3.4 光照强度低于30,自动开启灯光
3.5 模拟垃圾桶容量100%,检测到垃圾桶满声光报警
4.仿真程序
4.1 程序说明
主控芯片:STM32F103C8
HSI:64MHZ
Systick: 1ms
超声波测距:
TR:PA0
ECHO:PA1
光照传感器:LDR(PA2)
空气质量传感器:ADC(PA3)
灯光:LED(PA4)
DHT11温湿度传感器:DATA(PA6)
模拟WIFI模块(Uart1):9600(PA9:tx1,PA10:rx1)
舵机:
PWM1(PB6)
声光报警:BUZZER(PB11)
OLED显示屏:SCL(PB14),SDA(PB15)
4.2 主程序
/* Includes ------------------------------------------------------------------*/
#include "Drv_UserSystem.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
/**
* @brief main function.
* @param none
* @retval none
*/
int main(void)
{
UserSystemInit();//用户配置初始化
while (1)
{
if (stSysTime.flg._10ms + TEN_MILLISECOND < Time_millis()) //10ms
{
stSysTime.flg._10ms = Time_millis();
IR_Scan();//检测是否有人
}
if (stSysTime.flg._50ms + FIFTY_MILLISECOND < Time_millis()) //50ms
{
stSysTime.flg._50ms = Time_millis();
ADC_Scan();//光照,空气质量检测
DHT11_Collect_data();//DHT11采集温度,湿度
Measurement_function();//测距函数
}
if(stSysTime.flg._100ms + BEST_MILLISECOND < Time_millis()) //100ms
{
stSysTime.flg._100ms = Time_millis();
OLED_Handel();//OLED显示
IWDG_ReloadCounter();//清开门狗
}
if (stSysTime.flg._1s + THOUSAND_MILLISECOND