基于stm32单片机毕业设计—-物联网app控制智慧农业大棚项目源代码程序+原理图+DHT11温湿度传感器-光敏电阻-土壤湿度检测+WiFi模块esp8266+继电器水泵+自动补光
一、设计简介
该毕业设计项目利用STM32F103C8T6微控制器为核心,结合DHT11温湿度传感器、光敏电阻、土壤湿度检测模块、WiFi模块ESP8266、继电器以及水泵等设备,构建一个智慧大棚系统。该系统能够实时采集大棚内部的温湿度、光照强度以及土壤湿度数据,并通过WiFi模块将数据传输至云端或手机APP,实现远程监控。同时,系统具备自动补光、自动灌溉等功能,能够根据环境参数自动调节大棚内的环境条件,为作物生长提供最佳的生长环境。
百度网盘源码资料下载链接
二、功能设计
- STM32f103c8t6单片机:核心控制单元,负责数据采集、处理和控制指令的发送。
- DHT11温湿度传感器:用于实时采集大棚内的温度和湿度数据,具有高精度和长期稳定性。
- 光敏电阻:用于测量大棚内的光照强度,根据光照强度自动调节LED补光灯的亮度。
- 土壤湿度检测模块:用于实时检测土壤湿度,根据土壤湿度自动调节水泵的开关,实现自动灌溉。
- WiFi模块ESP8266:用于将采集到的环境参数数据传输至云端或手机APP,实现远程监控和数据分析。
- 继电器:用于控制水泵和LED补光灯的开关,实现自动灌溉和补光功能。
- 水泵:用于灌溉大棚内的作物,根据土壤湿度自动调节灌溉量。
- LED补光灯:用于提供光照,根据光照强度自动调节亮度,为作物提供足够的光照条件。
- 实时数据采集:系统能够实时采集大棚内的温湿度、光照强度和土壤湿度数据,并通过OLED屏幕或云端平台实时显示。
- 自动报警:当环境参数超出预设范围时,系统会触发报警功能,通过蜂鸣器或云端平台发送报警信息,提醒用户及时采取措施。
- 自动灌溉:根据土壤湿度数据,系统自动调节水泵的开关,实现自动灌溉功能,确保作物获得足够的水分。
- 自动补光:根据光照强度数据,系统自动调节LED补光灯的亮度,为作物提供足够的光照条件,促进作物生长。
- 远程监控:用户可以通过手机APP或云端平台远程监控大棚内的环境参数,实时了解作物的生长环境,并可以根据需要调整系统参数。
三、软件环境
Keil5 MDK:stm32单片机源代码程序编写及下载代码
ST-Link 驱动程序:用于下载程序到 STM32。
四、所需硬件以及传感器模块
1.1 stm32f103c8t6(1个)
STM32F103C8T6单片机是一款非常用的单片机型号,可以方便灵活的进行嵌入式系统开发。首先,它的处理器基于Cortex-M3内核,最高工作频率达72MHz。STM32F103C8T6拥有64KB闪存和20KB SRAM,非常适合中小型单片机开发项目。
具有非常丰富的外设接口,如串口USART、SPI通信、I2C通讯、CAN通讯和USB,在与单片机外设通信方面非常方便。有多个GPIO通用IO口,定时器,中断系统,灵活配置为输入,输出、模拟输入或PWM输出,可以连接各类传感器和模块。
内部集成的12位逐次逼近型ADC和DAC,支持高精度模拟信号处理。STM32F103C8T6还支持低功耗模式,适合电池供电的应用场景。结合强大的STM32开发生态,包括库函数和工具链,可以让开发者很方便的完成单片机项目的开发。
1.2 wifi模块ESP8266(ESP01s)(1个)
一、基本信息


1.3 温湿度传感器DHT11(1个)
DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数
字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性。
传感器包括一 个电容式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。
引脚说明
1、VDD 供电 3.3~5.5V DC
2、DATA 串行数据,单总线
3、NC 空脚
4、GND 接地,电源负
1.4 光敏电阻(1个)
光敏电阻(也称为光导电阻或光敏元件)是一种基于光电效应的传感器,其电阻值会随着光照强度的变化而变化。当光照增强时,光敏电阻的阻值减小;当光照减弱时,阻值增大。
ADC(模数转换器)是单片机中的一个重要外设,用于将模拟信号转换为数字信号。在采集光敏电阻信号时,ADC的作用是将光敏电阻产生的模拟电压信号转换为数字信号,以便单片机进行后续处理。
-
电路连接:
- 将光敏电阻与固定电阻(通常为几千欧姆)串联,形成一个分压电路。
- 将分压电路的输出端连接到单片机的ADC输入通道。
- 确保电路连接正确,避免短路或断路。
五、原理图及设计流程图
六、程序代码
#include "sys.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char i ;
uchar table1[]="Crop shed design"; //
char tab[16];
char dis0[16]; //暂存
char dis1[16]; //暂存
char tabData[42];//打印时间数组
unsigned int ligh ; //光照
unsigned int ligh_max ; //光照
u8 ReadDhtFlag; //读取温湿度标志 定时器中处理
u8 readDhtFlag;
u8 readFlag;//定时读取标志
u8 SendFlag;//定时读取标志
u8 HAS_Flag=0;
u8 Led_before=0;
u8 Relay_before=0;
unsigned int soil = 0;//土壤湿度
unsigned int TEMP_Alarm=26; //温度发送短信标志位,=1表示已经发送,=0表示没有发送
unsigned int HUMI_Alarm=70; //防盗发送短信标志位,=1表示已经发送,=0表示没有发送
unsigned int soil_Alarm=55; //烟雾发送短信标志位,=1表示已经发送,=0表示没有发送
unsigned int soilmax_Alarm=63; //烟雾发送短信标志位,=1表示已经发送,=0表示没有发送
unsigned int ligh_min_Alarm=150; //烟雾发送短信标志位,=1表示已经发送,=0表示没有发送
unsigned int ligh_max_Alarm=400; //烟雾发送短信标志位,=1表示已经发送,=0表示没有发送
int main(void)
{
u16 adcx;
// float temp;
delay_init(); //延时函数初始化
uart_init(115200); //串口初始化为115200
TIM3_Int_Init(4999,5999);//50ms
Adc_Init(); //ADC初始化
Beep_Init();
Relay_Init();
Led_Init();
key_Init();
Lcd_Init(); //初始化lcd屏幕
delay_ms(20);
Lcd_Puts(0,0,"Crop shed design"); //初始化显示
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
while(1)
{
if(ReadDhtFlag==1)//定时读取温湿度标志
{
sprintf(tab,"Temp:%02d DH:%02d",(u16)DHT11.Tem_H,(u16)DHT11.Hum_H);
Lcd_Puts(0,0,(unsigned char *)tab); //初始化显示
}
if(readFlag == 1)// 定时读取标志
{
readFlag = 0;
soil =99 - (unsigned int)adcx*99/4096;// 浓度按照100算*100
sprintf(tab,"soil:%02d",(unsigned int)soil);
Lcd_Puts(0,1,(unsigned char *)tab); //显示
}
if(readDhtFlag == 1)// 定时读取标志
{
readDhtFlag = 0;
ligh_max = adcx*50.1/255;
if(ligh_max>460)
ligh_max=460;
ligh =475-ligh_max;// 浓度按照100算*100
sprintf(tab,"ligh:%03d",(unsigned int)ligh);
Lcd_Puts(8,1,(unsigned char *)tab); //显示
}
if(Key3==0)
{
delay_ms(10);
if(Key3==0)
{
HAS_Flag = !HAS_Flag;
Led=Led_before;
Relay=Relay_before;
while(!Key3);
}
}
if(DHT11.Tem_H>TEMP_Alarm||DHT11.Hum_H>HUMI_Alarm||soil>soilmax_Alarm||ligh>ligh_max_Alarm)
{
Beep=1;
}
else
{
Beep=0;
}
if(HAS_Flag==1)
{
sprintf(tab,"M:%01d",(u8)HAS_Flag);
Lcd_Puts(13,0,(unsigned char *)tab); //初始化显示
if(Key2==0)
{
delay_ms(10);
if(Key2==0)
{
Relay =!Relay;
while(!Key2);
}
}
if(Key1==0)
{
delay_ms(10);
if(Key1==0)
{
Led =!Led;
while(!Key1);
}
}
}
else
{
sprintf(tab,"M:%01d",(u8)HAS_Flag);
Lcd_Puts(13,0,(unsigned char *)tab); //初始化显示
if(soil<soil_Alarm)
{
Relay =1;
}
else
{
Relay =0;
}
if(ligh<ligh_min_Alarm)
{
Led =1;
}
else
{
Led =0;
}
Led_before=Led;
Relay_before=Relay;
}
}
}
七、实物图片
八、资料内容清单
百度网盘源码资料下载链接https://pan.baidu.com/s/1nQiyiGZ312H94mEHEeIf_Q?pwd=soou
作者:铭创电子设计