单片机毕业设计基于stm32的蔬菜大棚智能监控系统设计


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

随着科技的不断发展,人们的生活水平逐步上升,对自身的健康有越来越重视,故而绿色食品成了人们的追捧,但是绿色食品的参量却不尽人意。蔬菜大棚种植可以完美得解决了人们的需求,但是传统的蔬菜大棚有许多明显的缺点,因此设计了基于STM32单片机蔬菜大棚温控系统。
在本设计中,通过使用STM32作为中央处理器,同时使用了层次化和模块化的电路设计理念,将软件与硬件巧妙的融合在一起,硬件为主,软件为辅。通过各种传感器对蔬菜大棚的内部环境因子进行采集,如空气的温度与湿度、光照的强度、土壤的温度与湿度,这些环境因子的数据就会被采集,通过加热片模块与java语言编译的客户端网站进行对接,客户端对数据进行处理后对STM32单片机反馈,STM32单片机反馈的信息进行处理。试验证实,此设计可以对蔬菜大棚的温度,土壤的湿度与温度,以及光照的强度进行检测并对其做出反应,如进行通风,洒水,补光。均实现了预期的效果.

功能介绍

1.可通过温湿度传感器,采集当前环境的温度、湿度数值。
2.可通过光敏传感器,采集当前的光照数值。
3.可通过继电器控制加热片实现种植环境温度恒温控制。
4.可通过继电器控制启水泵进行浇水,实现种植环境水量饱和。
5.可通过LED灯实现种植植物光照吸收充足
6.蜂鸣器警报

程序代码部分参考

#include "sys.h"
#include "adc.h"
#include "delay.h"
#include "lcd1602.h"
#include "ds18b20.h"
#include "timer.h"
#include "usart1.h"
#include "gpio.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#define STM32_RX1_BUF       Usart1RecBuf 
#define STM32_Rx1Counter    RxCounter
#define STM32_RX1BUFF_SIZE  USART1_RXBUFF_SIZE

unsigned int  light=0;
unsigned char temperature=0;
unsigned char setTempValue=35;        //温度设置值
unsigned int  setSoilMoisture=10;
unsigned char setLightValue=20;       //光照设置值
unsigned int  soilMoisture;           //土壤湿度

bool usart_send_flag = 0;
bool mode = 0;               //0是自动模式,1是手动模式
bool shuaxin  = 0;
bool shanshuo = 0;
bool sendFlag = 1;

unsigned char setn=0;//记录设置键按下的次数

void displayLight(void)//显示光照
{
		u16 test_adc=0;
	
	  /获取光线值
	  test_adc = Get_Adc_Average(ADC_Channel_8,10);//读取通道9的5次AD平均值
		light = test_adc*99/4096;//转换成0-99百分比
		light = light >= 99? 99: light;//最大只能到百分之99
	  if(light<=setLightValue && shanshuo)
		{
void displaySoilMoisture(void)//显示土壤湿度
{
	  float voltage = 0.0;

	   voltage = Get_Adc_Average(ADC_Channel_9,10)*3.3/4096;
	   if(voltage > 3.3)voltage = 3.3;
	   if(voltage < 1.0) soilMoisture=99;
		 else
		 {
				 soilMoisture = (3.3 - voltage) / 0.023;  
				 if(soilMoisture > 99)soilMoisture = 99;        //最大取百分之99
		 }
		 if(soilMoisture<=setSoilMoisture && shanshuo)
		{
			 LCD_Write_Char(9,0,' '); 
			 LCD_Write_Char(10,0,' ');
		}
		else
		{
			 LCD_Write_Char(9,0,soilMoisture/10+'0'); 
			 LCD_Write_Char(10,0,soilMoisture%10+'0');
		}
}


void displaySetValue(void)
{
		if(setn == 1)
		 {
				LCD_Write_Char(7,1,setSoilMoisture/10+'0'); 
			  LCD_Write_Char(8,1,setSoilMoisture%10+'0');
		 }
		 if(setn == 2)
		 {
				LCD_Write_Char(7,1,setTempValue/10+'0'); 
			  LCD_Write_Char(8,1,setTempValue%10+'0');
		 }
		 if(setn == 3)
		 {
				LCD_Write_Char(7,1,setLightValue/10+'0'); 
			  LCD_Write_Char(8,1,setLightValue%10+'0');
		 }
}

void keyscan(void)
{
	if(KEY1 == 0)//模式切换按键
	{
	 	delay_ms(20);//消抖
		if(RELAY2==1)delay_ms(50);
		if(KEY1 == 0)
		{
		 	while(KEY1 == 0);//等待按键松开
			if(setn == 0)
			 {
				  mode = !mode;
					if(mode==0)LCD_Write_String(13,0,"ZD");else LCD_Write_String(13,0,"SD");
			 }
		}
	}
	if(KEY2 == 0)//模式切换按键
	{
	 	delay_ms(20);
		if(RELAY2==1)delay_ms(50);
		if(KEY2 == 0)
		{
       while(KEY2 == 0);
			 BEEP=0;
			setn ++;
			 if(setn == 1)
			 {
					LCD_Write_String(0,0,"set the Moisture");//显示字符串
					LCD_Write_String(0,1,"       00%      ");
			 }
			 if(setn == 2)
			 {
					LCD_Write_String(0,0,"  set the Temp  ");//显示字符串
					LCD_Write_String(0,1,"       00 C     ");
				  LCD_Write_Char(9,1,0xdf);
			 }
			 displaySetValue();
			 if(setn >= 4)
			 {
					setn = 0;
				  LCD_Write_String(0,0,"Moisture:  %    ");//显示字符串
					LCD_Write_String(0,1,"Gx:  % Temp:   C");
					LCD_Write_Char(14,1,0xdf);
				  if(mode==0)LCD_Write_String(13,0,"ZD");else LCD_Write_String(13,0,"SD");
			 }
		}
	}
	if(KEY3 == 0)//加键
	{
		delay_ms(20);
		if(RELAY2==1)delay_ms(50);
		if(KEY3 == 0 )
		{
			while(KEY3 == 0);
			 {
					if(setSoilMoisture<99)setSoilMoisture++;
			 }
			 if(setn == 2)
			 {
					if(setTempValue<99)setTempValue++;
			 }
			 if(setn == 3)
			 {
				 if(setLightValue<99)setLightValue++;
			 }
			 displaySetValue();
		}
	}
	
	if(KEY4 == 0)//减键
	{
		delay_ms(20);
		if(RELAY2==1)delay_ms(50);
		if(KEY4 == 0 )
		{
			 {
				 if(setLightValue>0)setLightValue--;
			 }
			 displaySetValue();
		}
	}
}

void UsartSendReceiveData(void)
{
		char *str1=0,i;
	  int  setValue=0;
	  char setvalue[5]={0};
	
		if(STM32_Rx1Counter > 0)
		{
			
			  delay_ms(20);
			
				if(strstr(STM32_RX1_BUF,"light:")!=NULL)
				{
					  BEEP = 1;
						delay_ms(80);
					  BEEP = 0;
					
						str1 = strstr(STM32_RX1_BUF,"light:");
					  
					while(*str1 >= '0' && *str1 <= '9')        //判断是不是0到9有效数字
						{
								setvalue[i] = *str1;
								i ++; str1 ++;
								if(*str1 == ',')break;            //换行符,直接退出while循环
					
ak;            //换行符,直接退出while循环
								delay_ms(10);
						}
						setvalue[i] = '\0';            //加上结尾符
						setValue = atoi(setvalue);
						if(setValue>=0 && setValue<=99)
int main(void)
{	
		delay_init();	    //延时函数初始化	  
	  NVIC_Configuration();
		delay_ms(500);       //上电瞬间加入一定延时在初始化
	  DS18B20_GPIO_Init();
	  Adc_Init();          //ADC初始化
	  KEY_GPIO_Init();    //按键初始化
		LCD_Init();         //屏幕初始化
	  DS18B20_Init();
	  uart1_Init(9600);
  	LCD_Write_String(0,0,"Moisture:00% ZD ");//显示字符串
	  LCD_Write_String(0,1,"Gx:00% Temp:00 C");
	  LCD_Write_Char(14,1,0xdf);
		TIM3_Init(99,719);   //定时器初始化,定时1ms
		//Tout = ((arr+1)*(psc+1))/Tclk ; 
		//Tclk:定时器输入频率(单位MHZ)
		//Tout:定时器溢出时间(单位us)
		while(1)
		{  
			 keyscan();
			 if(setn == 0)
			 {
				   if(shuaxin == 1)
					 {
						   shuaxin = 0;
							 displayLight();   //显示光照
							 displaySoilMoisture(); //显示土壤湿度
							 displayTemperature();  //显示温度
							 if(mode==0)   
							 {
									 if(light<=setLightValue)RELAY1=1;else RELAY1=0;              //光线暗开灯
									 if(temperature>=setTempValue||soilMoisture<=setSoilMoisture)RELAY2=1;else RELAY2=0;         //温度高或者湿度低开水泵
								 
									 if(light<=setLightValue||temperature>=setTempValue||soilMoisture<=setSoilMoisture)BEEP=1;else BEEP=0;  //蜂鸣器提醒
							 }
							 else
							 {
									 BEEP=0;
							 }
					 }
			 }
			 UsartSendReceiveData();   //串口发送接收数据
			 delay_ms(20);
		}	
}


设计清单

步进电机元件清单
1.7*9万用板
2.四位一体共阳.36数码管
3.STC89C51
4.步进电机

具体实现截图

在这里插入图片描述
在这里插入图片描述

参考文献

[1] 嵌入式温室环境智能控制系统设计与实现[D]. 王惠.安徽大学,2020
[2] 基于STM32的物联网温室控制管理系统设计[D]. 王鹏辉.合肥工业大学,2019
[3] 基于嵌入式系统的蔬菜大棚管控系统设计[J]. 朱婧玮.南方农机,2023(05)
[4] 基于STM32蔬菜大棚控制系统设计[J]. 赵圆圆.智慧中国,2022(02)
[5] 基于STM32的蔬菜大棚控制系统设计[J]. 潘澳;周丽丽;何源长;谢欣秀.南方农机,2020(24)
[6] 基于STM32的蔬菜大棚环境监测系统设计[J]. 郑洋;宋振凯;赵婧.无线互联科技,2022(19)
[7] 智能蔬菜大棚生产环境调控系统[J]. 刘灿;朱晓坤;丁奇;邢康慧;伍刚.智慧农业导刊,2022(17)
[8] 基于物联网的农业蔬菜大棚环境监控系统设计[J]. 陈根;易治国.南方农机,2022(16)
[9] 我国设施农业发展现状、障碍及对策研究[J]. 李浩.南方农机,2021(23)
[10] 设施农业发展现状及对策[J]. 张小燕.甘肃农业,2021(04)
[11] 基于STM32单片机的仓库温度监测系统设计与控制[J]. 占华林;陈亮亮;张配阳;诸丽芳;于子正.科技创新与应用,2021(29)
[12] 基于物联网和雾计算的温室智能感控系统设计[J]. 苑光明;王曼娜;丁承君;冯玉伯.传感器与微系统,2020(08)
[13] 基于物联网技术的农业环境监控系统设计[J]. 潘新元;刘志强;张礼麟;段海军;韩勇.无线互联科技,2020(04)
[14]基于STM32的智慧蔬菜大棚系统设计[J] 冼进 冼允廷 华南理工大学计算机科学与工程学院 2023(04)
[15] 现代智慧农业设施大棚环境监测系统设计[J]. 张玮.计算机测量与控制,2020(08)
[16] Intelligent Temperature Control System of Greenhouse Based on STM32 Single Chip Microcomputer

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值