STM32项目设计:温湿度空气质量报警器, 分享源码、PCB
文章目录
- 一、课题
- 二、准备材料
- 三、原理图与PCB设计
- 四、程序设计
2021年10月27-2022年1月1日 可承接单片机设计,有意可添加Q2809786963
百度网盘资料链接:https://pan.baidu.com/s/1J6AuQpoDJbjMko3kSD4aZw
提取码:81f5
取走点个赞~
一、课题
1、用 DHT11 温湿度传感器获取温湿度信息,显示到OLED屏上
2、用 MQ-135 空气质量传感器获取空气质量信息,显示到OLED屏上
3、设计一个报警系统,可以设置温湿度与空气质量的上限,超过这个值蜂鸣器发出声响报警
二、准备材料
(一)、主控芯片stm32f103c8t6核心板
(二)DHT11温湿度传感器
(三)mq135空气质量传感器
(四)4针IIC OLED
三、原理图与PCB设计
(一)原理图设计
(二)PCB设计
四、程序设计
(一)DHT11驱动
DHT11.c
#include "DHT11.h"
#include "delay.h"//???DHT11
//??:??????(????)
u8 DHT11_Init()
{GPIO_InitTypeDef GPIO_InitStruce;RCC_APB2PeriphClockCmd(DHT11_DQ_RCC,ENABLE); //????PA0GPIO_InitStruce.GPIO_Pin = DHT11_DQ_PIN;GPIO_InitStruce.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruce.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(DHT11_DQ_PORT,&GPIO_InitStruce);DHT11_Rst();return DHT11_Check();
}//??DHT11
void DHT11_Rst(void)
{ DHT11_IO_OUT(); //SET OUTPUTDHT11_DQ_OUT=0; //??DQdelay_ms(20); //????18msDHT11_DQ_OUT=1; //DQ=1 delay_us(30); //????20~40us
}//??DHT11???
//??1:????DHT11???
//??0:??
u8 DHT11_Check(void)
{ u8 retry=0;DHT11_IO_IN();//SET INPUT while (DHT11_DQ_IN&&retry<100)//DHT11???40~80us{retry++; delay_us(1);}; if(retry>=100)return 1;else retry=0;while (!DHT11_DQ_IN&&retry<100)//DHT11????????40~80us{retry++; delay_us(1);};if(retry>=100)return 1; return 0;
}//?DHT11?????
//???:1/0
u8 DHT11_Read_Bit(void)
{u8 retry=0;while(DHT11_DQ_IN&&retry<100)//???????{retry++; delay_us(1);}retry=0;while(!DHT11_DQ_IN&&retry<100)//??????{retry++; delay_us(1);}delay_us(40);//??40usif(DHT11_DQ_IN)return 1;else return 0;
}//?DHT11??????
//???:?????
u8 DHT11_Read_Byte(void)
{ u8 i,dat;dat=0;for (i=0;i<8;i++) {dat<<=1; dat|=DHT11_Read_Bit();} return dat;
}//?DHT11??????
//temp:???(??:0~50? humi:???(??:20%~90%)
//???:0,??;1,????
u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{ u8 buf[5];u8 i;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i<5;i++)//??40???{buf[i]=DHT11_Read_Byte();}if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0];*temp=buf[2];}}else return 1;return 0;
}
DHT11.h
#ifndef __DHT11_H
#define __DHT11_H
#include "sys.h"#define DHT11_IO_IN() {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=8<<20;}
#define DHT11_IO_OUT() {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=3<<20;}#define DHT11_DQ_OUT PAout(5)
#define DHT11_DQ_IN PAin(5) #define DHT11_DQ_RCC RCC_APB2Periph_GPIOA
#define DHT11_DQ_PIN GPIO_Pin_5
#define DHT11_DQ_PORT GPIOAu8 DHT11_Init(void);
u8 DHT11_Read_Data(u8 *temp,u8 *humi);
u8 DHT11_Read_Byte(void);
u8 DHT11_Read_Bit(void);
void DHT11_Rst(void);
u8 DHT11_Check(void);#endif
(二)MQ-135驱动,由于用的是ADC,直接上ADC代码
#include "adc.h"#include "delay.h"//初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3
void Adc_Init(void)
{ ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE ); //使能ADC1通道时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M//PA1 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_DeInit(ADC1); //复位ADC1 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器 ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1ADC_ResetCalibration(ADC1); //使能复位校准 while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束ADC_StartCalibration(ADC1); //开启AD校准while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能}
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)
{//设置指定ADC的规则组通道,一个序列,采样时间ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
}u16 Get_Adc_Average(u8 ch,u8 times)
{u32 temp_val=0;u8 t;for(t=0;t<times;t++){temp_val+=Get_Adc(ch);delay_ms(5);}return temp_val/times;
}
(三)主程序
main.c部分代码
int main(void){ u16 key;int adc,cnt=0;float volt;delay_init(); NVIC_Configuration(); BEEP_Init();OLED_Init(); OLED_Clear();uart_init(115200);printf("欢迎使用化作尘健康小工具\r\n");KEY_Init();LED_Init();TIM3_Int_Init(500-1,720-1);DEV_Init();OLED_Clear(); OLED_Dis_Menu();while(1) { if(cnt++ ==1000){cnt = 0;LED0=!LED0;adc = Get_Adc_Average(0,5);volt = adc*3.3/4096;air = pow((3.4880*10*volt)/(5-volt),(1.0/0.3203));printf("air :%d\r\n",air);//获取温湿度DHT11_Read_Data( &temp, &humi);if(last_temp!=temp || last_humi!=humi){OLED_Dis_DHT(temp,humi,air);}}key = Key_GetValue(); //按键扫描if(key)DealKeyVal(key);if(!KEY1_IO()){printf("%d\r\n",GetTime());}if(temp>Max_temp || humi>Max_humi || air>Max_air){if(cnt<500)BEEP=1;else if(cnt<1000)BEEP=0;}else BEEP=0;delay_ms(1);} }
STM32项目设计:温湿度空气质量报警器, 分享源码、PCB相关推荐
- java基于ssm空气质量检测系统源码网站空气质量监测源码
简介 Java基于ssm的空气质量检测系统,检测设备检测一定范围内的企业空气指数,如果有污染则地图显示红色标记. 演示视频 https://www.bilibili.com/video/BV1GK4y ...
- java用ssm框架开发的空气质量检测系统源码网站实战项目
环境: tomcat 7+jdk7+mysql5.5 技术: ssm(spring+springMVC+myibats)+jsp+css+ajax+jq+js+layui+pagehleper分页插件 ...
- 基于stm32单片机的空气质量检测仿真(仿真+源码+全套资料)
资料编号:072 可以通过STM32的ADC检测当前的空气质量,LCD1602显示,并且可以自动控制风扇排气,也可以设置为手动排气.包含全套资料,下面是视频演示: 72-基于stm32单片机的空气质量 ...
- java计算机毕业设计教学质量测评系统源码+系统+数据库+lw文档
java计算机毕业设计教学质量测评系统源码+系统+数据库+lw文档 java计算机毕业设计教学质量测评系统源码+系统+数据库+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开 ...
- java计算机毕业设计教师教学质量评估系统源码+mysql数据库+系统+lw文档+部署 - 副本
java计算机毕业设计教师教学质量评估系统源码+mysql数据库+系统+lw文档+部署 - 副本 java计算机毕业设计教师教学质量评估系统源码+mysql数据库+系统+lw文档+部署 - 副本 本源 ...
- 基于stm32单片机一氧化碳可燃气体检测仿真(源码+仿真+参考论文)
资料编号:054 采用stm32单片机作为控制芯片,通过STM32的ADC检测当前的气体浓度,LCD1602显示,并且可以自动控制风扇排气,也可以设置为手动排气.仿真采用Proteus8.9版本,程序 ...
- java计算机毕业设计教学质量测评系统源码+系统+lw+数据库+调试运行
java计算机毕业设计教学质量测评系统源码+系统+lw+数据库+调试运行 注意:该项目只展示部分功能,如需了解,文末获取源码地址. 临近学期结束,还是毕业设计,你还在做java程序.网络编程.课程设计 ...
- FX3U PLC源代码,stm32芯片。 全套硬件,软件源码,可以直接用GX Works2编程直接写入。 带读保护版本
FX3U PLC源代码,stm32芯片. 全套硬件,软件源码,可以直接用GX Works2编程直接写入. 带读保护版本. 是以太网之前的最高版本. 产品功能描述:用梯形图语言编写应用程序,可以直接使用 ...
- FX3U PLC源代码,stm32芯片。 全套硬件,软件源码,可以直接用GX Works2编程直接写入
FX3U PLC源代码,stm32芯片. 全套硬件,软件源码,可以直接用GX Works2编程直接写入. 带读保护版本. 有技术的自动化,电子工程师可以进行学习,有完整pcb,包括报表清单,可以生产制 ...
最新文章
- 搜索引擎优化培训教程
- 22岁专访库克、B站3天涨粉百万,他将毕设树莓派扫描仪升级,繁星散落在校空!...
- 浅谈format格式化输出
- Doc命令收集(一)
- Angularjs 开始之Hello world
- qmake 没有生成.o文件_qmake实用变量
- undefined reference to `__errno‘ 解决办法
- GridView实现数据编辑和删除(一)
- C++ 模板全特化中的函数特化
- 配置鸿蒙Windows烧录环境 用Hiburn烧录第一个程序
- console错误合集
- 【资料整理】squid安装和配置代理上网
- 用Unity简单实现第三人称人物的移动和转向
- 实训-利用HTML+CSS做响应式项目网页
- 使用Wineskin 重新打包《三国志 12 威力增强版 For Mac》
- git clone出错
- 简易四六级成绩管理系统
- 一个程序员失败的爱情
- DNS错误不能上网怎么办?电脑dns错误修复方法?
- 实践篇(4):Apache jena SPARQL endpoint及推理