124-基于stm32单片机DHT11温湿度光敏光照检测OLED显示实物制作(源程序+原理图+PCB+元件清单)

本文介绍了使用STM32单片机结合DHT11温湿度传感器和光敏传感器,配合OLED显示的项目。包括硬件连接、程序设计(C语言+Keil5)、以及AD软件的应用。还提供了详细步骤和资源清单供读者参考。

一:功能介绍

1、采用stm32单片机核心板+0.96寸OLED+DHT11温湿度传感器+光敏传感器,制作一个基于stm32单片机DHT11温湿度光敏光照检测OLED显示实物;

2、通过DHT11传感器采集当前的温湿度,并且显示到OLED显示屏上

3、通过光敏传感器采集当前光照强度,并且显示到OLED显示屏上

4、当光照强度低于一定值(阈值程序里面可以修改),LED指示灯熄灭(可以用来进行光控相关功能)

二:实物演示视频:

124-基于stm32单片机DHT11温湿度光敏光照检测OLED显示实物制作(源程序+原理图+PCB+元件清单)

三:设计软件介绍

本设计使用C语言编程设计,程序代码采用keil5编写,程序有中文注释,新手容易看懂,原理图和PCB采用AD(Altium Designer)绘制;资料包里有相关软件包,可自行下载安装。

四:程序打开方法

特别注意:下载资料包以后一定要先解压!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。

875afaed9d436f7f9bebc443b4fd0a2a.png

9b40be0d9ea60ecb70278d023e74c0f3.png

程序部分展示,有中文注释,新手容易看懂

static void DHT11_Mode_IPU(void)
{
     GPIO_InitTypeDef GPIO_InitStructure;


      /*选择要控制的macDHT11_Dout_GPIO_PORT引脚*/  
    GPIO_InitStructure.GPIO_Pin = macDHT11_Dout_GPIO_PIN;


     /*设置引脚模式为浮空输入模式*/ 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; 


    /*调用库函数,初始化macDHT11_Dout_GPIO_PORT*/
    GPIO_Init(macDHT11_Dout_GPIO_PORT, &GPIO_InitStructure);   
  
}




/*
 * 函数名:DHT11_Mode_Out_PP
 * 描述  :使DHT11-DATA引脚变为推挽输出模式
 * 输入  :无
 * 输出  :无
 */
static void DHT11_Mode_Out_PP(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;


     /*选择要控制的macDHT11_Dout_GPIO_PORT引脚*/                                 
    GPIO_InitStructure.GPIO_Pin = macDHT11_Dout_GPIO_PIN;  


  /*设置引脚模式为通用推挽输出*/
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   


  /*设置引脚速率为50MHz */   
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


  /*调用库函数,初始化macDHT11_Dout_GPIO_PORT*/
    GPIO_Init(macDHT11_Dout_GPIO_PORT, &GPIO_InitStructure);      
  
}




/* 
 * 从DHT11读取一个字节,MSB先行
 */
static uint8_t DHT11_ReadByte ( void )
{
  uint8_t i, temp=0;
  


  for(i=0;i<8;i++)    
  {   
    /*每bit以50us低电平标置开始,轮询直到从机发出 的50us 低电平 结束*/  
    while(macDHT11_Dout_IN()==Bit_RESET);


    /*DHT11 以26~28us的高电平表示“0”,以70us高电平表示“1”,
     *通过检测 x us后的电平即可区别这两个状 ,x 即下面的延时 
     */
    delay_us(40); //延时x us 这个延时需要大于数据0持续的时间即可         


    if(macDHT11_Dout_IN()==Bit_SET)/* x us后仍为高电平表示数据“1” */
    {
      /* 等待数据1的高电平结束 */
      while(macDHT11_Dout_IN()==Bit_SET);


      temp|=(uint8_t)(0x01<<(7-i));  //把第7-i位置1,MSB先行 
    }
    else   // x us后为低电平表示数据“0”
    {         
      temp&=(uint8_t)~(0x01<<(7-i)); //把第7-i位置0,MSB先行
    }

  :原理图和PCB(使用AD(Altium Designer)绘制)

bea29034364ee31c2562534bef7fd9aa.png

 9457a582c56ae1b0c45de0694d6065bd.png

:元器件清单和图片展示(可以放大图片查看具体实物)

915b9e51098466fdd745935fb49eda4b.png

:实物图展示

12185ba9f4b08218f6d58413c9751427.jpeg

4a143b38237f0fab5dbe055305ac3a6c.jpeg

9817b288dd71a0a743d704fed5b43398.jpeg

八:资料清单展示(文件中包含的相关资料)

c8dadd466d35cee821603f7a6c44d656.png

资料包下载链接 

### 基于STM32单片机的智能大棚环境控制系统Altium Designer系统原理图设计方案 #### 1. 系统概述 基于STM32单片机的智能大棚环境控制系统旨在实现对农业生产环境的全面监控和智能化管理。该系统通过STM32单片机作为核心控制器,负责采集农业大棚内的温度、湿度、光照强度、CO2浓度等数据,并通过无线通信模块将数据上传至服务器端,支持远程监控和智能调节功能[^1]。 #### 2. 系统功能模块 系统主要由以下几个功能模块组成: - **数据采集模块**:包括温湿度传感器(如DHT11)、光照传感器(如光敏电阻)、土壤湿度传感器、CO2浓度传感器(如MQ-135)等。 - **核心控制模块**:采用STM32F103C8T6单片机作为主控芯片,负责数据处理和逻辑控制。 - **显示模块**:使用OLED显示屏(如0.96寸OLED12864)显示实时环境参数。 - **报警模块**:通过蜂鸣器进行异常情况报警。 - **执行模块**:包括继电器控制的加热、卷帘、灌溉、通风等功能。 - **通信模块**:集成无线通信模块(如蓝牙或ESP8266),用于数据上传和远程控制。 #### 3. 原理图设计 在Altium Designer中,系统原理图的设计可以分为以下几个部分: ##### 3.1 核心控制模块 核心控制模块以STM32F103C8T6单片机为核心,包括最小系统电路、时钟电路、复位电路和调试接口电路。以下为最小系统电路的示例代码: ```python # 定义STM32单片机引脚 VCC = Pin("VCC", "Power") GND = Pin("GND", "Ground") RST = Pin("NRST", "Input") SWDIO = Pin("PA13", "I/O") SWCLK = Pin("PA14", "I/O") # 连接调试接口 swd_io = Net("SWD_IO") swd_io.connect(SWDIO) swd_clk = Net("SWD_CLK") swd_clk.connect(SWCLK) ``` ##### 3.2 数据采集模块 数据采集模块包括多个传感器接口,以下是部分传感器的连接示例: - **温湿度传感器(DHT11)**:通过one-wire总线与单片机的GPIO脚连接。 ```python # DHT11传感器连接 DHT11_DATA = Pin("PB4", "I/O") dht_data = Net("DHT11_Data") dht_data.connect(DHT11_DATA) ``` - **光照传感器(光敏电阻)**:模拟信号输出与单片机ADC输入脚连接。 ```python # 光照传感器连接 LIGHT_ADC = Pin("PC0", "Analog") light_adc = Net("Light_ADC") light_adc.connect(LIGHT_ADC) ``` ##### 3.3 显示模块 显示模块使用OLED显示屏,通过IIC总线与单片机通信。 ```python # OLED显示屏连接 SCL = Pin("PB6", "I/O") SDA = Pin("PB7", "I/O") iic_scl = Net("I2C_SCL") iic_sda = Net("I2C_SDA") iic_scl.connect(SCL) iic_sda.connect(SDA) ``` ##### 3.4 报警模块 报警模块使用蜂鸣器,通过NPN三极管驱动。 ```python # 蜂鸣器驱动连接 BEEP = Pin("PA5", "Output") beep_net = Net("Beep") beep_net.connect(BEEP) ``` ##### 3.5 执行模块 执行模块通过继电器控制加热、卷帘、灌溉、通风等功能。 ```python # 继电器控制连接 RELAY1 = Pin("PA6", "Output") relay1_net = Net("Relay1") relay1_net.connect(RELAY1) ``` #### 4. PCB设计 完成原理图后,可以将设计导入PCB编辑器。在Altium Designer中,PCB设计的关键步骤包括: - 根据原理图生成网络表,并将其导入PCB编辑器。 - 设计PCB板框,并分配元器件位置。 - 绘制走线,确保信号完整性并遵守设计规则检查(DRC)。 - 添加过孔、电源平面和接地平面,优化电气性能。 #### 5. 示例代码 以下是系统主程序的简化代码示例: ```c #include "sys.h" #include "delay.h" #include "adc.h" #include "key.h" #include "OLED_I2C.h" int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置中断优先级分组 delay_init(); // 延时函数初始化 Usart1_Init(115200); // 初始化串口 TIM4_Init(300, 7200); // 初始化定时器 while (DHT11_Init()) {} // 初始化DHT11传感器 Adc_Init(); // 初始化ADC Relay_init(); // 初始化继电器 Beep_init(); // 初始化蜂鸣器 OLED_Init(); // 初始化OLED显示OLED_CLS(); // 清屏 while (1) { OLED_Display_Cotrol(); // 显示控制函数 } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值